前言

目前市面应用普遍采用用户体验,涉及到部分重要功能时候才提醒用户注册账户,而用户之前的操作,比如收藏,点赞,关注等内容需要同时关联进注册的账户,那么根据什么记录用户的操作信息就尤为重要。下面就列出我之前收集资料总结的方案。

UDID

UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可以改变设备的 UDID),移动网络可以利用 UDID 来识别移动设备。
许多开发者把 UDID 跟用户的真实姓名、密码、住址、其它数据关联起来,网络窥探者会从多个应用收集这些数据,然后顺藤摸瓜得到这个人的许多隐私数据,同时大部分应用确实在频繁传输 UDID 和私人信息。 为了避免集体诉讼,苹果最终决定在 iOS 5 的时候,将这一惯例废除。
现在应用试图获取 UDID 已被禁止且不允许上架。

MAC 地址

MAC(Medium / Media Access Control)地址,用来表示互联网上每一个站点的标示符,是一个六个字节(48位)的十六进制序列。前三个字节是由 IEEE 的注册管理机构 RA 负责给不同厂家分配的”编制上唯一的标示符(Organizationally Unique Identifier)”,后三个字节由各厂家自行指派给生产的适配器接口,称为扩展标示符。
MAC 地址在网络上用来区分设备的唯一性,接入网络的设备都有一个MAC地址,他们肯定都是唯一的。一部 iPhone 上可能有多个 MAC 地址,包括 WIFI 的、SIM 的等,但是 iTouch 和 iPad 上就有一个 WIFI 的,因此只需获取 WIFI 的 MAC 地址就好了。一般会采取 MD5(MAC 地址 + bundleID)获取唯一标识。
但是 MAC 地址和 UDID 一样,存在隐私问题, iOS 7 之后,所有设备请求 MAC 地址会返回一个固定值,这个方法也不攻自破了。

OpenUDID

UDID 被弃用后,广大开发者需要寻找一个可以替代的 UDID,并且不受苹果控制的方案,由此,OpenUDID 成为了当时使用最广泛的开源 UDID 代替方案。OpenUDID 利用一个非常巧妙的方法在不同程序间存储标示符:在粘贴板中用了一个特殊的名称来存储标示符,通过这种方法,其他应用程序也可以获取。
苹果在 iOS 7 之后对粘贴板做了限制,导致同一个设备上的应用间,无法再共享一个 OpenUDID。

UUID + 自己存储

UUID(Universally Unique IDentifier),通用唯一标示符,是一个32位的十六进制序列,使用小横线来连接:8-4-4-4-12,通过 NSUUID(iOS 6 之后)[NSUUID UUID].UUIDString 或者 CFUUID(iOS 2 之后) CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, CFUUIDCreate(kCFAllocatorDefault))) 来获取,但是每次获取的值都不一样,需要自己存储。

推送 token + bundleID

推送 token 保证设备唯一,但是必须有网络情况下才能工作,该方法不依赖于设备本身,但依赖于 apple push,而 apple push 有时候会抽风的。

IDFA

IDFA-identifierForIdentifier(广告标示符),在同一个设备上的所有 APP 都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设定的。虽然 iPhone 默认是允许追踪的,而且一般用户都不知道有这么个设置,但是用户可以在 设置 - 隐私 - 广告追踪 里重置此 ID 的值,或者限制此 ID 的使用,所以有可能会取不到值。

IDFV

IDFV-identifierForVendor(Vendor 标示符),通过 [UIDevice currentDevice].identifierForVendor.UUIDString 来获取。是通过 bundleID 的反转的前两部分进行匹配,如果相同是同一个 Vendor ,例如对于 com.mayan.app_1 和 com.mayan.app_2 这两个 bundleID 来说,就属于同一个 Vendor ,共享同一个 IDFV,和 IDFA 不同的是,IDFV 的值一定能取到的,所以非常适合于作为内部用户行为分析的主 ID 来识别用户。但是用户删除了该 APP ,则 IDFV 值会被重置,再次安装此 APP ,IDFV 的值和之前的不同。

IDFV + keychain

通过以上几种存储唯一标识的方法分析,总结一下各有优劣。很多方法被苹果禁止,或者漏洞太多,越来越不被开发者利用,现在苹果主推IDFA和IDFV这两种方法,分别对外和对内,但是IDFV在App重新安装时候会被更改,所以我的方法是通过第一次生成的IDFV存储到keychain中,以后每次获取标识符都从keychain中获取。注意:keychain在iOS 7之后开放给开发者,但是在iOS 10中默认是关闭的,需要开发者手动打开。

iOS获取设备唯一标识相关推荐

  1. iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?

    http://www.ithao123.cn/content-8688001.html iOS获取设备唯一标识的各种方法?IDFA.IDFV.UDID分别是什么含义? [摘要:1.UDID (Uniq ...

  2. swift获取openuuid_iOS获取设备唯一标识:UDID、IDFA、IDFV、OpenIDFA、SimulateIDFA等.

    1. UDID UDID全称是Unique Device Identifier,顾名思义,它就是苹果iOS设备的唯一标识码,它由40个字符的字母和数字组成.在很多需要限制一台设备一个张红的应用中经常会 ...

  3. 跨平台应用开发进阶(六十):uniapp 获取设备唯一标识信息

    文章目录 一.前言 二.其他方案 2.1 调用原生 2.2 插件调用 2.2.1 Ba-IdCode 2.2.2 KeyChain 三.实施方案 四.拓展阅读 一.前言 应App个人信息保护与安全要求 ...

  4. android设备udid,Android下获取设备唯一标识(UDID, DeviceID)

    android下获取设备唯一标识原本非常简单(至少不会像iOS一样禁用这个,禁用那个),但是由于设备的多样性需要考虑的东西也对应复杂起来. 先附上完整代码 protected static final ...

  5. 获取android设备唯一编号_android获取设备唯一标识完美解决方案的思考以及实现方式...

    关于Android设备唯一标识符号 前言 由于在开发中需要开发游客模式,在用户没有登录的情况下必须确保设备的唯一性,于是惯性思维想到的肯定是使用DevicesId 来作为设备的唯一标识,用以代替用户登 ...

  6. android获取设备唯一标识完美解决方案

    转自:https://blog.csdn.net/aa1733519509/article/details/50053553 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码. ...

  7. android设备id完美解决方法,安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题...

    一,先说获取渠道名(这里以友盟为例) /* * 4.5.1新加渠道名字段,用来传给后台去统计各个渠道下载量 * */ public static String getSource() { //获取渠道 ...

  8. android获取设备唯一标识_数据埋点:用户唯一标识

    用户唯一标识,是用户唯一的身份ID,相同的身份ID,就会被当做是相同的一个用户. 01 为什么要建设用户唯一标识 如何区分某个用户就是他这个用户,而不是另一个用户,在数据埋点中,是一个非常重要的事情. ...

  9. Android 获取设备唯一标识

    一.背景 项目开发中,多少会遇到这种需求:获得设备唯一标识DeviceId,用于标识一个唯一的设备,做数据精准下发或者数据统计分析. 这类文章,网上有许多资料,例如:使用IMEI.MAC等作为设备标识 ...

最新文章

  1. 2020-mb面试指南_2020年最佳代码面试准备平台
  2. Python多分类问题下,micro-PR计算以及macro-PR计算
  3. 详解@EnableEurekaServer和@EnableDiscoveryClient 或 @EnableEurekaClient注解
  4. FFmpeg视频转码技巧之-crf参数(H.264篇)
  5. 为什么要将对象序列化
  6. Spring @Value 设置默认值
  7. 2021重庆黔江中学高考成绩查询,2020年重庆黔江三所高中排名公告
  8. 实时监听input输入框value的变化:
  9. opencv实战3: CascadeClassifier+Haar特征进行人脸检测
  10. 【python之路10】python实例练习
  11. DICOM中的入门概念
  12. 2020年最新 java JDK 11 下载、安装与环境变量配置教程
  13. win32画窗体背景
  14. 安卓miracast花屏_手机投屏电视频繁断开的解决办法
  15. 输入分数,判断成绩等级(使用if和switch两种方法)
  16. Google新的搜索页面
  17. ubuntu 调 2K 分辨率
  18. 逃离美国,跨越8000公里远程办公,他开发了世界上最强的虚拟机
  19. 电脑电源怎么选择,备战40系功耗升级之战
  20. windows中快捷键和windows运行中命令

热门文章

  1. 树莓派Raspberry Pi 4B安装Pytorch1.6+torchvision0.8
  2. HTML,CSS,JS(Day35)----你画我猜小游戏
  3. word的工具栏消失怎么办
  4. Video Object Segmentation with Adaptive Feature Bank and Uncertain-Region Refinement论文解读和代码实践
  5. 小红书timestamp2
  6. OBS录制全屏游戏的方法(超好录屏)
  7. 前端开发入门--html--Flask
  8. 华科计算机学院和网安学院区别,华科网络安全和武大网络安全到一起,国家网安学院迎来首批学子入学...
  9. python xlwings Excel 内容截图
  10. 为什么那么多家长选择童年汇