iOS钥匙串(KeyChain)和设备id(uuid)

iOS钥匙串(KeyChain)和设备id(uuid),第1张

在开发过程中,我们经常会被要求获取每个设备的唯一标示,以便后台做相应的处理。

项目2若要使用项目1的Keychain则项目2要开启Keychain Sharing 且 Keychain Groups要包含项目1。 项目1的Keychain Sharing 没有要求。

使用第三方SSKeychain。

简介:UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成。在很多需要限制一台设备一个账号的应用中经常会用到。在iOS5中可以获取到设备的UDID,iOS7中已经完全的禁用了它。iOS7之前的使用了的app如果在iOS7上运行,它不会返回设备的UDID,而是会返回一串字符串,以FFFFFFFF开头,跟着identifierForVendor的十六进制值。

获取:[[UIDevice currentDevice] uniqueIdentifier]

废弃:iOS6

简介:iOS 60系统新增用于替换uniqueIdentifier的接口。是给Vendor标识用户用的,每个设备在所属同一个Vender的应用里,都有相同的值。其中的Vender是指应用提供商,但准确点说,是通过BundleID的DNS反转的前两部分进行匹配,如果相同就是同一个Vender,例如对于comsomecompanyappone,comsomecompanyapptwo这两个BundleID来说,就属于同一个Vender,共享同一个idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常适合于作为内部用户行为分析的主id,来标识用户,替代OpenUDID。如果用户将属于此Vender的所有App卸载,则idfv的值会被重置,即再重装此Vender的App,idfv的值和之前不同。

获取:[[[UIDevice currentDevice] identifierForVendor] UUIDString]

适用:iOS60+

例子:95955F33-BFBD-48BA-A630-866D2DAE482D

简介:广告标示符,适用于对外:例如广告推广,换量等跨应用的用户追踪等。但如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成。注意:如果程序在后台运行,此时用户“还原广告标示符”,然后再回到程序中,此时获取广 告标示符并不会立即获得还原后的标示符。必须要终止程序,然后再重新启动程序,才能获得还原后的广告标示符。在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的,用户可以在 设置 -> 隐私 -> 广告追踪 里重置此id的值,或限制此id的使用。

获取:[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

适用:iOS60+

例子:9C287922-EE26-4501-94B5-DDE6F83E1475

简介:MAC地址在网络上用来区分设备的唯一性,接入网络的设备都有一个MAC地址,他们肯定都是不同的,是唯一的。一部iPhone上可能有多个MAC地址,包括WIFI的、SIM的等,但是iTouch和iPad上就有一个WIFI的,因此只需获取WIFI的MAC地址就好了,也就是en0的地址。MAC地址就如同我们身份z上的身份z号码,具有全球唯一性。但在iOS7之后,如果请求Mac地址都会返回一个固定值。

废弃:iOS70+

获取:

简介:iOS整个系统有一个KeyChain,每个程序都可以往KeyChain中记录数据,而且只能读取到自己程序记录在KeyChain中的数据。而且就算我们程序删除掉,系统经过升级以后再安装回来,依旧可以获取到与之前一致的UDID(系统还原、刷机除外)。因此我们可以将UUID的字符串存储到KeyChain中,然后下次直接从KeyChain获取UUID字符串。(本示例中使用KeychainItemWrapper工具类)

获取:

简介:虽然苹果在iOS6中禁用了获取uuid的方式,但是只要你研究下就知道这个API只是私有化了,使用私有API还是可以获取设备的uuid。但是这个方面也面临着风险:比如API变更以及AppStore审核问题,但是在越狱设备上你还是可以尽情享用的。

类:AADeviceInfo(dump出头文件)

获取:[AADeviceInfo udid]

使用方法:在项目中将真机上的AppleAccountframework框架导出,引入Xcode工程中,利用runtime或者直接使用该类就行。(细节补充:导出AppleAccountframework后,进入AppleAccountframework的根目录,新建Headers文件夹,然后将dump出的头文件放在Headers目录,就可以像引用第三方framework一样在项目中使用)

在很多场景中,我们需要获取设备的唯一标识,用来做定点推送等 *** 作,那么这时候我们就需要精准到某台手机,甚至某个人,客户端这边就需要保证这个标识具有唯一性,并且即使我们的APP卸载重装了,也能够保持不变。

在iOS5以前,大家普遍使用的是UDID,可iOS5以后苹果就把UDID的访问权限移除了,而且试图访问UDID的程序在审核的时候很大几率都会被拒。所以使用UDID作为唯一标识的路就行不通了。

还有人说,UUID也可以作为唯一标识,确实,但是,有一个不好的地方就是每次获取设备的UUID都会是一个新的与上次不同的值,所以这个也行不通。

还有一个Open UDID,但是这个库已经弃用了,而且这个值在APP卸载重装后获得的值也会不同。

此外,广告标志符IDFA,也曾被人用作唯一标识,但是这个在重置系统或者还原广告标志符后获取到的值也会不同。

那么,我们又将如何获取iOS设备的唯一标识呢?

解决方案:

在APP第一次运行的时候,使用keychain存储一个标识,然后在接下来访问的时候直接从keychain中取。这样做的好处在于,keychain中的数据会被同步到iCloud中,即使删除了应用也会存在。但是这样做也有一个不好的地方,就是如果多台手机使用了同一个iCloud账号登录,那么这个唯一标识将毫无意义。

不过,话又说回来,任何一种技术的实现都有自己的应用场景,比如上面这个既然是同一个iCloud账号就看做是同一个账号。所以,如何标记iOS设备还得看具体的需求。

一:总览

iOS设备标识码

1、 device ID

2、 IMEI :iOS5之后被禁止,写在主板上,不会变化。

3、 IDFA :Identifier For Advertising,iOS独有的广告标识符。但是用户可以更改,不适用于做唯一标识。系统重置、在设置里还原广告标识符,都会更改IDFA。

IDFA是一串16进制的32位串。

IDFA是苹果iOS 6开始新增的广告标识符,英文全称是Identifier for Advertising,用于给开发者跟踪广告效果用的,可以简单理解为iPhone的设备临时身份z号,是说临时身份z号,是因为IDFA允许用户更换。iOS用户可以通过(设置-通用-还原-还原位置与隐私)更换IDFA。iOS10系统提供用户禁止广告跟踪功能,用户勾选了这个功能后,应用程序讲无法取读到设备的IDFA。

IDFA是目前苹果生态广告交易的主要标识,一般跟广告商 交易一个用户后,广告商 需要给你提供用户的 IDFA作为凭证。主流的广告平台广点通、新浪粉丝通对账都是基于IDFA的

4、 MAC地址 :硬件标识符,包括WiFi mac地址和蓝牙mac地址。iOS 7 之后被禁止(同时禁止的还有OpenUDID)。

MAC地址在网络上用来区分设备的唯一性,接入网络的设备都有一个MAC地址,他们肯定都是不同的,是唯一的。一部iPhone上可能有多个MAC地址,包括WIFI的、SIM的等,但是iTouch和iPad上就有一个WIFI的,因此只需获取WIFI的MAC地址就好了,也就是en0的地址。MAC地址就如同我们身份z上的身份z号码,具有全球唯一性。但在iOS7之后,如果请求Mac地址都会返回一个固定值。

5、 UDID :用来标示设备的唯一性 。iOS 6 之后被禁止获取系统原生的UDID,但可以通过uuid,写入到钥匙串中,从而获得自定义的UDID(非系统原生),即使用户重装APP,只要每次都取这个钥匙串返回,就是不变的。

UDID是由40个字符的字母和数据组成

Unique Device Indentifier,用户不能更改,适合做唯一标识。但是苹果禁止应用获取UDID。

6、 UUID :APP重装后会变化

Android设备标识码

1、 Device ID 又叫做设备ID,可以用系统提供的TelephonyManager服务来获取,具有唯一性。其中又包括IMEI和MEID/ESN。

2、 IMEI :GSM设备返回的,并且是写在主板上的,重装APP不会改变IMEI。Android 60以上系统需要用户授予read_phone_state权限,如果用户拒绝就无法获得。

3、 MAC地址 :硬件标识符,包括WiFi mac地址和蓝牙mac地址。Android 60之后被禁止,若获取则会被判定为有害应用。

4、 MEID/ESN :CDMA设备返回的,一般不使用。

5、 UDID :用来标示设备的唯一性。获取UUID后,写入so文件生成UDID。即使APP重装,值也不变,除非root手机(普通用户做不到)

6、 UUID :APP重装之后会改变

---未整理完,待续---

IMEI:International Mobile Equipment Identity,国际移动设备身份码的缩写。是由15位数字组成的“电子串号”,它与每台手机一一对应,每个IMEI在世界上都是唯一的。

UDID:Unique Device Identifier,唯一设备标识码。

UUID:Universally Unique Identifier,通用唯一识别码。目前最广泛应用的UUID,是微软公司的全局唯一标识符GUID。其目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。

以上就是关于iOS钥匙串(KeyChain)和设备id(uuid)全部的内容,包括:iOS钥匙串(KeyChain)和设备id(uuid)、iOS获取设备ID总结、iOS获取设备唯一标识等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9740780.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存