2

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

我发现了一些,包括

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

或从中获取设备令牌

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{ ... }

但问题是

  1. 每次关闭并重新启动应用程序时,UUID 都会更改(我从调试中体验过)
  2. 每次我删除并重新安装应用程序(或更新应用程序)时,identiferForVendor 都会发生变化
  3. 我使用设备令牌在版本更新、重新安装时唯一标识设备,但我了解到它可以更改,并且我在 xCode 中的更新和调试中体验到了它。

由于应用商店拒绝使用 uniqueIdentifer,我的问题是:有什么方法可以在任何应用程序更新、删除、重新安装中唯一地识别设备?

4

4 回答 4

2

使用 SSkeychain 永久存储唯一密钥。将此 github 示例中的 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;
}

删除并重新安装应用程序后,此标识符不会更改。我已经使用了它,它对我来说非常完美。

于 2014-07-21T08:28:10.163 回答
1

关于这个有一个很棒的帖子。

http://www.doubleencore.com/2013/04/unique-identifiers/

于 2014-07-21T08:32:39.370 回答
1

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

通过这样做,它将在应用程序删除/重新安装后继续存在,并且如果用户启用了iCloud 钥匙串,它也应该在设备恢复后继续存在。

为了使事情变得更容易,您可以在许多可用的开源代码中使用一个钥匙串包装器(一个在这里)。

于 2014-07-21T08:23:31.117 回答
0

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

于 2014-07-21T08:25:06.643 回答