iOS Device ID 的前世今生

iOS Device ID 的前世今生

平时大家喜欢把各种标识符都称为 Device ID,面对各种各样的标识符我也是一头雾水,觉得有必要梳理一下。不管这些标识符叫什么名字,出于保护用户隐私的考虑, Apple 不会允许开发者来定位用户的设备,只允许开发者来对 App 进行定位。

IMEI

IMEI(International Mobile Equipment Identity):国际移动设备身份码,在手机组装完成后赋予的一个全球唯一的号码,由于此时 iPhone 只支持单卡,所以 IMEI 和 iPhone 是一一对应的。

iOS 2 提供了一种方法获取 IMEI,但是为了保护用户隐私,iOS 5 以后苹果不再允许获取 IMEI 了,如果你在应用中获取 IMEI,可能会遭到 Apple Store 的拒绝。

IDFA

IDFA(Identifier for Identifier),即广告标识符,多用于用户的广告追踪,是每台设备的唯一 ID,IDFA 存储在用户的系统上。Apple 是不允许开发者追踪用户设备的,但是为了监控广告效果,在 iOS 6 中提供这个折中方案,但 IDFA 也会发生变化,比如重置系统、还原广告标识符等。同时,用户也可以选择是否禁止广告追踪(即商家没办法根据用户的行为偏好推送广告)。

UDID

UDID(Unique Device Identifier):苹果 iOS 设备的唯一识别码,在 iOS 6(2013 年 5 月 ) 以后被 Apple 禁止。

Mac 地址

Mac(Medium/Media Access Control):网络设备的物理地址,如果 IMEI 被认为是设备的唯一标识,那么 Mac 就是网络接口唯一标识。学过计算机网络都知道,在根据 IP 进行物理寻址的时候就是使用的 Mac 地址。

同样由于隐私问题,在 iOS 7 之后无法通过 Mac 地址来标识唯一设备,因为在 iOS 7 之后获取到的 Mac 地址为一固定值。

中期总结

开发者们想尽办法想要追踪用户设备,但是 Apple 明令禁止,经过双方的博弈,最终 IDFA 一统天下。下面这图来源于网络,很明了的阐述了 Device ID 的演进史。

iOS Device ID 的前世今生

来源于网络

NSUUID

UUID(Universally Unique IDentifier):通用唯一识别码

NSUUID 与之前的 CFUUID 是一致的,只是改成了 Objective-C 的接口而已,NSUUID 每次获取的值都会发生变化,但是它会保持唯一性。

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

IDFV

IDFV(identifierForVendor):Vendor 标示符,也被称为厂商标识符。只要用户的设备中没有卸载当前 Vendor 的所有 APP,则不会发生变化。什么是 Vendor ?可以理解成 bundleID 的前两部分,例如对于 com.joy.app_1 和 com.joy.app_2 这两个 bundleID 来说,就属于同一个 Vendor ,共享同一个 IDFV。

 NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

IDFV 比较适合追踪用户行为,目前多配合 Keychain 来搭配使用,来保证不管是否卸载重装,IDFV 都是不变的。

LC_UUID

其实这个和 Device ID 没什么关系,但是因为也叫 UUID,防止造成误解,所以来解释下。LC_UUID 可以这么理解,是用来标示 Mach-O 的,你如果去查看你 APP 的崩溃日志,你会发现应用的可执行程序和各种库都有自己的 UUID,你在进行符号解析的时候,就需要找到与系统库和你 APP 的 UUID 相同的符号文件来进行堆栈地址还原。下面列举的最后一列是库或者 APP 的 UUID。

Binary Images:
0x107170000 - 0x1071aafff +GYMonitorExample x86_64 
0x10724b000 - 0x107252fff libBacktraceRecording.dylib x86_64 
0x107259000 - 0x107260fff libViewDebuggerSupport.dylib x86_64 
0x107269000 - 0x107548fff Foundation x86_64 <61cd1144bb933571bdb39f9b56cecffe>
0x10779c000 - 0x107b6bfff libobjc.A.dylib x86_64 <5f0e622c86ec3969acfbcaaa10e21a31>

结论

2017 年的我们想要通过 UDID、Mac 地址、OpenUDID 来定位用户设备已经是不可能啦,因为它们要么是无效,要么是受到了 App Store 的限制。但是如果你想要追踪广告的话,可以使用 IDFA,想要用来分析用户行为可以使用 IDFV + KeyChain 来解决。

同时那么多标识符都被叫做 UUID,其实它们作用各不相同,或许叫它们 NSUUID、IDFV、LC_UUID 更容易让大家理解吧!

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

PS:如果您想和业内技术大牛交流的话,请加qq群(527933790)或者关注微信公众 号(AskHarries),谢谢!

转载请注明原文出处:Harries Blog™ » iOS Device ID 的前世今生

赞 (0)

分享到:更多 ()

评论 7

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. 澳门银座平台.爱不一定要永远。曾经拥有的也许会是你一生最美好的回忆。因为我爱过,所以不会成敌人;因为我伤过,所以不会做朋友;那我们只能是最熟悉的陌生人。爱过知情重,醉过才知酒浓。回复
  2. 澳门银座娱乐.爱情是一个人对另一个人习惯的认同,爱到最高境界就是认同了他的习惯,一个女人习惯了一个男人的鼾声,从不适应到习惯再到没有他的鼾声就睡不着觉,这就是爱 ;一个男人习惯了一个女人的任性、甚至无理取闹、无事生非,这就是爱;一个人会为了另一个人去改变、去迁就,这就是爱回复
  3. 澳门银座注册.我可以不是你第一个喜欢的人,不是你第一个牵手的人,不是你第一个拥抱的人,不是你第一个亲吻的人,不是你第一个拥有的人。但希望,我是你遇到痛苦第一个想倾诉的人,是你遇到快乐第一个想分享的人,是你遇到挫折第一个想依靠的人,是你今生以后第一个相伴的人。所以请将你心里的某个第一交给我。回复
  4. 程序化交易加盟因为深爱,所以要放开,因为陪伴,所以要懂得珍惜!在我们的生命中或许会遇到很多人,有的人在你身边停留的时间比较久,但不是你真正的归属;有的人你追求了很长一段时间,最后你才发现原来你并非爱他,只是不甘心你追求了那么久,却要放手,当你真正遇到那个人的时候,你才会明白什么是爱!回复
  5. 量化交易模型不是想用爱情把你印刻在心,只是换一种方式想对你好。无论结果是坏是好,我愿意倾己所有,搏得你一敛欢 笑。失败亦然,我心已付回复
  6. 自动交易软件在这陌生的人海中,如果只是孤身一人,又何来旅行的意义。或许有些人会追求一个人的潇洒,.但我无法继续这寂寞的洒脱。回复
  7. 股票下单软件排名当心头为你写下牵挂,也许注定是一片荒浮;当繁华落尽在夕阳边,我欲与你共享日的落;当晓光刺入温馨小窝,我会携你共盼新的日;一切只是我片面遐想,只有你同我一起向往回复