2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 获取iOS设备唯一标示

获取iOS设备唯一标示

时间:2019-02-28 19:44:26

相关推荐

获取iOS设备唯一标示

在产品的需求中,很多情况下我们需要获取设备的唯一标示,那么获取设备的唯一标示的方式有哪几种呢,在这里做一下总结;我们通常都说UDID、UUID、IDFA、CFUUID、NSUUID等。

获取设备唯一标示总结:

一、UDID (Unique Device Identifier);

简单介绍:iTunes点击查询序列号。

iOS5 sdk中的获取方法:[UIDevice currentDevice] uniqueIdentifier];在iOS5.0之后删除。

二、UUID (Universally Unique Identifier);

简单介绍:不同应用有不用的UUID,如果用户删除了应用,则UUID会发生改变。

iOS6.0提供的接口,使用方法[[UIDevicecurrentDevice]identifierForVendor];

三、IDFA广告标示符(IDFA-identifierForIdentifier)

简单介绍:

1、添加框架AdSupport.framework

2、添加头文件 #import<AdSupport/ASIdentifierManager.h>

3、使用语句

iOS6.0提供的接口 NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier]UUIDString];

四、CFUUID (目前本公司应用使用的是CFUUID,然后存储到Keychain中)

简单介绍:

从iOS2.0开始,CFUUID就已经出现了,C语言风格。它是CoreFoundatio包的一部分,因此API属于C语言风格。CFUUIDCreate方法用来创建CFUUIDRef,并且可以获得一个相应的NSString,获得的这个CFUUID值系统并没有存储。每次调用CFUUIDCreate,系统都会返回一个新的唯一标示符。如果你希望存储这个标示符,那么需要自己将其存储到NSUserDefaults, Keychain, Pasteboard或其它地方。

注意:如果删除APP重新安装,或者覆盖APP,CFUUID不会改变,但是如果进行刷机、还原、恢复出厂几乎一定会发生改变,后面几种情况没有进行测试。

已经在真机中测试过了代码如下:

//1、从钥匙串中获取NSString *cfuuidStr=[KeyChainManager selectUUID];NSLog(@"从钥匙串中获取的CFUUID=%@",cfuuidStr);//2、创建CFUUIDif (cfuuidStr==nil||[cfuuidStr isEqualToString:@""]) {CFUUIDRef uuidRef=CFUUIDCreate(kCFAllocatorDefault);cfuuidStr=(NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuidRef));[KeyChainManager addUUID:cfuuidStr];NSLog(@"创建CFUUID=%@",cfuuidStr);}

// KeyChainManager.h#import <Foundation/Foundation.h>#import <Security/Security.h>@interface KeyChainManager : NSObject+(NSString *)selectUUID;+(BOOL)addUUID:(NSString *)uuidStr;@end

// KeyChainManager.m#import "KeyChainManager.h"@implementation KeyChainManager+(NSString *)selectUUID{NSMutableDictionary *dictQuery=[[NSMutableDictionary alloc] init];[dictQuery setValue:(id)kSecClassGenericPassword forKey:(id)kSecClass];[dictQuery setValue:@"com.aa.driver" forKey:(id)kSecAttrAccount];[dictQuery setObject:@YES forKey:(__bridge id)kSecReturnData];//返回DataOSStatus queryErr=-1;CFTypeRef result = NULL;queryErr = SecItemCopyMatching((__bridge CFDictionaryRef)dictQuery, &result);if (queryErr!=errSecSuccess) {return nil;}NSString *uuidStr=[[NSString alloc] initWithData:(__bridge_transfer NSData *)result encoding:NSUTF8StringEncoding];return uuidStr;}+(BOOL)addUUID:(NSString *)uuidStr{NSMutableDictionary *dictQuery=[[NSMutableDictionary alloc] init];[dictQuery setValue:(id)kSecClassGenericPassword forKey:(id)kSecClass];[dictQuery setValue:@"com.aa.driver" forKey:(id)kSecAttrAccount];OSStatus queryErr=-1;CFTypeRef result = NULL;queryErr=SecItemCopyMatching((__bridge CFDictionaryRef)dictQuery,&result);if (queryErr==errSecItemNotFound) {NSData *uuidData=[uuidStr dataUsingEncoding:NSUTF8StringEncoding];[dictQuery setObject:uuidData forKey:(__bridge id)kSecValueData];queryErr=SecItemAdd((__bridge CFDictionaryRef)dictQuery, NULL);}return queryErr==errSecSuccess;}@end

五、NSUUID

简单介绍:

NSUUID在iOS 6中才出现,这跟CFUUID几乎完全一样,只不过它是Objective-C接口。+ (id)UUID 是一个类方法,调用该方法可以获得一个UUID。通过下面的代码可以获得一个UUID字符串:

NSString *uuid = [[NSUUID UUID]UUIDString];

跟CFUUID一样,这个值系统也不会存储,每次调用的时候都会获得一个新的唯一标示符。如果要存储的话,你需要自己存储。在我读取NSUUID时,注意到获取到的这个值跟CFUUID完全一样(不过也可能不一样):

下面的一些介绍是从网上摘抄的知识点,可以了解一些:

一、UDID(Unique Device Identifier)

UDID 是由子母和数字组成的40个字符串的序,用来区别每一个唯一的iOS设备,包括iPhones, iPads,以及iPod touches, 这些编码看起来是随机的,实际上是跟硬件设备特点相联系的,另外你可以到iTunes点击查询序列号

UDID可以关联其它各种数据到相关设备上。例如,连接到开发者账号,可以允许在发布前让设备安装或测试应用; 也可以让开发者获得iOS测试版进行体验。苹果用UDID连接到苹果的ID,这些设备可以自动下载和安装从App Store购买的应用、 保存从iTunes购买的音乐、帮助苹果发送推送通知、即时消息。

在iOS应用早期,UDID被第三方应用开发者和网络广告商用来收集用户数据,可以用来关联地址、记录应用使用习惯……以便推送精准广告。不少用户也对此表示苹果侵犯消费者隐私,因此在后期苹过反对开发人员使用UDID。

UDID在很多需要限制一台设备一个账号的应用中经常会用到,在Symbian时代,我们是使用IMEI作为设备的唯一标识的,可惜的是Apple官方不允许开发者获得设备的IMEI.uniqueIdentifier在UIDevice.h中的定义如下:@property(nonatomic,readonly,retain) NSString *uniqueIdentifier __OSX_AVAILABLE_BUT_DEPRECATED(__MAC意思是iOS2.0以上及iOS5.0以下的系统可用,但不建议使用.Apple有可能在iOS5.0之后删除该函数;

iOS5 sdk中的获取方法:[UIDevice currentDevice] uniqueIdentifier];

但是我们需要注意的一点是,对于已越狱了的设备,UDID并不是唯一的.使用Cydia插件UDIDFaker,可以为每一个应用分配不同的UDID,所以UDID作为标识唯一设备的用途已经不大了。

二、UUID(Universally Unique Identifier)

UUID是Universally Unique Identifier的缩写,中文意思是通用唯一识别码,由网上资料显示,UUID是一个软件建构的标准,也是被开源软件基金会(Open Software Foundation,OSF)的组织在分布式计算环境(Distributed Computing Environment,DCE)领域的一部份.UUID的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定.

根据以上定义可知,同一设备上的不同应用的UUID是互斥的,即能在改设备上标识应用.但是并没有明确指出能标识出装有同一应用的不同设备,但是根据我推测,这个UUID应该是根据设备标识和应用标识生成唯一标识,再经过加密而来的(纯推测).

UUID(Universally UniqueIDentifier)是基于iOS设备上面某个单个的应用程序,只要用户没有完全删除应用程序,则这个UUID在用户使用该应用程序的时候一直保持不变。如果用户删除了这个应用程序,然后再重新安装,那么这个UUID已经发生了改变。

通过调用[[UIDevice currentDevice]identifierForVendor],方法可以获取UUID。UUID不好的地方就是用户删除了你开发的程序以后,基本上你就不可能获取之前的数据了。

[[UIDevicecurrentDevice]identifierForVendor];

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。