它刚刚被曝光在iOS 5中有the UIDevice uniqueIdentifier property is deprecated个,在iOS 7及以上版本中不可用.似乎没有可用或即将提供的替代方法或属性.

我们现有的许多应用程序都紧密依赖于此属性来唯一识别特定设备.今后我们该如何处理这个问题呢?

来自the documentation in 2011-2012的建议是:

Special Considerations

不要使用uniqueIdentifier属性.要创建唯一的特定标识符

但是,如果用户卸载并重新安装应用程序,则此值将不同.

推荐答案

如果用户卸载并重新安装应用程序,则由CFUUIDCreate is创建的UUID是唯一的:每次你都会得到一个新的UUID.

But you might want it to be not unique, i. e. it should stay the same when the user uninstalls and re-installs the app. This requires a bit of effort, since the most reliable per-device-identifier seems to be the MAC address. You could query the MAC and use that as UUID.

Edit:当然,人们需要始终查询同一接口的MAC.我想最好的赌注是en0美元.MAC始终存在,即使接口没有IP/已关闭.

Edit 2:正如其他人所指出的,iOS 6的首选解决方案是-[UIDevice identifierForVendor].在大多数情况下,你应该可以使用它作为旧-[UIDevice uniqueIdentifier]的替代品(但苹果似乎希望你使用的是在应用首次启动时创建的UUID).

Edit 3:所以这个要点不会在注释噪音中丢失:不要使用MAC作为UUID,创建hash using the MAC.该散列每次都会产生相同的结果,即使是在重新安装和应用程序之间也是如此(如果散列是以相同的方式进行的).无论如何,现在(2013)已经没有必要这样做了,除非您需要iOS<;6.0上的"稳定"设备标识符.

Edit 4:在iOS 7中,苹果现在在查询MAC以明确阻止MAC as base for an ID方案时总是返回一个固定值.所以你现在真的应该使用-[UIDevice identifierForVendor]或者创建一个每次安装的UUID.

Ios相关问答推荐

使用音频单元播放音频流,出现爆裂声

如何加密字符串使用AES. GCM在Dart和解密相同的Swift?

Fastlane,iOS Provisioning Profile推送通知权限(通过示例)&

底部导航栏在iOS上浮动

删除领域中的cartItem时出现问题

iOS 17-在Xcode 15中添加导航控制器时,导航栏不会立即显示

如何使用自定义数据源在本地react 本机 ios 应用程序中加载 Tradingview 小部件?

使用 Objective-C 创建 iOS 框架

SwiftUI HStack 文本字段对齐

为什么 Firebase Messaging 配置对于 IOS native 和 Flutter iOS 不同?

NavigationLink 只能在文本部分点击

SKScene 的更新功能似乎不起作用

具有多个目标的应用程序的动态内容

将flutter android项目导入iOS

如何在 UIActivityViewController 中设置邮件主题?

在 iOS 7 上更改标签栏色调 colored颜色

将 iPhone xib 转换为 iPad xib?

自动布局:是什么创建了名为 UIView-Encapsulated-Layout-Width & Height 的约束?

如何用 CAShapeLayer 和 UIBezierPath 画一个光滑的圆?

iOS 7 及更高版本: for each 视图控制器设置状态栏样式