【问题标题】:How can I uniquely identify iPhone/iPad?如何唯一识别 iPhone/iPad?
【发布时间】:2014-09-11 16:29:59
【问题描述】:

我正在尝试唯一标识 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,我的问题是: 有什么方法可以在任何应用程序更新、删除、重新安装时唯一识别设备?

【问题讨论】:

标签: ios objective-c uuid uniqueidentifier devicetoken


【解决方案1】:

使用 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;
}

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

【讨论】:

  • 实际上,删除并安装应用程序后标识符会发生变化,但是当您保存旧的 UUID 时,您会检索它并因此得到解决方案。第一次阅读“删除并重新安装应用程序后,此标识符不会改变。”让我困惑
  • 在给定的代码中,它将数据保存在设备的钥匙串中,该钥匙串将一直存储到格式化为止,因此您可以通过正确的组合键取回该数据。
  • 实际上 KeyChain 也不是保留数据的可取解决方案,请记住 iOS 10.3 测试版会导致在 App 卸载时从 KeyChain 中清除数据。 DeviceCheck 是一个有趣的选项。
  • 嘿@max,这个解决方案是否仍然适用于 iPhone 并且可以通过 react native 实现?我从来没有为 iPhone 开发过,只为 android 开发过。
【解决方案2】:

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

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

为了让事情变得更简单,您可以在许多可用的开源 (one is here) 中使用钥匙串包装器。

【讨论】:

  • 但它无法在手机恢复后继续存在。
  • 如果用户启用了 iCloud 钥匙串,它会。但一般来说你是对的。但是,从哲学的角度来看,我想知道还原后的设备是否是同一设备... :-)
  • @sergio:感谢您的回答。但是你能告诉我更多细节吗?
【解决方案3】:

【讨论】:

    【解决方案4】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    相关资源
    最近更新 更多