开发是如何追踪定位到你的?

2020/04/17 17:11
阅读数 155

前言

逛淘宝时如果你搜索了某个品牌的某款鞋子,它接下来就会给你推送该品牌的其他款鞋子或者其他品牌的类似鞋款,类似的广告你一定收到过很多,那么广告商是如何对你的设备精准投放你感兴趣的内容?手机上有不同的APP,搜狗地图APP的推送为何没有推送到搜狗录音助手APP上呢?如何保证能精准推送到你的设备,且不同APP之间不会错乱?

问题明确下就是开发是如何追踪定位到具体的设备和APP呢?这就需要对设备和APP进行唯一标识来进行区分,在此对各种标识符的标识内容和作用进行梳理~

常见的设备ID标识符

1) IMEI

IMEI(International Mobile Equipment Identity):国际移动设备身份码,在iOS5之后该方法就被废弃掉了,因此iOS 5以后不能获取手机IMEI,但是也是可以通过私有API获取手机的IMEI号的,但是通过苹果私有API获取IMEI号,上架苹果商店会被拒掉的。

电信运营商因为通讯网络协议中都是传递用户手机的IMEI及SIM卡的IMSI,所以运营商是有这些用户的IMEI及IMSI的。

废弃版本:iOS5.0+。

2) MAC地址

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

MAC地址在网络上用来区分设备的唯一性,接入网络的设备都有一个MAC地址,他们肯定都是不同的,是唯一的。一部iPhone上可能有多个MAC地址,包括WIFI的、SIM的等,但是iTouch和iPad上就有一个WIFI的,因此只需获取WIFI的MAC地址就好了,也就是en0的地址。MAC地址就如同我们身份证上的身份证号码,具有全球唯一性。同样由于隐私问题,在 iOS 7 之后无法通过 Mac 地址来标识唯一设备,因为在 iOS 7 之后获取到的 Mac 地址为一固定值。

废弃版本:iOS7.0+(当然App有一些特殊的方法,例如主动提示用户选择WIFI网络的方式可以获取MAC地址)。

3) UDID

UDID的全称是UniqueDevice Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成。在很多需要限制一台设备一个账号的应用中经常会用到。

在iOS5中可以获取到设备的UDID,iOS7中已经完全的禁用了它。iOS7之前的使用了的app如果在iOS7上运行,它不会返回设备的UDID,而是会返回一串字符串,以FFFFFFFF开头,跟着identifierForVendor的十六进制值。

UDID可以关联其它各种数据到相关设备上。例如,连接到开发者账号,可以允许在发布前让设备安装或测试应用;也可以让开发者获得iOS测试版进行体验。apple用UDID连接到apple ID,这些设备可以自动下载和安装从App Store购买的应用、保存从iTunes购买的音乐、帮助apple发送推送通知、即时消息。在iOS应用早期,UDID被第三方应用开发者和网络广告商用来收集用户数据,可以用来关联地址、记录应用使用习惯等等以便推送精准广告。

开发者把UDID跟用户的真实姓名、密码、住址、其它数据关联起来;网络窥探者会从多个应用收集这些数据,然后顺藤摸瓜得到这个人的许多隐私数据。同时大部分应用确实在频繁传输UDID和私人信息。为了避免集体诉讼,苹果最终决定在iOS 5的时候,将这一惯例废除,开发者被引导生成一个唯一的标识符,只能检测应用程序,其他的信息不提供。现在应用试图获取UDID已被禁止且不允许上架。

废弃版本:iOS6。

4) UUID

Universally Unique Identifier,通用唯一标识符。UUID是指在一台机器上生成的数字,它是根据时间变化的。一个32位的十六进制序列,使用小横线来连接。

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

UUID是基于iOS设备上面某个单个的应用程序,只要用户没有完全删除应用程序,则这个UUID在用户使用该应用程序的时候一直保持不变。如果用户删除了这个应用程序,然后再重新安装,那么这个UUID已经发生了改变。用户删除了你开发的程序以后,基本上你就不可能获取之前的数据了。

目前的解决方法是,通过UUID,写入到钥匙串中,从而获得自定义的UDID(非系统原生),即使用户重装APP,只要每次都取这个钥匙串返回,就是不变的。

适用iOS6.0+,格式如26EA83F9-F510-4A08-BA4C-0CD431922D9C。

5) IDFV

Identifier For Vendor(应用开发商标识符),是给Vender标识用户用的,每个设备在所属同一个Vender的应用里,都有相同的值。其中的Vender是指应用提供商,但准确点说,是通过BundleID的DNS反转的前两部分进行匹配,如果相同就是同一个Vender。

例如对于com.somecompany.appone,com.somecompany.apptwo这两个BundleID来说,就属于同一个Vender,共享同一个idfv的值。

和idfa不同的是,idfv的值是一定能取到的,所以非常适合于作为内部用户行为分析的主id,来标识用户,替代OpenUDID。

如果用户将属于此Vender的所有App卸载,则idfv的值会被重置,即再重装此Vender的App,idfv的值和之前不同。

适用:iOS6.0+。

6) IDFA

Identifier For Advertising(广告标识符),在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的。广告标示符是由系统存储着的。

广告标示符是由系统存储着的。不过即使这是由系统存储的,但是有几种情况下,会重新生成广告标示符。如果用户完全重置系统((设置程序 ->通用 -> 还原 ->还原位置与隐私),这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序->通用 -> 关于本机 ->广告 ->还原广告标示符),那么广告标示符也会重新生成。

适用于对外,例如广告推广,换量等跨应用的用户追踪等。

7) Device ID

Device Id 是推送系统中设备的唯一标识,是长度为 32 位的数字和小写字母的组合,在控制台或通过 OpenAPI 推送时,可以指定终端推送,即通过指定终端的 deviceId 推送。

8) Bundle ID

Bundle ID (Bundle identifier)也叫 App ID或者应用ID,是每一个 iOS应用的唯一标识,就像一个人的身份证号码,申请iOS证书、打包 ipa 和在 itunesconnect 创建 App 都要用到 App ID, 整个 App 上架流程就是靠这个 App ID 关联在一起。

每开发一个新应用,首先都需要先去创建一个 Bundle ID。

Bundle ID分为两种:Explicit App ID(明确的APP ID),一般格式是:com.domainname.appname。这种id只能用在一个app上。每一个新应用都要创建一个;Wildcard App ID(通配符APP ID), 一般格式是:com.domainname.*。这种id可以用在多个应用上,虽然方便,但是使用这种id的应用不能使用通知功能,所以并不常用。

在Android系统中,判断一个 App 的唯一标识是Package name,与iOS 的 Bundle ID是对应的。

Bundle ID格式:由于苹果和谷歌的原因,同一个应用的 android packageName 和 iOS Bundle ID 不同,比如,微信:iOS Bundle ID 是com.tencent.xin;Android packageName 是com.tencent.mm;

9) Device token

Device token是APNs( Apple Push Notification service,苹果推送服务)用于区分识别每个iOS设备和设备上不同app的一个标识符,通过设备和APNs服务器建立的长连接后,通过注册推送服务,由APNs生成后加密反馈给app的。还可以用于APNs通过它将推送消息路由到指定设备上。也就说是从信息量上看:device token = device id + bundle id。

总结

以上列出了各种常见的标注设备或者用户的标识符,简单总结如下:

1)IMEI:国际移动设备身份码,废弃版本:iOS5.0+;

2)MAC地址:网络设备的物理地址,在网络上用来区分设备的唯一性,废弃版本:iOS7.0+;

3)UDID苹果IOS设备的唯一识别码,废弃版本:iOS6.0+;

4)UUID通用唯一标识符,可以通过UUID写入到钥匙串中,从而获得自定义的UDID(非系统原生),即使用户重装APP,只要每次都取这个钥匙串返回,就是不变的。

5)IDFV应用开发商标识符,每个设备在所属同一个Vender的应用里,都有相同的值,适用于iOS6.0+;

6)IDFA:广告标识符,由系统存储,苹果专门给各广告提供商用来追踪用户而设的,可能发生变化,如系统重置、在设置里还原广告标识符。用户可以在设置里打开“限制广告跟踪”,适用于iOS6.0+;

7)Device ID:是推送系统中设备的唯一标识;

8)Bundle ID:每一个iOS应用的唯一标识;

9)Device token:用于区分识别每个iOS设备和设备上不同app的一个标识符;

以上各种设备ID标识符是目前移动应用开发过程中比较常见的,在不同公司、不同开发可能对同一个ID的释义和实现方式有略微不同。出于保护用户隐私的考虑,苹果对各种设备和APP的定位有明确的限制,一旦超出限制APP在苹果审核时就有被拒的风险。


本次就先记录这么多,下一次再见。

希望大家能有所收获,一起进步、互相学习!

搜狗测试微信号:Qa_xiaoming

搜狗测试QQ粉丝群:459645679


本文分享自微信公众号 - 搜狗测试(SogouQA)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部