如何在设备上卸载ios app后保留ios中的identifierForVendor?

Har*_*han 66 uuid identifier uniqueidentifier ios

我正在开发一个iOS应用程序,它调用web服务进行登录,然后我将登录凭据与供应商标识符(identifierForVendor)一起发送到Web服务器,以便为这些凭证唯一地标识设备.因此用户只能拥有一个设备和一个凭证.

我有了identifierForVendor

NSString *uuid = [[UIDevice currentDevice] identifierForVendor].UUIDString
Run Code Online (Sandbox Code Playgroud)

然后该标识符将存储在Web服务器的数据库中以及设备数据库中.当用户打开应用程序并尝试从Web服务器下载数据时,用户设备上的本地identifierForVendor将与存储在Web服务器上的标识符进行比较.

用户卸载应用程序并重新安装时出现问题,我发现identifierForVendor已更改.因此用户无法继续前进.

我阅读了苹果文档UIDevice Documentation

如前所述,如果来自同一供应商的所有应用程序都从设备卸载,则在从该供应商新安装任何应用程序时将采用新的identifierForVendor.

那么在我的案例中如何处理这个问题呢?

ner*_*lfe 63

您可以将其保存在KeyChain中

-(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;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果启用了iCloud KeyChain同步,这是否可行? (10认同)
  • 由于上面提到的同步问题,我只是要投票. (7认同)
  • 当KeyChain同步时,这将不起作用,所有同步设备将获得相同的verdor id. (6认同)

Wai*_*ain 19

一般来说,不要使用identifierForVendor.相反,用于NSUUID生成自定义UUID并将其存储在钥匙串中(因为如果删除并重新安装应用程序,则不会删除钥匙串).

  • "由NSUUID创建的UUID符合RFC 4122第4版,并使用随机字节创建." - 但是,重复的可能性非常小,正如其他人发布的那样"只有在未来100年内每秒产生10亿UUID之后,创造一个重复的概率大约为50%." - http://stackoverflow.com/a/1155027/859027 (4认同)

gri*_*a13 9

除了@ nerowolfe的回答.

SSKeychain使用kSecAttrSynchronizableAny作为缺省同步模式.您可能不希望identifierForVendor在多个设备上同步,因此这里是一个代码:

// save identifierForVendor in keychain without sync
NSError *error = nil;
SSKeychainQuery *query = [[SSKeychainQuery alloc] init];
query.service = @"your_service";
query.account = @"your_account";
query.password = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
query.synchronizationMode = SSKeychainQuerySynchronizationModeNo;
[query save:&error];
Run Code Online (Sandbox Code Playgroud)


iph*_*nic 5

您可以尝试使用KeyChain保存您的VendorIdentifier,即使您卸载了应用程序,它也将一直存在,直到您的设备重置为止.


归档时间:

查看次数:

49353 次

最近记录:

8 年,11 月 前