问题:不推荐使用 UDID - 我们不能再使用它了。网上有一些解决方案:生成GUID并存放在“安全的地方”、iCloud、iOS6开始的IdentifierForVendor、OpenUID、SecuredID等等……
请求:我需要设备的唯一标识符才能在我们的服务器上存储用户数据。
问题:我可以使用推送通知的 deviceToken 作为唯一标识符吗?
这个想法的优点和缺点是什么?
- (-) 用户可以禁用推送通知
- (+) 唯一编号
- (+) 在所有 iOS 中都支持
问题:不推荐使用 UDID - 我们不能再使用它了。网上有一些解决方案:生成GUID并存放在“安全的地方”、iCloud、iOS6开始的IdentifierForVendor、OpenUID、SecuredID等等……
请求:我需要设备的唯一标识符才能在我们的服务器上存储用户数据。
问题:我可以使用推送通知的 deviceToken 作为唯一标识符吗?
这个想法的优点和缺点是什么?
这是一个糟糕的想法,如果用户更改设备或出于其他未知原因,令牌可能会更改。
最重要的是:您识别的是设备而不是用户!
一种解决方案是生成一个 UUID 并将其保存在您检索它的用户钥匙串中。但是,如果用户清除设备,也可以将其删除。
您最好的选择是允许用户使用可以创建的帐户登录。然后你可以将它与钥匙串中的 UUID 结合起来。
你应该使用identifierForVendor
. 推送通知是唯一的deviceToken
,但可以更改。
The token can change if the user reset the device, for unique device identifying you can use the following code
float currentVersion = 6.0;
NSString *udid = nil;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion)
{
//below code is taken from the Apple Sample code, to check you can download the files
https://developer.apple.com/library/ios/releasenotes/StoreKit/IAP_ReceiptValidation
// OR
http://developer.apple.com/library/ios/releasenotes/StoreKit/IAP_ReceiptValidation/VerificationController.zip (line number 319)
udid = [UIDevice currentDevice].identifierForVendor.UUIDString;
}
else
{
//may cause apple rejection
udid = [UIDevice currentDevice].uniqueIdentifier;
//i think we can use the below link for ios5 or below but not sure it may accept or reject
https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5
}
//just saw a link which may help you better and have a look at image
http://www.doubleencore.com/2013/04/unique-identifiers/
有人可以建议即使在重新安装应用程序、删除应用程序或系统重新启动或系统启动或恢复出厂设置后也能保留唯一 ID 的最佳方法