在64位iOS设备上更改唯一标识符

时间:2014-06-26 07:04:23

标签: ios iphone uniqueidentifier uidevice

审核了很多问题,因为有相同主题的问题但找不到相同的问题,所以发布。

问题

希望为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";
    }
}

3 个答案:

答案 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