Như bạn đã biết, Apple gần đây đã ngừng sử dụng UDID. Vì vậy, giải pháp của tôi để này làVấn đề với việc xây dựng doanh nghiệp và sử dụng UUID
- Tạo CFUUID
- Lưu nó vào móc chìa khóa
- Tái truy cập mục keychain có sau.
Điều này đã hoạt động tốt. Nhưng, vì một lý do nào đó chúng tôi mới thấy rằng với việc cài đặt một doanh nghiệp xây dựng, chúng tôi đang nhận được một UUID khác nhau (Được cho là được lưu trữ trên keychain với khóa truy cập duy nhất của chúng tôi).
Có ai gặp phải tình huống như vậy không? Đây là đoạn mã để tạo ra các UUID và lưu trữ nó vào keychain ..
+ (NSString *)registerUUIDWithKeyChain
{
CFUUIDRef udid = CFUUIDCreate(NULL);
NSString *uuidString = (NSString *) CFUUIDCreateString(NULL, udid);
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"UniqueApp" accessGroup:nil];
NSString *userName = @"UniqueAppName";
NSString *password = uuidString;
[keychainItem setObject:userName forKey:(id)kSecAttrAccount];
[keychainItem setObject:password forKey:(id)kSecValueData];
[keychainItem release];
return uuidString;
}
+ (NSString *)userUUID
{
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"UniqueApp" accessGroup:nil];
//Accesing the v_data was the only way. For some reason there is a runtime issue if we try to access it though "kSecValueData"
NSString *uuid = [keychainItem.keychainItemData objectForKey:@"v_Data"];
//Check if the app is installed for the first time on the device. If YES register the UUID in to the keychain.
//Also check if it is a reinstall by accessing the previous keyChainItem with our Identifier.
if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"firstRun"] intValue] == 0 && !(uuid.length > 0))
{
uuid = [UIDevice_Additions registerUUIDWithKeyChain];
NSLog(@"\n First Time Registered UUID is %@", uuid);
//after stuff done
[[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithInt:1] forKey:@"firstRun"];
[[NSUserDefaults standardUserDefaults] synchronize];
[keychainItem release];
return uuid;
}
[keychainItem release];
return uuid;
}
@end
Không giống như CFUUID, tạo khóa ngẫu nhiên mỗi khi được gọi, địa chỉ MAC có cùng vấn đề xã hội/đạo đức như UUID. Không an toàn khi dựa vào địa chỉ mac có sẵn khi có vẻ như địa chỉ MAC cũng sẽ bị ngắt cùng kiểu với UUID. –
đó là một Doanh nghiệp Xây dựng, và ông muốn giữ UID cùng mọi lúc, địa chỉ MAC sẽ không thay đổi như UUID chúng tôi sử dụng trước đây (Apple không cho phép sử dụng nó) – adali
ok, như là một Doanh nghiệp Xây dựng, bạn chỉ có thể sử dụng UUID, ** [[UIDevice currentDevice] uniqueIdentifier] ** – adali