在iOS版本10.2的相同设备上获取不同的UUID
问题描述:
我正在使用以下代码获取UUID。在iOS版本10.2的相同设备上获取不同的UUID
-(NSString *)updateUserPhoneDetails{
NSString *retrieveuuid = [SSKeychain passwordForService:@"com.testUser" account:@"testUser"];
NSString *uniqueID;
if (retrieveuuid == nil) {
NSString *uuid = [[NSUUID UUID] UUIDString];
uniqueID=[uuid stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSLog(@"Create new uuid : %@",uniqueID);
//Store the password in Keychain
NSError *error = nil;
[SSKeychain setPassword:uuid forService:@"com.testUser" account:@"testUser" error:&error];
}else{
uniqueID=[retrieveuuid stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSLog(@"uniqueID : %@",uniqueID);
}
return uniqueID;
}
上述代码在iOS 10.0之前工作正常。 我已经测试iPhone 7,iPhone 5s,但获得一些时间不同的UUID。 我认为每当我重新安装相同的应用程序时,它应该是相同的。 请帮帮我。
答
我想你应该试试这个,
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
+1
为什么?将标识符保存到钥匙串功能更强大。此外,这不能回答这个问题。 – Sulthan
答
你需要深入为什么您到passwordForService:
调用返回nil
(它清楚地给出你的症状)。如果SSKeychain
没有提供错误,则需要将代码或断点放在代码中以查看实际的错误代码。
如果没有找到,那么你需要确保你已经成功写入(你没有检查setPassword:...
中的错误)。如果它成功编写,但下次安装时无法阅读,则需要检查是否未更改访问组或签名密钥。如果由于权限的原因不读取(或写入),则需要确保在设备锁定时不会尝试读取/写入(除非您为此设置了正确的权限)。
基本上,检查你的错误,并从那里去。
[[NSUUID UUID] UUIDString];每次调用时都会生成唯一的ID,并且它不是特定于iOS的。 – Arasuvel
为什么要将它保存到钥匙串中?您只需将钥匙串保存一次,然后下一次只需要检索。无需每次更新钥匙串。 – Poles
我没有看到你的代码有什么问题。是否有可能从使用本地钥匙串切换到云钥匙串? – Sulthan