iOS 7中的UniqueIdentifier

4

在uniqueIdentifier被弃用之前,即使删除应用程序甚至擦除iPhone,使用相同的标识符也是好的。之后,我使用MAC地址,在iOS 7之前也可以正常工作,但是在iOS 7中它会给出2c:00:00:00:00:00。因此,我找不到任何方法来获取唯一标识符。

标识符ForVender:如果我删除了同一供应商的所有应用程序,则会给出不同的标识符。

MAC地址:在iOS 7上无法正常工作。

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


尝试使用 iAdIdentifier... - prabu
你已经列出了所有的可能性,而且不可能拥有一个在所有这些情况下都持续存在的自动生成的标识符。但是,真正让我困扰的是擦除设备—也许你应该重新考虑是否绝对需要这个标识符,因为用户明显不想要它! - ttarik
@user2906829 advertisingIdentifier不会像那样持久存在,用户也可以从设置应用程序中手动重置它。 - ttarik
@ev0lution 是的,这是必要的。MAC地址解决了我的问题,但iOS 7又出现了问题,它给出了与我写的相同的结果。请建议任何技巧。 - user100
@ev0lution 是的,我看到了。有没有办法在 iPhone 上存储值,即使擦除 iPhone 也会保持不变? - user100
显示剩余3条评论
5个回答

4

编辑 3

在钥匙串中存储UUID似乎是解决这个问题的通用解决方案。这里 可以解决iOS7的问题。


编辑 2

注意:此iOS 7解决方案不再有用,因为uniqueIdentifier在iOS 7中不再可用。


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

enter image description here

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


编辑 1

这是旧方法,但如果您需要系统重置后保留ID,则应查看此内容。这可能会帮助您。

我想让您查看这个受欢迎的链接

1)MAC + CFBundleIdentifier的MD5

[[UIDevice currentDevice] uniqueDeviceIdentifier]

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

2) MAC地址的MD5值

[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier]

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


很好,但他问的是iOS7,这张图中没有。 - Antzi
1
我相信这是有价值的信息。该图表显示只有UDID在所有情况下都存在,而且OP已经知道在iOS 7上没有这个选项。 - ttarik
但是iOS 7上的UDID会在iOS 7上唯一吗?如果是,请告诉我如何获取它。 - user100
@βḧäṙℊặṿῗ 我知道,但是存在一个问题,他们使用钥匙串来存储唯一标识符,但是当我擦除iPhone时,钥匙串会丢失唯一标识符。 - user100
@user2906829 是的。试一试吧 :) - βhargavḯ
显示剩余2条评论

2

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

当应用程序被卸载时,钥匙串不会被清除,因此您仍然可以在重新安装后读取该值。

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


但是,当擦除 iPhone 钥匙串时,丢失了该密钥。所以请建议一些解决方案。谢谢回复。 - user100
@user2906829 没有任何方法可以做到这一点。苹果故意阻止了所有在擦除手机后仍能存活的机制。 - grahamparks
当您使用不同的配置文件更新应用程序时,此解决方案会失败。例如从通配符更改为其他配置文件。 - B.S.

2
删除iOS会移除所有唯一标识符这一事实是完全有意的。苹果故意使得获取在此类事件中持续存在的唯一标识符变得困难,以保护用户隐私。
苹果并不关心你的应用程序是否可以跟踪其用户。苹果关心的是其用户的满意度。苹果的用户表达了对隐私设置、应用程序可见性和跟踪等方面更多控制的愿望。因此,苹果使得所有形式的唯一标识符都难以获取和持续存在,正是出于这个原因。
苹果提供了API来生成UUID用于广告/统计/分析跟踪(在本问题的其他答案中有描述)。使用这些ID,因为这就是它们的预期用途。MAC地址从未被用来唯一标识用户。
你想要跟踪一个用户。UDID和MAC地址跟踪设备,而不是用户。设备可以被出售、赠送、丢失或被盗。如果您继续使用相同的ID,则不能始终跟踪同一用户。如果用户购买了新手机怎么办?您不希望有一个ID跟随他们到新设备吗?或者这种情况下,您不在意ID是否持续存在?
此外,有些用户不想被跟踪。你考虑过这个问题吗?你是否提供了让用户选择退出的方式?如果您开始跟踪一个用户,并且使用一个持续应用程序重新安装、持续操作系统重新安装的ID,而用户没有任何退出的方法,那么他们如何让您停止跟踪他们?
底线是,你真的不应该担心尝试获取一个即使在操作系统重新安装之后仍然持续存在的ID。
要正确跟踪一个用户,你应该让他们创建一个用户帐户。

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); [wrapper release]; }
-(NSString *)stringforDeviceId{ KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] init]; if (![wrapper searchKeychainCopyMatching:@"DeviceId"]) { [wrapper createKeychainValue:[UIDevice currentDevice].identifierForVendor.UUIDString forIdentifier:@"DeviceId"]; } return [wrapper getDataFromKeychainMatching:@"DeviceId"]; }
请让我知道您是否有任何疑问。我将非常乐意解答。

-2

我找到了答案。我想要一个唯一的ID,无论是删除还是擦除iPhone,它都将保持相同。我使用设备的序列号,因此我可以始终获得唯一值。

有一个UIDevice类别。


但使用序列号往往会导致应用商店拒绝? - Yas
我非常确定在苹果iOS商店中使用序列号将意味着被拒绝。我不想要一个可以获取序列号的应用程序安装在我的手机上。 - Robert J. Clegg
首先,获取序列号是通过越狱设备可用的私有API实现的。而且苹果将拒绝使用私有API获取序列号的应用程序。 - βhargavḯ
那么你现在建议我做什么,请帮帮我。 - user100
我还没有将我的应用上传到应用商店,它仍处于开发阶段。该怎么办? - user100

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接