4

在弃用 uniqueIdentifier 之前,最好使用相同的标识符,甚至删除应用程序甚至擦除 iPhone。之后,我使用 MAC 地址,这在 iOS 7 之前也可以使用,但在 iOS 7 中,它给出了 2c:00:00:00:00:00。所以我没有办法获得唯一标识符。If is use IdentifierForVender: 如果我删除同一供应商的所有应用程序,它会给出不同的标识符。

MAC 地址:它工作正常,但不适用于 iOS 7。

唯一标识符:已弃用。

请告诉我如何获得独特价值,甚至删除应用程序甚至擦除 iPhone(如恢复出厂设置)

4

5 回答 5

4

编辑 3

将 UUID 存储在钥匙串中似乎是下一个通用解决方案。可能会解决 iOS7 的问题。


编辑 2

注意:iOS 7 中的此解决方案不再有用,因为 iOS7 中不再提供 uniqueIdentifier。


此处解释了所有可能性和不同的 ID 维护。

在此处输入图像描述

有关更多详细信息,请访问此链接


编辑 1

这是较旧的方法,但如果即使系统重置,您也需要保留 ID。那你应该看看这个。这可能会对您有所帮助。

我希望你在这个受欢迎的链接上看到

1)MAC+CFBundleIdentifier的MD5

[[UIDevice currentDevice] uniqueDeviceIdentifier]

每个应用程序都将保持相同,但每个应用程序都不同。如果您删除并重新安装您的应用程序,每个应用程序将是相同的。如果您重置系统,每个应用程序都将相同。

2) MAC的MD5

[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier]

对于来自同一设备的所有应用程序,这将保持不变。如果您删除并重新安装您的应用程序,则每台设备都是相同的。如果您重置系统,每个设备将是相同的。

于 2013-11-15T07:32:31.667 回答
2

实现这一点的唯一方法几乎是自己生成一个随机 ID(例如 UUID)并将其存储在 iOS 钥匙串中。

卸载应用程序时不会清除钥匙串,因此您应该仍然能够在重新安装后读回该值。

其他更直接的持久 ID 机制已被 Apple 阻止或禁止。

于 2013-11-15T07:40:25.547 回答
2

擦除 iOS 删除所有唯一 ID 的事实完全是故意的。Apple 故意使获取持续此类事件的唯一 ID 变得困难。这是为了用户隐私

Apple 不在乎您的应用程序是否可以跟踪其用户。苹果关心它的用户是否满意。Apple 的用户表达了对隐私设置、应用程序可以看到和跟踪的内容等更多控制权的愿望。因此,Apple 使所有形式的唯一 ID 都难以获取和保留,这正是这个原因。

Apple 提供了可以为广告/统计/分析跟踪生成 UUID 的 API(在此问题的其他答案中描述)。使用这些 ID,因为这就是它们的用途。MAC 地址从未用于唯一标识用户。

您想跟踪用户。UDID 和 MAC 地址跟踪设备,而不是用户。设备可能被出售、赠送、丢失或被盗。如果您继续使用同一个 ID,那么您并不总是跟踪同一个用户。如果用户买了一部新手机怎么办?你不想要一个 ID 跟随他们到新设备吗?还是您不在乎 ID 没有持久化的情况?

此外,有些用户不希望被跟踪。这是你考虑过的吗?您是否为用户提供选择退出的方式?如果您开始跟踪用户,并且您使用的 ID 会持续重新安装应用程序、持续重新安装操作系统并且用户无法选择退出,那么他们如何让您停止跟踪他们?

最重要的是,您真的不应该担心尝试获得即使在重新安装操作系统后仍然存在的 ID。

要正确跟踪用户,您应该让他们创建一个用户帐户

于 2013-11-15T10:08:00.353 回答
1

您可以为此使用 identifierForVendor,因为 identifierForVendor 在应用程序从设备中删除之前是唯一的。当应用程序再次安装到设备中时,identifierForVendor 将发生变化。

为了唯一性,您可以将 identifierForVendor 保存到设备钥匙串中,下次当应用程序安装到设备中时,检查 identifierForVendor 是否已保存到设备钥匙串中。

如果“是”,则使用保存的 identifierForVendor,否则将新的 identifierForVendor 保存到设备钥匙串中以供进一步使用。

-(void)checkAndSetDefaultKeychainsOfAppAndSetSecurityStatus
{
 KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] init];
 if (![wrapper searchKeychainCopyMatching:@"DeviceId"]) {
    [wrapper createKeychainValue:[UIDevice currentDevice].identifierForVendor.UUIDString forIdentifier:@"DeviceId"];
}
 self.strDeviceid = [wrapper getDataFromKeychainMatching:@"DeviceId"];
 NSLog(@"%@",self.strDeviceid);
 [包装释放];
}

-(NSString *)stringforDeviceId
{
 KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] init];
 if (![wrapper searchKeychainCopyMatching:@"
    [包装器 createKeychainValue:[UIDevice currentDevice].identifierForVendor.UUIDString forIdentifier:@"DeviceId"];
 }
 return [wrapper getDataFromKeychainMatching:@"DeviceId"];
}

如果您有任何疑问,请告诉我。我会更乐意清除。

于 2014-02-18T05:57:15.040 回答
-2

我找到了答案。我想要一个唯一的 ID,无论删除或擦除 iPhone,它都是相同的。我使用设备的序列号,所以我可以一直获得唯一的价值。

有一个UIDevice类别。

于 2013-11-19T13:44:15.800 回答