2017-01-30 1 views
2

Я использую ниже код для получения UUID.Получение разного UUID на том же устройстве с версией iOS 10.2

-(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 5, но получаю некоторое время по разному UUID. Я думаю, что он должен быть таким же в каждый момент, когда я переустанавливаю одно приложение. Пожалуйста, помогите мне.

+5

[[NSUUID UUID] UUIDString]; будет генерировать уникальный идентификатор каждый раз, когда это вызвано, и это не относится к iOS. – Arasuvel

+0

Почему это важно, если вы сохраняете его в брелок? Вы просто сохраняете в цепочке ключей один раз и в следующий раз, когда вам нужно только восстановить. Нет необходимости обновлять цепочку ключей каждый раз. – Poles

+0

Я не вижу ничего плохого в вашем коде. Возможно ли, что кто-то переключился с использования локальной брелка на облачный брелок? – Sulthan

ответ

0

Я думаю, вы должны попробовать это,

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

Почему? Сохранение идентификатора для брелка более мощное. Кроме того, это не отвечает на вопрос. – Sulthan

0

Вам нужно копаться в почему ваш вызов passwordForService: возвращается nil (который ясно дается ваш симптом). Если SSKeychain не содержит ошибки, вам нужно будет поместить в код записи или точки останова, чтобы увидеть фактический код ошибки.

Если он не найден, вам необходимо убедиться, что вы успешно пишете (вы не проверяете ошибку в setPassword:...). Если он успешно пишет, но вы не можете прочитать следующий раз при установке, вам нужно проверить, что вы не меняете свою группу доступа или ключ подписи. Если он не читает (или пишет) из-за разрешений, вам нужно убедиться, что вы не пытаетесь читать/писать, пока устройство заблокировано (если вы не установили для этого права правильно).

В принципе, проверьте свои ошибки и оттуда.