当前位置:  开发笔记 > 编程语言 > 正文

iPhone应用程序的唯一标识符

如何解决《iPhone应用程序的唯一标识符》经验,为你挑选了6个好方法。

对于将图像提交到服务器的iPhone应用程序,我需要以某种方式将特定手机中的所有图像绑定在一起.每次提交我都想发送一些独特的手机ID.看着

  [[UIDevice mainDevice] uniqueIdentifier]
and [[NSUserDefaults standardDefaults] stringForKey:@"SBFormattedPhoneNumber"]

但在模拟器中得到错误.

有苹果认可的方式吗?



1> Ben Gottlieb..:

你得到了什么错误?[[UIDevice currentDevice] uniqueIdentifier](编辑修复API,感谢Martin!)是官方推荐的方法.


)是官方推荐的方法.
`[[UIDevice currentDevice] uniqueIdentifier]`现在从iOS 5.0开始不推荐使用 - 不要使用它.我已经读过这个GitHub仓库正在生成一个带有开源库的唯一ID:https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5
***+ [UIDevice mainDevice]:无法识别:但尝试[UIDevice currentDevice]并且它在sim中工作

2> Jason Harris..:

您还可以使用CFUUID生成UUID.这是一些代码:

NSString *uuid = nil;
CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
  uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID));
  [uuid autorelease];
  CFRelease(theUUID);
}


不,每次都不一样,所以通常你会在首次启动时生成它,然后使用NSUserDefaults将其保存到您的首选项中.
这样做的缺点是,如果删除并重新安装应用程序,或者如果设备从备份恢复,则您将丢失已保存的UUID,并且无法识别来自同一设备的内容.

3> wisequark..:

到目前为止,获取唯一标识符的最简单和最合适的方法是使用Apple明确提供的机制来获取一个 - [[UIDevice currentDevice] uniqueIdentifier].您不能保证电话号码对于设备是唯一的,或者设备甚至会有电话号码.除此之外,这样做是一个可怕的想法,因为它是对用户隐私的明确入侵.uniqueidentifier如果要以任何方式存储它,即使应该进行散列.


+1用于调出隐私问题.这么多人都忽略了这个方面.

4> 小智..:

为了保持您在安装之间创建的唯一标识符,您可以使用SSKeychain轻松制作的Keychain :只需按如下方式设置您的UUID:

        [SSKeychain setPassword:@"Your UUID" forService:@"com.yourapp.yourcompany" account:@"user"];

然后在需要时再次调用它:

NSString *retrieveuuid = [SSKeychain passwordForService:@"com.yourapp.yourcompany" account:@"user"];

注意: 服务和帐户必须完全匹配.

然后,如果删除并重新安装应用程序,UUID将保留并重新安装.

如果您希望跨设备共享此UUID,请将您的应用设置为使用iCloud.然后,您可以将UUID存储在NSUserDefaults中,与KeyValueStore同步,然后使用上面的代码在新设备密钥链中设置UUID.

如果我输入上述所有代码,这个答案会变得非常长,但是这里有大量的示例代码可以解决这个问题.



5> gN0Me..:

不要忘记,在iOS 5中,uniqueIdentifier将被弃用,您应该使用CFUUID而不是它



6> Sam Stewart..:

有趣的是,Apple已经弃用了iOS 5中的uniqueIdentifier(如gN0Me所述).以下是相关的TechCrunch文章:http: //techcrunch.com/2011/08/19/apple-ios-5-phasing-out-udid/

Apple建议您不再唯一地识别设备,而是识别用户.在大多数情况下,这是一个很好的建议,尽管在某些情况下仍然需要全局唯一的设备ID.这些场景在广告中很常见.因此,我写了一个非常简单的插件库,它完全复制了现有的行为.

在一个无耻的自我推销插件中,我会在这里链接它,希望有人发现它有用.此外,我欢迎所有人和任何反馈/批评:http: //www.binpress.com/app/myid/591

然而,在您的特定情况下,我建议跳过我的库提供的全局唯一ID功能,因为它对您的情况有点矫枉过正.相反,我会生成一个简单的CFUUID并将其存储在NSUserDefaults中.此ID将特定于您的应用程序,但允许您将数据库中的"app install"的所有照片分组.

换句话说,通过弃用uniqueIdentifier方法,Apple建议您不识别每个设备,而是每个应用程序安装.除非您在特定条件下运营,否则每个应用程序 ID可能更适合您的产品.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有