在iOS 10.2版本的同一设备上获取不同的UUID

时间:2017-01-30 13:23:19

标签: ios objective-c iphone xcode

我使用下面的代码来获取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。 我认为每次重新安装相同的应用程序时都应该是相同的。 请帮帮我。

2 个答案:

答案 0 :(得分:0)

我认为你应该试试这个,

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

答案 1 :(得分:0)

您需要深入研究为什么您对passwordForService:的回复nil(显然是您的症状)。如果SSKeychain未提供错误,则需要在代码中放置日志记录或断点以查看实际的错误代码。

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

基本上,检查你的错误,然后从那里开始。