我们在iOS上有哪个唯一的设备标识符在安装/删除/重新安装应用程序时不会更改
我想收集安装事件(在新应用程序上)和帐户创建事件(在所有旧应用程序上) 为了确保唯一性并防止欺诈(即每个安装都应对应于一个唯一的设备,如果在同一设备上卸载并重新安装应用程序,则应保持相同的事件),我们可以使用卸载后仍然有效的硬件标识符 在android手机上,IMEI可以用作唯一标识符,但这个解决方案在iOS上不可重复,因为出于隐私原因,苹果不允许访问任何硬件或唯一标识符 我尝试了以下链接中提出的方法:我们在iOS上有哪个唯一的设备标识符在安装/删除/重新安装应用程序时不会更改,ios,swift,uuid,Ios,Swift,Uuid,我想收集安装事件(在新应用程序上)和帐户创建事件(在所有旧应用程序上) 为了确保唯一性并防止欺诈(即每个安装都应对应于一个唯一的设备,如果在同一设备上卸载并重新安装应用程序,则应保持相同的事件),我们可以使用卸载后仍然有效的硬件标识符 在android手机上,IMEI可以用作唯一标识符,但这个解决方案在iOS上不可重复,因为出于隐私原因,苹果不允许访问任何硬件或唯一标识符 我尝试了以下链接中提出的方法: 从链接1和链接3,我尝试了: 让deviceID=UIDevice.current
请问有没有更好的方法让我用swift来处理这个问题。谢谢大家! UUID解除润滑后,无法100%实现这一点,您可以在keychain中存储标识符,但从iOS 10.3开始,当您删除应用程序时,所有相关的keychain项目都将被删除目前没有办法(在iOS 5之前)为了获得静态UDID或任何与设备相关的ID,我也遇到了这个问题,我做了以下工作来实现
- (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;
}
如果您想识别用户的设备,即使用户重新安装了您的应用程序,也可以使用iOS 11中引入的设备检查API 您的服务器可以在apple设备上使用生成的令牌。有关更多详细信息,请参阅以下文档
然后在
钥匙链中保存值。在iOS 11上,您应该使用感谢您的回答,我可以获得此代码的swift版本吗?此代码不会满足您的要求。卸载应用程序时,将清除用户默认设置。在最新版本的iOS(9+或10+,我不记得是哪个)中,钥匙链也被清除了。我正在使用这段代码,它工作得非常好。正如我提到的Keychain或User Default,如果你想在卸载应用程序后保留数据,你可以使用Keychain,它的Keychain引入了iOS8左右,现在有点旧了,现在大多数应用程序的最低版本都支持ios9或10谢谢你展示这个鲜为人知的API。我没有意识到这一点,这是一个非常好的添加。在删除和重新安装应用程序时,这也会得到不同的值。
[[NSUserDefaults standardUserDefaults] setObject:randomNumber forKey:@"randomNum"];
[[NSUserDefaults standardUserDefaults]synchronize];