What is a long-term method I can use to uniquely identify an iOS device?
唯一注册iOS设备的最佳方法是什么?iOS设备不会受到未来苹果限制的限制。
我目前注册iOS设备(基本上是唯一地识别设备)的方法是,我使用iOS设备的udid来识别和注册它,然后在识别它之后,我执行必要的操作。
问题是不推荐使用uidevice uniqueidentifier属性。我知道有一些解决方法(如本问题中所讨论的)。
一种可能是使用iOS设备的MAC地址。然而,我觉得苹果公司在未来的某个时候也可能会限制对这些信息的访问。
有没有其他方法(除了访问MAC地址)来识别iOS设备,我们将来可以依赖它?
使用苹果公司的首选方法生成cfuuidref可能是更好的解决方案,因为我觉得将来也可能删除MAC地址。如果您使用它并将其保存到您的nsuserdefaults,那么除非用户删除该应用程序,否则您将保留它。如果您希望生成一个可在应用程序之间共享或在安装之间保持的唯一ID,则应使用uipasteboard并使用在应用程序之间共享的密钥保存生成的uid。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //Create a unique id as a string CFUUIDRef theUUID = CFUUIDCreate(NULL); CFStringRef string = CFUUIDCreateString(NULL, theUUID); //create a new pasteboard with a unique identifier UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"youruniquestring" create:YES]; [pasteboard setPersistent:YES]; //save the unique identifier string that we created earlier [pasteboard setString:((__bridge NSString*)string)]; //accessing it UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"youruniquestring" create:NO]; NSLog([pasteboard string]); |
我在这里写了一个简短的教程,但它的基本内容是:http://www.roostersoftstudios.com/2012/03/26/a-way-to-share-data-between-apps-on-a-given-ios-device/
除非您的应用程序用于管理我的苹果设备,否则这是错误的方法。作为用户,我不想让你知道我使用的是哪个设备。我想让你认出我,不管我用的是什么设备。我想更换有缺陷的设备。苹果将越来越多地限制对这些信息的访问。
[编辑]我看不到MAC地址如何工作。我的iOS设备可以有多个。
另一个选项是动态生成您自己的UUID。
1 2 3 4 | CFUUIDRef uuid = CFUUIDCreate(NULL); CFStringRef generatedUuidStr = CFUUIDCreateString(NULL, uuid); CFRelease(uuid); NSString* uuidStr = [(NSString*)generatedUuidStr autorelease]; |
为了获得基于安装的唯一性,可以在nsuserdefaults中保留此uuid。如果基于设备的唯一性真的是最重要的事情(这样在卸载和重新安装之后ID仍然存在),那么您需要一种机制来在设备上保持ID。我认为您可以考虑使用钥匙链来持久化那个ID,这个ID应该在应用卸载之后持久化。您甚至可以在向钥匙链添加UUID时使用访问组,这样您就可以拥有一套使用相同UUID的应用程序。
有关保存和检索钥匙链项目的更多信息,请参阅Apple的安全框架参考。
http://developer.apple.com/library/ios/documentation/security/reference/securityframeworkreference/index.html
我见过的最好的方法是使用钥匙链。您可以使用cfuuidCreateString函数生成一个uuid,并将其存储在keychain中。在从备份进行安装和恢复之间,此数据保留在设备中。
使用设备的MAC地址。我想这是你所需要的独一无二的。
如何以编程方式获取iPhone的MAC地址