在iOS上,我们拥有一个唯一的设备标识符,在应用程序被安装、删除或重新安装时不会改变。

6
我希望能够收集安装事件(在新应用中)和账户创建事件(在所有旧应用中),与此同时确保唯一性并防止欺诈行为(即每个安装应该对应一个唯一的设备,即使在同一设备上卸载并重新安装应用程序后,设备标识符也应该保持不变)。我们可以使用硬件标识符来实现这一目的,以便保持持久性。在Android手机上,IMEI可以用作唯一标识符,但由于隐私原因,苹果没有提供任何硬件或唯一标识符,因此无法在iOS上重复使用此解决方案。我尝试了以下链接中提出的方法:
  1. 链接1

  2. 链接2

  3. 链接3

    我尝试了从链接1和链接3中获取设备ID的方法:

    let deviceID = UIDevice.current.identifierForVendor!.uuidString

但是这并不能提供一个在应用被卸载并重新安装后仍然保持不变的唯一ID。

请问有没有更好的方法来处理这个问题?谢谢!


然后将值保存在“keychain”中。 - TheTiger
https://dev59.com/emEh5IYBdhLWcg3w6HEG - Ken White
1
在iOS 11上,您应该使用DeviceCheck API - Paulw11
3个回答

3

感谢您发现这个鲜为人知的API。我之前并不知道它的存在,而且它是一个非常好的补充。 - Rob Napier
在删除并重新安装应用程序时,这也会始终获取不同的值。 - Nikunj Kumbhani

1

在UUID被废弃之后,没有100%的方法可以完成此操作,您可以将标识符存储在钥匙串中,但从iOS 10.3开始,当您删除应用程序时,所有相关的钥匙串项目都将被删除。


0

目前没有办法(在iOS 5之前是可以的)获取静态UDID或任何设备相关的ID。我也遇到了这个问题,我采取了以下措施来解决。

  1. 创建自己的随机数

    - (NSMutableString*)getSecureGeneratedNumber
    {
        uint8_t randomBytes[16];
        int randomNumber = SecRandomCopyBytes(kSecRandomDefault, 16, randomBytes);
        NSMutableString *uuidStringReplacement;
        if(randomNumber == 0) {
            uuidStringReplacement = [[NSMutableString alloc] initWithCapacity:16*2];
            for(NSInteger index = 0; index < 16; index++)
            {
                [uuidStringReplacement appendFormat: @"%02x", randomBytes[index]];
            }
            NSLog(@"uuidStringReplacement is %@", uuidStringReplacement);
        } else {
            return 0;
            NSLog(@"SecRandomCopyBytes failed for some reason");
        }
        return uuidStringReplacement;
    }
    
  2. 将此随机数保存在用户默认设置或钥匙串中

    [[NSUserDefaults standardUserDefaults] setObject:randomNumber forKey:@"randomNum"];
    [[NSUserDefaults standardUserDefaults]synchronize];
    

谢谢您的回答,能否请给我提供这段代码的Swift版本? - Foutse
这段代码不会实现你所要求的功能。当应用程序被卸载时,用户默认设置将被清除。在最近的iOS版本(9+或10+,我记不清了),钥匙串也会被清除。 - Rob Napier
我正在使用这段代码,它完美地运行着。正如我所提到的Keychain或User Default,如果您想在卸载应用程序后保留数据,可以使用Keychain。Keychain是在iOS8左右引入的,现在已经有点老了,现在大多数应用程序的最低版本支持iOS9或10。 - Aleem

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