要识别用户,首先就是要选择一个标识符,通过这个标识符来识别这个用户的设备(而不是用户),这个标识符要能够保证一个设备上返回的值是一样的,并且在其他设备上不会出现相同的值。

在iOS7之前,曾经有过很多方法来识别用户的设备,从最原始的设备udid、mac地址,到被各广告统计平台广泛使用的开源方案OpenUDID。

但随着AppStore开始拒绝接受使用udid的应用,到mac地址在iOS7上所有设备上都返回相同的值,再到iOS7上对剪贴板的限制,导致OpenUDID无法被不同应用共享相同的值,注定了上面提到的这些id们不得不退出历史的舞台。

随着iOS7快速占据了半壁江山,设备id的控制权终于彻底回到了Apple手中,同时也让用户能够把控自己的隐私,充分表明了是苹果对用户隐私保护的决心。

好了,其实就一个问题:iOS7时代我们用什么来追踪和识别用户?


先给结论

  • idfa: 适用于对外:例如广告推广,换量等跨应用的用户追踪等
  • idfv: 适用于对内:例如分析用户在应用内的行为等

PS:尘埃落定,跟着Apple走,大家不用再犹豫了。


再给解释

idfa

  • 全名:advertisingIdentifier
  • 代码:

      #import <AdSupport/AdSupport.h>
    
      NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
  • 来源:iOS6.0及以后

  • 说明:直译就是广告id, 在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的,用户可以在 设置|隐私|广告追踪 里重置此id的值,或限制此id的使用,故此id有可能会取不到值,但好在Apple默认是允许追踪的,而且一般用户都不知道有这么个设置,所以基本上用来监测推广效果,是戳戳有余了。
  • 注意:由于idfa会出现取不到的情况,故绝不可以作为业务分析的主id,来识别用户。

idfv

  • 全名:identifierForVendor
  • 代码:

      NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
  • 来源:iOS6.0及以后

  • 说明:顾名思义,是给Vendor标识用户用的,每个设备在所属同一个Vender的应用里,都有相同的值。其中的Vender是指应用提供商,但准确点说,是通过BundleID的DNS反转的前两部分进行匹配,如果相同就是同一个Vender,例如对于com.somecompany.appone,com.somecompany.apptwo 这两个BundleID来说,就属于同一个Vender,共享同一个idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常适合于作为内部用户行为分析的主id,来标识用户,替代OpenUDID。
  • 注意:如果用户将属于此Vender的所有App卸载,则idfv的值会被重置,即再重装此Vender的App,idfv的值和之前不同。

历史上的英雄们

UDID

设备唯一标识符(Unique Device Identifier)之前被各种国内外统计平台,应用开发商广泛使用,后Apple从2013年05月01日起拒绝接受使用UDID的应用后,立毙!

Mac地址

每一个网卡都有一个唯一的标识,即Mac地址,显然用来标识一个手机是绰绰有余的了,也有一些开源的方案也用到了它,国内UMTrack等也用它作为过主id,随着iOS7返回同样的值后,不得不退隐江湖。

OpenUDID

在Apple拒绝UDID后,OpenUDID作为独立于Apple的开源方案,被广大的开发者所接受,各大统计广告平台都从UDID等方案切换到OpenUDID的方案(看来大家都不想完全被Apple束缚啊),但不幸的事,同样由于iOS7对剪贴板的限制,导致同一个设备上应用间,无法再共享一个OpenUDID,即OpenUDID作为设备唯一标识的能力被大大削弱。也可以看到随着iOS7的来临,各广告平台都迅速更新自己的SDK,来切换到苹果的idfa的方案上来。

其他

CFUUID、NSUUID等自己生成,自己存储管理的就不细说啦。

DeviceToken

这是推送用的令牌,用户如果没开推送,或者拒绝了,这个就没有了!

iOS7时代我们用什么来追踪和识别用户?的更多相关文章

  1. Facebook回应追踪无账号用户:源于网站插件漏洞

    近日,比利时隐私独立委员一项调查披露Facebook跟踪收集大量网站用户的上网足迹,同时触及那些没有注册Facebook账号的访客. 对此,Facebook公司回应这些恶劣跟踪行为在于社交媒体在安装插 ...

  2. Asp.NET的Trace追踪

    http://m.blog.csdn.net/article/details?id=7026402 当我们扑捉程序错误时,调试器是开发者们最得力的助手.然而,ASP.NET的跟踪,在调试时是一个很棒的 ...

  3. 微软曝光眼球追踪新专利,未来或将可以使用眼球控制HoloLens

    想要在增强现实(AR)和虚拟现实(VR)中获得感官能力,计算机的配合非常重要.如何能够更好的追踪我们所感知的,计算机判断用户目光所向的能力就必须进一步提高.根据微软新曝光的专利,可能已经有一个解决方案 ...

  4. Kinect 骨骼追踪对象选择

    默认情况下,骨骼追踪引擎会对视野内的所有活动的游戏者进行追踪.但只会选择两个可能的游戏者产生骨骼数据,大多数情况下,这个选择过程不确定.如果要自己选择追踪对象,需要使用AppChoosesSkelet ...

  5. iOS7中的ViewController切换

    转自:https://onevcat.com/2013/10/vc-transition-in-ios7/ iOS 7 SDK之前的VC切换解决方案 在深入iOS 7的VC切换效果的新API实现之前, ...

  6. (转)iOS7界面设计规范(1) - UI基础 - 为iOS7而设计

    今天开个新坑.其实老早就想做这事儿了.记得前一两年,苹果官方还会在开发者中心提供中文的HIG(Human Interface Guideline),后来给没了:网上能够找到的中文版本不知是官方还是同行 ...

  7. 『转』市售热门可穿戴式“活动追踪器 Tracker”导购指南

    充足的运动对于幸福的生活来说是至关重要的,但很多人总是找不到足够的时间运动,所以远远达不到日常需要的运动标准.这就是为什么今天活动跟踪器成为了热门话题,尤其是对于注重健康的消费者来说.除BodyMed ...

  8. 研究发现:TLS1.3中的 TLS 对话恢复机制可以追踪用户

    由于隐私浏览器技术的日渐成熟,网站越来越无法通过 Cookie 和网页浏览器特征来追踪用户,但道高一尺魔高一丈,现在这些网站会用 TLS 1.3 中的 TLS 对话恢复机制追踪用户. 你以为禁用浏览器 ...

  9. Kinect 开发 —— 骨骼追踪

    骨骼追踪技术通过处理景深数据来建立人体各个关节的坐标,骨骼追踪能够确定人体的各个部分,如那部分是手,头部,以及身体.骨骼追踪产生X,Y,Z数据来确定这些骨骼点.骨骼追踪系统采用的景深图像处理技术使用更 ...

随机推荐

  1. (转载)SQL Reporting Services (Expression Examples)

    https://msdn.microsoft.com/en-us/library/ms157328(v=SQL.100).aspx Expressions are used frequently in ...

  2. 使用Echarts实现动态曲线图表

    最近做的一个在线气象观测网站要实现一个需求:使用图表展示最近五天温湿度等气象要素的曲线变化 具体效果参考:http://www.weatherobserve.com/showInfoIndex.jsp ...

  3. Python检查xpath和csspath表达式是否合法

    在做一个可视化配置爬虫项目时,需要配置爬虫的用户自己输入xpath和csspath路径以提取数据或做浏览器操作.考虑到用户的有时会输入错误的xpath或csspath路径,后台需要对其做合法性校验. ...

  4. [python]爬虫学习(一)

    要学习Python爬虫,我们要学习的共有以下几点(python2): Python基础知识 Python中urllib和urllib2库的用法 Python正则表达式 Python爬虫框架Scrapy ...

  5. 【原】迎接微信winphone 5.0 版本的IE10样式兼容

    微信 Android 5.1 和 iPhone 5.1 已正式发布了,据说本12月底,微信将推出 Winphone 5.0版本,全面支持微信支付,它绑定 IE10 浏览器,那么做微信公众号的 H5 页 ...

  6. 【2016-11-13】【坚持学习】【Day25】【Oracle 查询某一字段最大值】

    partition 分组order by 以哪一个字段排序 select n.* ,row_number()over(partition by n.type order by n.createtime ...

  7. HDU2089 不要62[数位DP]

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. 洛谷P1220关路灯[区间DP]

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  9. 嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞

    目的:同一个时刻,只能有一个应用程序打开我们的驱动程序. ①原子操作: v = ATOMIC_INIT( i )  定义原子变量v并初始化为i atomic_read(v)        返回原子变量 ...

  10. selenium自动化-java-封装断言

    封装的断言. 1 package com.baidu.www; import org.testng.Assert; /* * 封装断言 */ public class assertion { stat ...