我可以用什么长期方法来唯一识别iOS设备?

时间:2012-04-25 15:56:41

标签: iphone objective-c ios

唯一注册iOS设备的最佳方式是什么,不受Apple未来限制的限制?

我目前注册iOS设备的方法(基本上是唯一地识别设备)是我使用iOS设备的UDID来识别并注册它,然后在识别之后我执行必要的操作。

问题是不推荐使用UIDevice uniqueIdentifier属性。我知道有一些解决方法(如this question中所述)。

一种可能性是使用iOS设备的MAC地址。但是,我觉得Apple可能会在将来某个时候限制访问这些信息。

除了访问MAC地址之外还有其他方法来识别iOS设备,我们可以依赖它吗?

5 个答案:

答案 0 :(得分:7)

使用Apple首选的生成CFUUIDRef的方法可能是更好的解决方案,因为我觉得将来也可能会删除MAC地址。如果你使用它并将其保存到NSUserdefaults,除非用户删除应用程序,否则你将保持它。如果您想拥有一个可以在应用程序之间共享的生成的唯一ID,或者在安装之间保留,您应该查看使用UIPasteboard并使用您在应用程序之间共享的密钥保存生成的UID。

//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/

答案 1 :(得分:4)

除非您的应用程序用于管理我的Apple设备,否则这是错误的方法。作为用户,我不希望您知道我正在使用哪个设备。无论我使用什么设备,我都希望你认出我。我希望能够更换有缺陷的设备。 Apple 越来越多地限制对此信息的访问。

[edit]我看不出MAC地址是如何工作的。我的iOS设备可以有多个。

答案 2 :(得分:2)

另一种选择是动态生成您自己的UUID。

CFUUIDRef uuid = CFUUIDCreate(NULL); 
CFStringRef generatedUuidStr = CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
NSString* uuidStr = [(NSString*)generatedUuidStr autorelease];

您可以将此UUID保留在NSUserDefaults中,以实现基于安装的唯一性。如果基于设备的唯一性确实是最重要的(因此在卸载并重新安装id后仍然存在),您将需要一种机制来在设备上保留ID。我认为您可以考虑使用Keychain来持久保存那个应该超越app卸载的ID。在将UUID添加到钥匙串时甚至可以使用访问组,这样您就可以拥有一套使用相同UUID的应用程序。

有关保存钥匙串项目和检索钥匙串项目的详细信息,请参阅apple的安全框架参考。

http://developer.apple.com/library/ios/#DOCUMENTATION/Security/Reference/SecurityFrameworkReference/_index.html

答案 3 :(得分:1)

我见过的最好方法是使用钥匙串。您可以使用 CFUUIDCreateString 函数生成UUID并将其存储在钥匙串中。此数据在备份安装和恢复之间保留在设备中。

答案 4 :(得分:-2)

使用设备Mac地址。它是我认为你需要的独特之处。

How can I programmatically get the MAC address of an iphone