ios上取得设备唯一标志的解决方案
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结尾的文件。<?xml version="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:
- -(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;
- }
-(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依然存在于设备中。
- keychainItemWrap.zip (6.5 KB)
ios上取得设备唯一标志的解决方案的更多相关文章
- 【转帖】ios上取得设备唯一标志的解决方案
原文地址:http://lqzit.iteye.com/blog/2070306 注意:keychina设置完之后,项目目录里的“项目名.entitlements”文件不是手动创建出的,而是在按照如下 ...
- 【转】 android获取设备唯一标识完美解决方案
<p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; color: rgb(51, 51, 51); ...
- iOS开发高级分享 - iOS上的设备标识符和指纹
苹果认可的标识符 Apple提供了各种API,以方便用户识别各种用途: 通用标识符(UDID) 在iOS的早期,苹果公司提供了一个uniqueIdentifier财产上UIDevice-亲切地称为ud ...
- android 获取设备唯一标识完美解决方案
/** * deviceID的组成为:渠道标志+识别符来源标志+hash后的终端识别符 * * 渠道标志为: * 1,andriod(a) * * 识别符来源标志: * 1, wifi mac地址(w ...
- 稳定获取Android设备唯一码(UUID)的解决方案
最近做的一个项目中需要用到Android设备唯一码(UUID)来标识一台设备, Android中设备唯一码有很多,如:MAC地址.IMEI号(DeviceId).IMSI号.ANDROID_ID.序列 ...
- iOS 获取设备唯一标示符的方法
在开发中会遇到应用需要记录设备标示,即使应用卸载后再安装也可重新识别的情况,在这写一种实现方式--读取设备的UUID(Universally Unique Identifier)并通过KeyChain ...
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?
一.UDID (Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和 ...
- iOS获取设备唯一标识的8种方法
8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...
- ios开发——实用技术篇OC篇&获取设备唯一标识
获取设备唯一标识 WWDC 2013已经闭幕,IOS7 Beta随即发布,界面之难看无以言表...,简直就是山寨Android. 更让IOS程序猿悲催的是,设备唯一标识的MAC Address在IOS ...
随机推荐
- Node.js学习笔记(1)
Node是用c++语言开发,能运行javascript语言的环境. 使用的时候格式为node helloworld.js,helloword.js为服务器端或者系统级端的javascript代码. N ...
- HDU 1069 Monkey and Banana (DP)
Monkey and Banana Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- 使用JDBC-ODBC读取Excel文件
以下代码我没有真正去实践,紧做为总结,方便以后查阅: 这种方法需要设置ODBC源..... 参考: http://xytang.blogspot.com/2008/02/how-to-connect- ...
- 【Dijkstra】
[摘自]:华山大师兄,推荐他的过程动画~ myth_HG 定义 Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩 ...
- Oracle数据库作业-4 查询
9. 查询"95031"班的学生人数.
- 实例介绍Cocos2d-x精灵菜单和图片菜单
精灵菜单类是MenuItemSprite,图片菜单类是MenuItemImage.由于MenuItemImage继承于MenuItemSprite,所以图片菜单也属于精灵菜单.为什么叫精灵菜单呢?那是 ...
- C 【block类型全方位详解】
------------------------------------------- block变量的概念 #import <Foundation/Foundation.h> int m ...
- 20141109--SQL 练习题-1
create database xinxiku go use xinxiku go create table Student ( Sno ) primary key, Sname ) not null ...
- linux工程管理工具make入门
一.make工具的功能 1.主要负责一个软件工程中多个源代码的自动编译工作 2.还能进行环境检测.后期处理等工作: 3.make工具可以识别出工程中哪些文件已经被修改,并且在再次编译的时候只编译这些文 ...
- js实现移动端无限加载分页
原理:当滚动条到达底部时,执行下一页内容. 判断条件需要理解三个概念: 1.scrollHeight 真实内容的高度 2.clientHeight 视窗的高度,即在浏览器中所能看到的内容的 ...