2017-01-30 27 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:...中的錯誤)。如果它成功編寫,但下次安裝時無法閱讀,則需要檢查是否未更改訪問組或簽名密鑰。如果由於權限的原因不讀取(或寫入),則需要確保在設備鎖定時不會嘗試讀取/寫入(除非您爲此設置了正確的權限)。

基本上,檢查你的錯誤,並從那裏去。

相關問題