为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

iOS
长风秋雁 2019-08-01 15:39:08
如何在设备上卸载ios app后保留ios中的identifierForVendor?我正在开发一个iOS应用程序,它调用web服务进行登录,然后我将登录凭据与供应商标识符(identifierForVendor)一起发送到Web服务器,以便为这些凭证唯一地标识设备。因此用户只能拥有一个设备和一个凭证。我有了identifierForVendorNSString *uuid = [[UIDevice currentDevice] identifierForVendor].UUIDString然后该标识符将存储在Web服务器的数据库中以及设备数据库中。当用户打开应用程序并尝试从Web服务器下载数据时,用户设备上的本地identifierForVendor将与存储在Web服务器上的标识符进行比较。用户卸载应用程序并重新安装时出现问题,我发现identifierForVendor已更改。因此用户无法继续前进。我阅读了苹果文档UIDevice Documentation如前所述,如果来自同一供应商的所有应用程序都从设备卸载,则在从该供应商新安装任何应用程序时将采用新的identifierForVendor。那么在我的案例中如何处理这个问题呢?
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

您可以将其保存在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;}


查看完整回答
反对 回复 2019-08-01
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-08-01
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

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];


查看完整回答
反对 回复 2019-08-01
  • 3 回答
  • 0 关注
  • 1471 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信