当app或者另外来源于同一开发商的app被安装到同一设备上,这个UUIDString会保持一致。当用户删除掉设备上所有同一开发商的app后,重新安装其中某一个app,这时候所获取到的UUIDString就会发生变化。因此,不管app存储将这个UUID存储到哪里,你都应该手动处理这种改变。
解决方案就是能所生成的UUIDString存储到KeyChain中,使用同一个access group、同一个identifier。每次获取UUID,都先从KeyChain中获取,若为空,则通过UIDevice获取UUIDString并存储到KeyChaing,代码版本如下:
-
(NSString *)UUID {
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"DujianchaoAppID" accessGroup:@"com.dujianchao.test.group"];
NSString *UUID = [wrapper objectForKey:(__bridge id)kSecValueData];if (UUID.length == 0) {
UUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
[wrapper setObject:UUID forKey:(__bridge id)kSecValueData];
}return UUID;
}