iOS 获取设备的唯一标识
有时候,我们需要记录一下设备的唯一标识,比如标识这个设备是不是已经发过促销券了或者是否下载试用过app等等。最简单 的方法就是获取设备的UDID#[UIDevice currentDevice] uniqueIdentifier]#,但是iOS6之后苹果担心泄露用户信息就封掉了这个方法,后来也可以通过mac地址来标记唯一标识#[self macAddress]#,但是没过多久也同样被封掉了。那么现在该通过什么方式来获取唯一标识呢?
DeviceCheck
iOS11之后可以通过DeviceChek(设备检查)来记录设备的标识,这个是Apple官方在iOS11新提供的一个API,可以用来获取当前设备在某个服务器中的状态。
DeviceCheck 允许开发者通过开发者自己的服务器与 Apple 服务器通讯,并为单个设备设置两个 bit 的数据。
简单说,你在设备上用 DeviceCheck API 生成一个 token,然后将这个 token 发给自己的服务器,再由自己的服务器与 Apple 的 API 进行通讯,来更新或者查询该设备的值。这两个 bit 的数据用来追踪用户比如是否已经领取奖励这类信息。
DeviceCheck可以帮助软件开发者们准确记录 iPhone 的 4 种运行状态。比如,某 iPhone 手机在某一个月里免费试使用了一应用软件,这一期间内,“设备检查(DeviceCheck)”将手机状态记录为“状态 A ”。试用期之后,用户停止该免费软件的使用,“设备检查(DeviceCheck)”会将此时的设备情况记录为“状态 B ”。在此之前,如果只是将这个标识卸载app的沙盒内,只要用户对 iPhone 进行软件删除或初始化操作后,该状态下的手机数据会被系统尽数删除,当再次使用该软件时,手机将显示为初次使用的试用期状态。所以开发是没有办法去真正记录这个状态的。而DeviceCheck是将这个标识放到了apple服务器,即使对手机进行删除软件,或初始化操作,设备检查DeviceCheck程序都可以通过连接 Apple 服务器来检查手机的各种状态数据。所以可以很好的解决这个问题,从而避免手机陷入再次试用软件的麻烦中。
但是,在二手的 iPhone 手机中却再次产生问题。无论初次使用的是何种软件,免费试用阶段结束后、仅限新用户享用的优惠条款将无法供手机的新主人再次使用。即使对 iPhone 进行初始化操作,手机也会默认保存各项数据,转让与出售并不会改变 iPhone 的使用状态。
FCUUID
我们通过DeviceCheck可以很好的记录下设备唯一标识符,但是这只能局限于iOS11之后,这明显是不够的。那么还有什么办法标记吗?可以通过FCUUID。
FCUUID是通过将特定的标识符保存在keychain(钥匙串)来实现的,所以当用户抹掉整个手机的内容时,这个唯一标识也会发生变动,但这也可以满足大部分app的使用场景了。同时FCUUID可在同个开发者账号下,同个App group间进行共享,即同一个appGroup下的不同app可以获取到同一个标识符。另外FCUUID也能使用iCloud机制进行辅助,提供甄别的精度。
使用方法详见github,下面是它提供的一些方法:
// 每次运行应用都会变
+(NSString *)uuid; //changes each time (no persistent), but allows to keep in memory more temporary uuids
+(NSString *)uuidForKey:(id<NSCopying>)key; // 每次运行应用都会变
+(NSString *)uuidForSession; // 重新安装的时候会变
+(NSString *)uuidForInstallation; // 卸载后重装会变
+(NSString *)uuidForVendor; // 抹掉iPhone的时候才会变,适合做唯一标识
+(NSString *)uuidForDevice;
广告标识符【慎用】
除了上面两个方法外,也可以通过广告标识符来实现标记设备。但是如果使用广告标识符,则需要在上架审核的时候在相关广告标识符的问题中如实回答,否则可能会导致app审核被拒。
作用域:所有App共享同一个标识符,即设备上所有的app获取的广告标识符为同一个。
[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
而且在使用中,也有两个问题需要注意,一个是用户可以在 通用设置->隐私->广告->重置广告id,这就导致了广告标识符发生了变化,而第二个就是可能会有用户在隐私设置里“限制广告追踪”,这就导致了广告标识符被禁掉了,所以需要注意一下。
iOS 获取设备的唯一标识的更多相关文章
- 设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识 zz
原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
- [转]设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识
原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
- 获取设备的唯一标识uuid
摘自:http://blog.sina.com.cn/s/blog_5971cdd00102vqgy.html -(NSString*) uuid { CFUUIDRef puuid = CFUUID ...
- iOS开发之 -- 获取设备的唯一标示符
各种获取设备唯一标识的方法介绍 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,它就是苹果iOS设备的唯一识别码,它 ...
- Android开发 - 获取Android设备的唯一标识码(Android 6.0或更高)
在我们的APP开发中,通常需要获取到设备的唯一标识.在Android6.0之前,有很多方法我们可以方便获取到硬件的唯一标识,但是在Android6.0之后,Android系统大幅限制了我们获取设备的硬 ...
- iOS获取设备唯一标识的8种方法
8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?
一.UDID (Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和 ...
- ios获取设备信息总结
1.获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名 ...
- ios 获取设备相关的信息
.获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名称 NSStr ...
随机推荐
- LibreOJ #6212. 「美团 CodeM 决赛」melon
二次联通门 : LibreOJ #6212. 「美团 CodeM 决赛」melon /* LibreOJ #6212. 「美团 CodeM 决赛」melon MDZZ 这是决赛题?? */ #incl ...
- python时间序列数据的对齐和数据库的分批查询
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 0. 前言 在机器学习里,我们对时间序列数据做预处理的时候,经常会碰到一个问题:有多个时间序列存在多个表里,每个表的的时间轴不完全相同,要如 ...
- Vue中的$emit组件事件运用
话不多说上代码 vue>src>App.vue <template> <div id="app"> <!-- header --> ...
- AWS服务器上安全组端口设置和访问的问题
在搭建测试环境时使用AWS服务器环境,AWS EC2需要设置安全组开放端口,如果端口未进行授权则不允许访问,后台授权界面如下: 1.查看某个端口是否在AWS后台被开放,并允许访问: netstat - ...
- FCS省选模拟赛 Day3
Description Solution T1 game 咕咕咕 T2 string fail树各个节点的深度之和怎么求? 我们考虑每个前缀的深度是什么 发现这个值就相当于有多少个前缀等于它的后缀 ...
- 深入理解document.referrer的用法
前言 在JavaScript中,document对象有很多属性,其中有3个与对网页的请求有关的属性,它们分别是URL.domain和referrer. URL属性包含页面完整的URL,domain属性 ...
- Linux 搜索查找类指令
一.find 指令 find 指令将从指定目录向下递归遍历其各子目录,将满足条件的文件或者目录显示在终端. 基本语法 find [搜索范围] [选项] 选项说明 -name ...
- !!a标签和button按钮只允许点击一次,防止重复提交
button 方法:加上属性disabled = “disabled” 或者 disabled = “true” <button id="btn" disabled=&quo ...
- 乌龙茶生产过程中挥发性成分吲哚的形成 | Formation of Volatile Tea Constituent Indole During the Oolong Tea Manufacturing Process
吲哚是啥?在茶叶成分中的地位?乌龙茶?香气,重要的前体,比如色氨酸Trp.IAA. Indole is a characteristic volatile constituent in oolong ...
- GRU和LSTM比较
比较: https://www.jianshu.com/p/3774d46b665e https://blog.csdn.net/sinat_33741547/article/details/8282 ...