ios上取得设备唯一标志的解决方案

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

iOS 7中苹果再一次无情的封杀mac地址,现在已经不能获取ios7设备的物理地址。那么在开发中如何才能标识设备的唯一性呢?apple公司提供的方法是通过keychain来存一些标志信息,然后通过存的标志信息来让应用程序来识别该设备的唯一性。

apple公司写了一个简单的操作keychain的工具类:https://developer.apple.com/library/ios/samplecode/GenericKeychain/Listings/Classes_KeychainItemWrapper_m.html可以下载,把KeychainItemWrapper.h,.m文件引用xcode中,keychainItemWrapper.m文件可能出错,这里是由于arc编译造成的,我们可以根据提示进行解决,也可以用如下图的方式解决:

接着设置keychain共享:如图所示

此我们可以在项目中看到xxxxx.entitlements结尾的文件。<?xmlversion="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PRopertyList-1.0.dtd">

<plist version="1.0">

<string>$(AppIdentifierPrefix)h.HelloWorld</string>

</plist>

其中的${AppldentifierPrefix}是开发者账户的的前缀,是apple的公司提供的,https://developer.apple.com/membercenter/index.action,可以用自已的账户进行查看。

存取:key chain:

java代码

-(void) setKeyChainValue { KeychainItemWrapper *keyChainItem=[[KeychainItemWrapper alloc]initWithIdentifier:@"TestUUID" accessGroup:@"XXXXXX.h.HelloWorld"]; NSString *strUUID = [keyChainItem objectForKey:(id)kSecValueData]; if (strUUID==nil||[strUUID isEqualToString:@""]) { [keyChainItem setObject:[self gen_uuid] forKey:(id)kSecValueData]; } [keyChainItem release]; } -(NSString *) gen_uuid { CFUUIDRef uuid_ref=CFUUIDCreate(nil); CFStringRef uuid_string_ref=CFUUIDCreateString(nil, uuid_ref); CFRelease(uuid_ref); NSString *uuid=[NSString stringWithString:uuid_string_ref]; CFRelease(uuid_string_ref); return uuid; }

应用程序第一次在某台设备上运行时,我们的应用程序保存一个uuid,来标识该设备。等设备把程序删除时,该uuid依然存在于设备中。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航