审核了很多问题,因为有相同主题的问题但找不到相同的问题,所以发布。
问题
希望为Unique Identifier
设备生成iOS
,就像用户安装应用并重新安装生成相同的标识符一样。
已解决但未使用64位设备
我使用此代码获取iOS
设备的唯一标识符并且它工作正常,但是当我在64 bit iOS device
上运行它时,它会在每次安装时给出不同的结果。如果有人知道可能的解决方案,请检查。
- (NSString *)GetUUID {
@try {
UIDevice *device = [UIDevice currentDevice];
return [[device identifierForVendor]UUIDString];
}
@catch (NSException *exception) {
return @"00000-00000-0000-00000";
}
}
答案 0 :(得分:1)
只要设备上安装了来自同一个开发人员(供应商)的应用,identifierForVendor
就会保持不变。
因此,如果用户卸载您的应用并且用户设备上没有其他应用,则当用户重新安装您的应用时,identifierForVendor
会有所不同。
Apple明确表示他们不希望开发人员跟踪设备或按设备安装。因此,您无法再从设备获取任何唯一标识符。
更改identifierForVendor
可能与某些重新安装isseu有关。我一直在跟踪identifierForVendor
并且没有看到这个问题。
答案 1 :(得分:0)
要在重新安装之前存储标识符,您可以使用此代码(将SSKeychain添加到项目中)
/*
The following method determines the AppName and a uniqueidentifier and store it in the keychain
As a result when the user removes the app, downloads it again his JID and password which are derived from the
uniqueidentifier don't change.
otherwide the identifierForVendor method would return a new value on reinstall
*/
-(NSString *)getUniqueDeviceIdentifierAsString
{
NSString *appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
NSString *strApplicationUUID = [SSKeychain passwordForService:appName account:@"incoding"];
if (strApplicationUUID == nil)
{
strApplicationUUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
[SSKeychain setPassword:strApplicationUUID forService:appName account:@"incoding"];
}
return strApplicationUUID;
}
答案 2 :(得分:0)
使用keychain Access解决获取不同供应商ID的问题
简单的iPhone钥匙串访问
http://useyourloaf.com/blog/2010/03/29/simple-iphone-keychain-access.html