2017-01-30 32 views
2

我正在使用以下代码获取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。 我认为每当我重新安装相同的应用程序时,它应该是相同的。 请帮帮我。

+5

[[NSUUID UUID] UUIDString];每次调用时都会生成唯一的ID,并且它不是特定于iOS的。 – Arasuvel

+0

为什么要将它保存到钥匙串中?您只需将钥匙串保存一次,然后下一次只需要检索。无需每次更新钥匙串。 – Poles

+0

我没有看到你的代码有什么问题。是否有可能从使用本地钥匙串切换到云钥匙串? – Sulthan

回答

0

我想你应该试试这个,

NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
+1

为什么?将标识符保存到钥匙串功能更强大。此外,这不能回答这个问题。 – Sulthan

0

你需要深入为什么您到passwordForService:调用返回nil(它清楚地给出你的症状)。如果SSKeychain没有提供错误,则需要将代码或断点放在代码中以查看实际的错误代码。

如果没有找到,那么你需要确保你已经成功写入(你没有检查setPassword:...中的错误)。如果它成功编写,但下次安装时无法阅读,则需要检查是否未更改访问组或签名密钥。如果由于权限的原因不读取(或写入),则需要确保在设备锁定时不会尝试读取/写入(除非您为此设置了正确的权限)。

基本上,检查你的错误,并从那里去。

相关问题