我怎样才能唯一识别iPhone / iPad?

时间:2014-07-21 08:19:03

标签: ios objective-c uuid uniqueidentifier devicetoken

我正在尝试唯一识别iPhone / iPad移动设备以保存用户数据。

我发现了一些,包括

[NSString *UUID = [[NSUUID UUID] UUIDString];
[UIDevice currentDevice].identifierForVendor.UUIDString;

或从

获取设备令牌
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{ ... }

但问题在于

    每次关闭并重新启动应用程序时,
  1. UUID都会更改(我经历过 来自调试)
  2. identiferForVendor每次删除并重新安装应用程序时都会更改 (或更新应用程序)
  3. 我使用设备令牌来跨版本唯一地识别设备 更新,重新安装,但我了解到它可以改变,我是 通过我在xCode中的更新和调试来体验它。
  4. 由于app store拒绝使用uniqueIdentifer,我的问题是: 有什么方法可以在任何应用程序更新,删除,重新安装中唯一地识别设备吗?

4 个答案:

答案 0 :(得分:2)

使用SSkeychain永久存储唯一密钥。将来自this github example的sskeychain文件夹中的4个文件带入您的项目

然后使用此代码获取唯一标识符。

-(NSString *)getUniqueDeviceIdentifierAsString
{

    NSString *appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];

    NSString *strApplicationUUID = [SSKeychain passwordForService:appName account:@"incoding"];
    if (strApplicationUUID == nil)
    {
        strApplicationUUID  = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
        [SSKeychain setPassword:strApplicationUUID forService:appName account:@"incoding"];
    }


    return strApplicationUUID;
}

删除并重新安装应用后,此标识符不会更改。我已经使用过它,它对我来说非常适合。

答案 1 :(得分:1)

我能想到的最接近的事情是生成你自己的UUID并将其存储在device keychain中。

通过这样做,它将在应用程序删除/重新安装后继续存在,如果用户启用了iCloud Keychain,它还应该能够在设备恢复后继续使用。

为了简化操作,您可以在许多可用的开源(one is here)中使用钥匙串包装。

答案 2 :(得分:1)

答案 3 :(得分:0)

一种创造性的方法可能是(ab)使用wifi端口的MAC address