最近在做一个项目,项目中没有注册登录,而是使用一个唯一id来表明用户。这个唯一id我们目前基本上都是用idfv。那么,问题来了,如何让用户卸载app再次安装应用的时候还能是同一个账户。
首先先介绍下idfv:
idfv(identifierForVendor)是CFBundleIdentifier(反转DNS格式)的前两部分。比如某个应用的bundle id 是com.companyName.appname,那么idfv就是com.companyName。来自同一个运营商的应用运行在同一个设备上,此属性的值是相同的;不同的运营商应用运行在同一个设备上值不同,或者同一个运营商的应用运行在不同的设备上值不同。
经测试,只要设备上有一个tencent的app,重新安装后的identifierForVendor值不变,如果tencent的app全部删除,重新安装后的identifierForVendor值改变。
肯定不能将idfv存入NSUserDefaults,因为一旦应用被卸载,那么数据将不复存在,idfv有可能就会改变。keychain不会这样。那么介绍下keychain:
- (NSString *)getIdfv
{
NSString *str;
KeychainItemWrapper *keychainItem = [[KeychainItemWrapperalloc] initWithIdentifier:@"UUID"accessGroup:nil];
MYLog(@"%@",[keychainItem objectForKey:(__bridgeid)kSecValueData]);
NSString *uuidStr = [keychainItemobjectForKey:(__bridgeid)kSecValueData];
MYLog(@"%@",[[UIDevice currentDevice] identifierForVendor]);
if ([uuidStrisKindOfClass:[NSDictionaryclass]]) { //代表里面还没有存值
NSString *myUUIDStr = [[[UIDevicecurrentDevice] identifierForVendor]UUIDString];
[keychainItem setObject:myUUIDStrforKey:(__bridgeid)kSecValueData];
str = myUUIDStr;
}
else{
str = [keychainItem objectForKey:(__bridgeid)kSecValueData];
}
MYLog(@"======%@",str);
return str;
}
这是我对keychain保存idfv的一个总结,如果有错误,欢迎指正。共同进步,共同提高。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/oik_ios/article/details/47379441