对于将图像提交到服务器的iPhone应用程序,我需要以某种方式将特定手机中的所有图像绑定在一起.每次提交我都想发送一些独特的手机ID.看着
[[UIDevice mainDevice] uniqueIdentifier]
and [[NSUserDefaults standardDefaults] stringForKey:@"SBFormattedPhoneNumber"]
但在模拟器中得到错误.
有苹果认可的方式吗?
你得到了什么错误?[[UIDevice currentDevice] uniqueIdentifier]
(编辑修复API,感谢Martin!)是官方推荐的方法.
您还可以使用CFUUID生成UUID.这是一些代码:
NSString *uuid = nil; CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault); if (theUUID) { uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID)); [uuid autorelease]; CFRelease(theUUID); }
到目前为止,获取唯一标识符的最简单和最合适的方法是使用Apple明确提供的机制来获取一个 - [[UIDevice currentDevice] uniqueIdentifier]
.您不能保证电话号码对于设备是唯一的,或者设备甚至会有电话号码.除此之外,这样做是一个可怕的想法,因为它是对用户隐私的明确入侵.uniqueidentifier
如果要以任何方式存储它,即使应该进行散列.
为了保持您在安装之间创建的唯一标识符,您可以使用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.
如果我输入上述所有代码,这个答案会变得非常长,但是这里有大量的示例代码可以解决这个问题.
不要忘记,在iOS 5中,uniqueIdentifier将被弃用,您应该使用CFUUID而不是它
有趣的是,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可能更适合您的产品.