DeviceId

iOS App获取唯一标识符方案

Posted by kunnan on June 4, 2018

前言

  • iOS App获取唯一标识符方案原理
是否刷机/还原 是否卸载重装APP 获取方式及优先级
MFSCache、NSUserDefaults
KeyChain、Safari Cookie、iCloud、IDFA、IDFV、NSUUID
iCloud、IDFA、IDFV、NSUUID
多个app通过cookie能保持deviceid共享,获取到唯一deviceid。
  • 比较重要的就是加密解密部分,如果加密不靠谱或者已经泄露,deviceid可能会被随意改动。
将deviceId加密(最好2种加密方式)后保存到本地的2个地方,需要的时候取出来对比,相同证明没有篡改(全部被篡改就证明你的App太不安全了)直接使用,不同则使用KeyChain或者其他的方法获取并保存本地。
  • CocoaPods
pod 'MFSIdentifier', '1.0.2'
安装
pod install
  • Carthage
编辑Cartfile
github "maxfong/MFSIdentifier" >= 1.0.2
安装
carthage update
  • 使用Framework,工程Other Linker Flags需添加-ObjC

注意

  • Safari Cookie支持需iOS9.0及以上。
  • 可设置[MFSCacheUtility registerAESKey:],其他应用获取了Cookie也无法正确解密
  • 刷机后能获取相同标识符需开启iCloud
1) 是否在App Store下载:一般是应用内添加refid标识对应渠道

你自己定义的,比如App Store为10000,PP助手为10001等等,iOS应用 大部分都是App Store下载,小渠道或者越狱取到的量很少的

2)是否越狱:这个能查得到
3)是否第一次下载:现在KeyChain可用,所以查询存储在KeyChain的数据,存在则表示不是第一次安装,集合iCloud刷机也能判断
4)是否删除后下载:添加校验逻辑,给应用累加一个标识符,再根据是否第一次下载判断是否重新安装
5)如果是当前手机:可以根据Telephony、屏幕分辨率、以及设备名称等,再根据存储的标识符做校验
6)当前的账号都是第一次下载:以上问题都解决,这个也就知道了
7)KeyChain不可用时,可用Safari Cookie、iCloud替代
ps:很多这类应用会有一个企业助手,可调用的私有API的

II、KeychainItemWrapper+MD5Generator

  • openUDID & KeychainItemWrapper+MD5Generator
  • 对单独的.m 添加参数:-fno-objc-arc

See Also

应用试客(iTry.com)

钱咖简介

钱咖是一家纯移动互联网公司,是一款通过手机试玩应用免费赚钱的应用,目前支持苹果与安卓版(通过手机浏览器访问qianka.com下载),目前月流水超千万、iOS用户超2000万、微信服务号关注超600万。

做任务不能关闭app: 
绑定你的账号和设备
  • safari : 抢任务-》获取关键词,app(具体的任务页面)-》领取任务、奖励
//具体的任务页面: 检测助手是否打开
1) 前往app store
2)开始试完,打开《宝宝亲》app,宝宝亲会直接打开对应的”任务app“
-- 这个过程有通信流程
3) 领取奖励-〉 判断时间,继续试完-》 完成任务
4) 取消任务
  • 证书安装
安装证书: 确保设备唯一性: push,获取设备ID,设备注册质询:加密的描述文件服务
签署证书: 
  • 绑定手机号码否则,无法保存收益

other

/** 升级后获取设备标识符
 safariCookie -> cacheManager -> iCloud -> IDFA -> IDFV -> pushToken
 iCloud支持需开启Key-value storage
 */
+ (NSString *)deviceId;
/Users/devzkn/bin/knpost DeviceId iOS App获取唯一标识符方案 -t objc
#原来""的参数,需要自己加上""

转载请注明: > DeviceId