程序中获取设备唯一标识符(UDID

上传人:feng****heng 文档编号:170561528 上传时间:2022-11-21 格式:DOCX 页数:9 大小:33.35KB
收藏 版权申诉 举报 下载
程序中获取设备唯一标识符(UDID_第1页
第1页 / 共9页
程序中获取设备唯一标识符(UDID_第2页
第2页 / 共9页
程序中获取设备唯一标识符(UDID_第3页
第3页 / 共9页
资源描述:

《程序中获取设备唯一标识符(UDID》由会员分享,可在线阅读,更多相关《程序中获取设备唯一标识符(UDID(9页珍藏版)》请在装配图网上搜索。

1、程序中获取设备唯一标识符(UDID/UUID)在 ios 系统中,获取设备唯一标识的方法有:一、UDID(UniqueDeviceIdentifier ) UDID:Unique Device Identifier 的缩写,是 ios 设备 的唯一识别码。由 40 个字符的字母和数字组成。在 很多需要限制一台设备一个账号的应用中经常会用到 ios5SDK 中获取设备 UDID 的方法: UIDevicecurrentDeviceuniqueIdentifier;但是,从 ios5.0 开始,苹果已经不再支持使用此方法 来获取设备的 UDID,ios5 以下是可以用的。在 2013 年 3 月

2、21 日苹果已经通知开发者:从 2013 年 5 月 1 日起,访问 UDID 的程序将不再被审核通过。替代的 方案是开发者应该使用“在 ios6 中介绍的 Vendor 或 Advertising 标识符”。所以 UDID 是不能用的。二、UUID(UniversallyUniqueIdentifier ) UUID 是 UniversallyUniqueIdentifier 的缩写,中文意 思是通用唯一标识码。它是让分布式系统中的所有元 素,都能有唯一的辨识资讯,而不需要通过中央控制 端来做辨识资讯的指定。这样,每个人都可以建立不 与其他人冲突的UUID。苹果公司建议使用UUID作为 应用

3、的唯一标识字符串ios中获取UUID的代码如下:-(NSSrring*) uuid CFUUlDRefpuuid = CFUUIDCTCate( nil );CFStringRef uuidString = CFU U ID Create String (nil, puuid);NSString * result = QNSString *)CFStringCteateCopy( L LL3 uuidString);CFRelease (puuid);CFRele ase (uu idS tring);return | result autorelease;开发者可以在应用第一次启动时调用一次

4、,然后将该 字符串存储起来,以便以后替代 UDID 来使用。但是, 如果用户删除该应用再次安装使用时,又会生成新的 字符串,所以使用 UUID 不能保证唯一识别该设备。三、MACAddressMACAddress ,用来表示互联网上每一个站点的标识 符,采用十六进制数表示,共六个字节(48位)。其 中,前三个字节是由IEEE的注册管理机构RA负责给 不同厂家分配的代码(高位24位),也称为“编制上唯 一的标识符”(OrganizationallyUniqueldentifier), 后三个字节(低位24位)由各厂家自行指派给生产的适 配器接口,称为扩展标识符(唯一性)。MAC地址在网 络上用来

5、区分设备的唯一性,接入网络的设备都有一 个MAC地址,他们肯定都是不同的,是唯一的。一部 iPhone上可能有多个MAC地址,包括WIFI的、SIM的 等,但是i Touch和iPad上就有一个WIFI的,因此只需 获取WIFI的MAC地址就好了,也就是enO的地址。使 用Mac地址生成设备的唯一标识方法主要分三种:1、直接使用 “MACAddress ”2、使用 “MD5( MACAddress )”3、使用 “MD5 (MacAddress+bundle_id ) ”获得“机 器+应用”的唯一标识(bundle_id是应用的唯一标识) iOS7之前,因为Mac地址是唯一的,一般app开发

6、者会采取第 3 种方式来识别安装对应 app 的设备。目 前我们程序中非 ios7 的设备就是使用的此方法。但是 MAC 地址跟 UDID 一样,存在隐私问题。苹果新发布 的 ios7 上,如果请求 MAC 地址都会返回一个固定值。(经测试,无论使用什么设备,使用此方法都会返回 一个固定的字符串)。所以也不能保证唯一识别设备。OPENUDID ,没有用到 MAC 地址,同时能保证同一台 设备上的不同应用使用同一个OpenUDID,只要用户 设备上有一个使用了 OpenUDID 的应用存在时,其他 后续安装的应用如果获取OpenUDID,都将会获得第 一个应用生成的那个。但是根据贡献者的代码和方

7、法, 和一些开发者的经验,如果把使用了 OpenUDID 方案 的应用全部都删除,再重新获取OpenUDID,此时的 OpenUDID 就跟以前的不一样。可见,这种方法也不 能保证唯一识别设备。五、广告标识符(IDFA-identifierForIdentifier)广告标识符,是iOS6中另外一个新的方法,提 供了一个方法advertisingidentifier,通过调用该方法 会返回一个 NSUUID 实例,最后可以获得一个 UUID, 由系统存储着的。不过即使这是由系统存储的,但是 有几种情况下,会重新生成广告标示符。如果用户完 全重置系统(设置程序 -通用 -还原 -还原位置与 隐私

8、) ,这个广告标示符会重新生成。另外如果用户 明确的还原广告(设置程序-通用 -关于本机 -广告 -还原广告标示符) ,那么广告标示符也会重新生成。 关于广告标示符的还原,有一点需要注意:如果程序 在后台运行,此时用户“还原广告标示符”,然后再回 到程序中,此时获取广告标示符并不会立即获得还原 后的标示符。必须要终止程序,然后再重新启动程序, 才能获得还原后的广告标示符。advertisingIdentifier 是新框架AdSupport .framework 的一部分。ASidentifierManager 单例提供了一个方法advertisingidentifier,通过调用 该方法会返

9、回一个上面提到的 NSUUID 实例。使用步骤:1、添加框架AdSupport.framework2、添加头文件#import3、使用语句NSString*adId= ASIdentifierManagersharedManager advertisingIdentifierUUIDString;但是,appstore禁止不使用广告而采集IDFA的应用 上架。所有此方法有被 appstore 拒的风险。六、 Vendor 标识符Vendor标识符,也是ios6中新增的,跟 advertisingIdentifier 一样,该方法返回的是一个 NSUUID对象,可以获得一个UUID。获取方法如下

10、:NSString*idfv=UIDevicecurrentDeviceidentifierForVendorUUIDString; 目前我们程序中 ios7 系统使用的就是此方法。 identifierForVendor 对供应商来说是唯一的一个值, 也就是说,由同一个公司发行的的 app 在相同的设备 上运行的时候都会有这个相同的标识符。然而,如果 用户删除了这个供应商的 app 然后再重新安装的话, 这个标识符就会不一致。所以此方法也不能保证唯一 识别设备。七、Keychain 保存 UUIDKeychain 保存 UUID 的话是将用户第一次安装应 用时所生成的 UUID 保存起来,等

11、到下次用户卸了此 应用,再重新安装时会先从keychain中读取这个UUID 数,读不到再生成新的,这样就可以保证统计出一个 应用真正唯一对应一个用户。iOS中的KeyChain相比 OSX比较简单,整个系统只有一个KeyChain,每个程 序都可以往 KeyChain 中记录数据,而且只能读取到自 己程序记录在KeyChain中的数据。iOS中 Security.framework框架提供了四个主要的方法来操 作 KeyChain:查询:OSS talus Se cl t etnCopy Wa t ching (CFDi c 11 onaryRef query, CFTypeRef * nu

12、llable CF_RETURNS_RETAIMED result)_OSX_AVAILBLE_STARTING (_MAC_10_64 _IPH0NE_2_0) j添加:更新:*/OSStatus SecTtemUpdate(CFDictionaryKef query, CFDictionaryRef attributesToUpdste) _OSX_AVAILABLE_SMTING (_MAC10_6, _IPHONE_2_D);i*!删除:*7OSStatus SecItcmDclete(CFDictionaryRef query) _OSX_AVAILABLE,STARTING (_M

13、AC_10_6, _IP1IONE_2O)CP_IMPLICir_BRIDGING_DISABLEDcp_assume_nonnull_en5_END_DFCI 居Sendif /* ! SECURITY SECITEM H */使用时,先获取设备的UUID,然后构建一个要添 加到Keychain中的Dictionary,包含一些基本的 KeyChainItem 的数据类型,描述,访问分组以及最重 要的数据等信息,最后通过调用 SecItemAdd 方法将 我们需要保存的 UUID 保存到 KeyChain 中。然后通过 SecItemCopyMatching 方法获取到我们之前保存到 Key

14、Chain 中的数据。获取 UUID:-(vni d) vi EwOidLoBd *super viewDidL&iidj/ Do any additional setup after loading the viewf typically from a nib.NSString *identifierStr = UIDevice currentDevice i dentifierFarVendor UUIDStrinf; HSStrlng * ctinst KEY_USERNAKE_PASSWtJRO -snd fipp+ us emoinBiiBS sward* $NSString * c

15、ont. KEY_PASSffORD = 0Y. snda. app. password*;KSMutabLeDietionary *uflemfiinepfisswordKVPaira = KSMutableDictionary dieticmary; usernamepasswordKVRairs SE】ObjecjHtientifierStr forKeyi KEYPASSWOKD;机:f save: KE_USEFNANE_PASSWORD data: usememepasswordKVPairs;NSMutabLeDictionary *readDflerPwd = (NSHutab

16、leDictionery *)self load; KEY_USERNAME_PASSWORD;LagreadUserPwd);存:存-(oi J save; (NSString *) service date; (id) data /Get search die titularyNSWutab 1 eDictianary eycliainQuery = sc setKeychainQuery:eervice; /Delete old item before 且dd new 1 ternSe cItemDelete( tridge CFDi ct i onaryRe f)keychainQue

17、ry);/Add new object to search dictionary(Attention:the data format) rk&ychainQiiery setObjecti NSKeyedArchiver erchivedDattifi thR(K)tObjMt;dataJ farKey: (_ bridge 1 rlJkSecValueDataf/Add item to keychain rith the search dictionarySecItemAdd (_bridt CFBi c t i onar yRef) key chai nQuer y, 11LL:-(SMu

18、tabLcDictinnary *)getKeyichHinQuary: (SString *)service return NSMutableDictionary 故ttionftryIMthOb十ectaAndKeyg*(.bridge iJ)kSecClasGcneriePasswordd (_bridge iil)kSecClass* service (_bridge 1 d)kSecAttrService, setrlc&, (_kridgr 1d)kSecAttrAccounta(.bridge id)kSecAttrAccessibleAfterFirstlinlock, ( _

19、bridge id) kSecAltrAccesible,nil;取:取-(id)load; (NSString *) service id ret = ni 1 ;NSHutableDictionary *keyichainQu0ry = self getKeychalnQury:service: /ConfigiirE th巳 search 吕Etting/Since in our simple case we are expecting only a mingle attribute to be returned (the password) we can set the attribu

20、te kSecReturnData to kCFBooleanTrue keychainQuery setObjectx( bridge id)kCFBooleanTrue farKey: ( bridfie id) kSecRetumDatft;keyehafnQuery setObjcct: (_ jridc id)kSecMatchLImitOne forKcy: ( _bridffn id) kSecMatchLiniit;CPDataBef keyDatfi =:if (SecltemCopyMaiching(_br 1 dge CFDicLionaryRef)keychainQue

21、r, (CFTypeRef *)tkeyData )=noErr) t.ry ret = SKeyedUnarc1iiver unarc时veObj&tMIthiDatfi: I bri血q NSData *)keyDatfiJ; 缸at uh OiSException *e) NSLag(0pLnt.rchLve of faiLed: %0 , service, 4. finally if (keyData)CFEelease (keyData);return reti删:/-(raid)delete:(NSString *5 service NSMutablcDictionfiry *keychainQucry = self gctKcychainQucry:service; SecTtemDelete( _bridge CFT)ictionaTyRef)keychainQuery);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!