博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
现有IOS设备唯一标示符的方案比较
阅读量:4198 次
发布时间:2019-05-26

本文共 1790 字,大约阅读时间需要 5 分钟。

现有IOS设备唯一标示符的方案比较

UDID

[[UIDevice currentDevice] uniqueIdentfier]

iOS官方最早提供的UDID方案,根据某一公式,使用设备序列号、网卡地址等信息作为参数计算而来,iOS6之后该计算公式发生了改变。

该方法返回的结果在所有应用中都相同,并且卸载应用、刷机均不会发生改变,是最为准确的设备唯一标示符。

iOS5之后,该方法被标记为废弃!最终,在201351号之后,AppStore禁止任何使用该方法的应用上架。

iOS7中对外公开的API中已经移除了该方法!

网卡地址

通过Unix级别的API去获取Wifi的网卡地址。

该方法属于UDID替代方案中最为准确的一种,因为网卡地址不会因为刷机、还原设备而发生改变。故追求唯一性的厂商多选择此种方案!

iOS7之后,应用已经无法获取网卡地址,所以该方案在iOS7中也已经被废弃。

OpenUDID

开源的一个UDID替代方案,原理是利用应用间的剪贴板共享和本地一些必要的缓存信息,让多个应用间共享一个UUID

OpenUDID在官方废弃UDID接口之后,受到广泛的欢迎!可以说是现在大多数应用的UDID替代方法。

OpenUDID在刷机、还原设备后就会产生新的UDID,事实上,由于剪贴板的特殊性,如果所有使用了OpenUDID的应用被全部卸载之后,再次安装的应用取到的OpenUDID将会是一个全新的值!

iOS7中,不同组的应用(即不同厂商)的应用之间不再能共享剪贴板间的数据!

同组(即同一厂商)应用的定义为:Info.plist中关于软件唯一标示符的字段CFBundleIdentifier中的前两段标识符(例如com.mycompany)相同。

固在iOS7中,OpenUDID也将慢慢失去它的意义。

保存在NSUserDefault中的UUID

iOS5UDID标为废弃之后,官方提供的替代方案。即使用CFUUIDCreate生成一个UUID,并将之保存在NSUserDefault中,用它作为设备标识符。在iOS6之后,苹果更推出NSUUID来替代CFUUIDCreate,但本质是一样的。

UUID每次都会生成一个新的字符串,也就是说应用被卸载之后,就会被认为是一个新的设备,更不用提刷机、还原设备了。

故基本无人采用UUID的方案。

厂商唯一标识符identifierForVender

[[UIDevice currentDevice] identifierForVender]

iOS6中推出的UDID替代方案,该方法对于同一厂商的应用返回相同的值,不同厂商所得到的值不同。

该方案刷机、还原设备后,获得值将会改变。同样注意的是:如果同一厂商安装的所有应用都被卸载后,新安装的同一厂商的应用同样也将获得新的值,而不是原来的值!

由于不能跨厂商,并且软件卸载后再安装有改变的可能性,该方案也并没有被广大开发商接受。

广告标识符advertisingIdentifier

[[ASIdentifierManager sharedManager] advertisingIdentifier];

iOS6中推出的另一款UDID替代方案,该方法对所有厂商的应用返回相同的值。同样提供的是另一个APIadvertisingTrackingEnabled,该参数表示用户是否希望广告追踪被限定,但该参数仅仅是个布尔值,用于表示用户意愿,不影响advertisingIdentifier的读取。

该方法由于是官方提供的,并且所有厂商的应用取到的值相同,所以相对接受度好些,但是由于仅在iOS6上适用,所以更多人还是选择了OpenUDID的方案。

该方法刷机、还原设备后,获得的值将会改变。此外,用户如果通过设置->关于本机->广告->还原广告标识符,就可以重新生成一个新的值。

该方法是iOS7上目前官方允许的范畴内最为可接受的方案。

IMEI

iOS官方API无法获得IMEI,或者说禁止获取。故很少有人在iOS上去读取IMEI。但IMEI作为设备唯一标识符是最为准确的方法之一!不会随着刷机、还原设备而改变!

读取IMEI的应用将会被AppStore拒绝!

同样类似的方案有蓝牙地址、iOS设备序列号(SerialNumbedr)等等。

 

转载自:

 

你可能感兴趣的文章
pyqt实现界面化编程
查看>>
qt写DLL文件并调用和出现的问题分析
查看>>
工厂模式(Factory)-设计模式(一)
查看>>
建造者模式(Builder)-设计模式(三)
查看>>
初学Java必备基础知识,编程领域你需要掌握的关键点!
查看>>
阿里五年Java程序员的总结,献给还在迷茫中的你!
查看>>
程序员身上有异味,同事为什么都不会直接告诉他?
查看>>
Java、C、C+ +、PHP、Python分别用来开发什么?一篇文章告诉你!
查看>>
Linux-SHELL常用命令
查看>>
Linux-网络运维基础
查看>>
Verilog编程网站学习——门电路、组合电路、时序电路
查看>>
android——学生信息显示和添加
查看>>
Android——ImageSwitcher轮流显示动画
查看>>
Android——利用手机端的文件存储和SQLite实现一个拍照图片管理系统
查看>>
图像调优1:清晰度相关参数MTF,SFR,MTF50,MTF50P 以及TVL的概念以及换算说明
查看>>
图像调优3: CCM参数的标定
查看>>
最长回文子串(Go,LeetCode)
查看>>
奏响春的序曲,「武汉的春天」让人泪目
查看>>
情人节集体撤档,《肥龙过江》改网播,线上首映会成为常态吗?
查看>>
“抢菜大战”背后:生鲜电商的突击大考
查看>>