IOS的唯一标识符问题(转)
引用地址
http://www.zhihu.com/question/22599526/answer/21938878
网上搜了下IOS手机标志的种类,直接引用过来。
UDID
[[UIDevice currentDevice] uniqueIdentfier]
iOS官方最早提供的UDID方案,根据某一公式,使用设备序列号、网卡地址等信息作为参数计算而来,iOS6之后该计算公式发生了改变。
该方法返回的结果在所有应用中都相同,并且卸载应用、刷机、还原设备均不会发生改变,是最为准确的设备唯一标示符。
iOS5之后,该方法被标记为废弃!最终,在2013年5月1号之后,AppStore禁止任何使用该方法的应用上架。
iOS7中对外公开的API中已经移除了该方法!
网卡地址
通过Unix级别的API去获取Wifi的网卡地址。
该方法属于UDID替代方案中最为准确的一种,因为网卡地址不会因为刷机、还原设备而发生改变。故追求唯一性的厂商多选择此种方案!
在iOS7之后,应用已经无法获取网卡地址,所以该方案在iOS7中也已经被废弃。
OpenUDID
开源的一个UDID替代方案,原理是利用应用间的剪贴板共享和本地一些必要的缓存信息,让多个应用间共享一个UUID。
OpenUDID在官方废弃UDID接口之后,受到广泛的欢迎!可以说是现在大多数应用的UDID替代方法。
OpenUDID在刷机、还原设备后就会产生新的UDID,事实上,由于剪贴板的特殊性,如果所有使用了OpenUDID的应用被全部卸载之后,再次安装的应用取到的OpenUDID将会是一个全新的值!
iOS7中,不同组的应用(即不同厂商)的应用之间不再能共享剪贴板间的数据!
同组(即同一厂商)应用的定义为:Info.plist中关于软件唯一标示符的字段CFBundleIdentifier中的前两段标识符(例如com.mycompany)相同。
固在iOS7中,OpenUDID也将慢慢失去它的意义。
保存在NSUserDefault中的UUID
在iOS5将UDID标为废弃之后,官方提供的替代方案。即使用CFUUIDCreate生成一个UUID,并将之保存在NSUserDefault中,用它作为设备标识符。在iOS6之后,苹果更推出NSUUID来替代CFUUIDCreate,但本质是一样的。
UUID每次都会生成一个新的字符串,也就是说应用被卸载之后,就会被认为是一个新的设备,更不用提刷机、还原设备了。
故基本无人采用UUID的方案。
厂商唯一标识符identifierForVender
[[UIDevice currentDevice] identifierForVender]
iOS6中推出的UDID替代方案,该方法对于同一厂商的应用返回相同的值,不同厂商所得到的值不同。
该方案刷机、还原设备后,获得值将会改变。同样注意的是:如果同一厂商安装的所有应用都被卸载后,新安装的同一厂商的应用同样也将获得新的值,而不是原来的值!
由于不能跨厂商,并且软件卸载后再安装有改变的可能性,该方案也并没有被广大开发商接受。
广告标识符advertisingIdentifier
[[ASIdentifierManager sharedManager] advertisingIdentifier];
iOS6
中推出的另一款UDID替代方案,该方法对所有厂商的应用返回相同的值。同样提供的是另一个
API,advertisingTrackingEnabled,该参数表示用户是否希望广告追踪被限定,但该参数仅仅是个布尔值,用于表示用户意愿,不
影响advertisingIdentifier的读取。该方法由于是官方提供的,并且所有厂商的应用取到的值相同,所以相对接受度好些,但是由于仅在iOS6上适用,所以更多人还是选择了OpenUDID的方案。
该方法刷机、还原设备后,获得的值将会改变。此外,用户如果通过设置->关于本机->广告->还原广告标识符,就可以重新生成一个新的值。
该方法是iOS7上目前官方允许的范畴内最为可接受的方案。
IMEI
iOS官方API无法获得IMEI,或者说禁止获取。故很少有人在iOS上去读取IMEI。但IMEI作为设备唯一标识符是最为准确的方法之一!不会随着刷机、还原设备而改变!
读取IMEI的应用将会被AppStore拒绝!
同样类似的方案有蓝牙地址、iOS设备序列号(SerialNumbedr)等等。
以上说了一大堆,无非一句话:在Apple官方文档API中,获取的唯一标识符无法做到真正标识一部iphone。
既然如此,那么IOS开发者是如何标识一部iphone呢?因人而异!
不同的开发商采用的标识策略不尽相同。如果你想伪造通过伪造标识符来达到一部新手机的假象,那你得知道他们是通过哪些东西来唯一标识手机。
举个栗子,前段时间电信某软件通过短信分享好友就可以获得2元话费,就用了手机号的标识(更多的内容不能再说了)。想要获得新的优惠,就得用新的手机号,难道你想伪造手机号?但凡涉及到真金白银的优惠,开发商不会轻易被钻空子的。
当
然世事无绝对,何况区区一个手机标识符。如果你是一个高高高高高手,连伪造手机号可能都不在话下,那你一定不屑于为了那一丢丢优惠,浪费分分钟几十万上下
的宝贵时间吧;如果你是一个菜菜菜菜菜鸟,花了一年时间终于研究出某软件优惠活动的破解方法,结果优惠期已经结束,软件也更新了版本,采用不同的标识策
略,一年的研究又白费了(如果你因此成为高端洋气、人见人爱的程序猿则另当别论→_→ )。so,还不如好好学习努力赚钱来的实惠。
=============================UPDATE===============================
又看了遍题目,对题主“好多手机App都对初次注册用户有优惠“有疑义。自动脑补遍此类软件,题目应该改成”App安装首次注册才有优惠“,如:
1、易信:安装后,用手机号注册,收到手机验证码绑定手机,即送300M流量;
2、友宝客户端:同易信,安装并绑定手机号,送免费饮料;
3、天翼副号:分享到短信助手,送2元话费(同样是需要和手机号绑定);
4、微信:每个微信号绑定一个银行卡,就能获得某商城的购物优惠;* 第4点微信绑定银行卡:相当于注册一张新的银行卡到微信中,可以看做银行卡在微信中的首次注册;
所以题主说的”安装即有优惠”并不成立,需要安装并且首次注册绑定唯一用户标识(注意:不是标识唯一手机标识),如手机号、身份证号、银行卡等,才能得到新的优惠。这样一来问题就简单了许多:如果你能伪造唯一用户标识,就能拿到新的优惠。
了解了这些内容,再回头看看题主提出的各个方法,很明显不能成功。
* 拔掉手机卡:如果软件注册要绑定手机号,拔了手机卡,则注册不成功,得不到优惠;
* 不装软件blablablabla……:这些东西是哪跟哪儿啊?
* 修改MAC地址:不是唯一用户标识,同样不起效果,没有优惠;看了上面解答,题主应该明白,软件的优惠和手机的唯一标识符无关,和唯一用户标识有关。
修改手机唯一标识符的方法;而修改唯一用户标识的方法,额额,等等,你要改身份证、银行卡之类的信息?嗯,有办法,学校的厕所有办证电话,一条龙服务 →_→上面说了这么多内容都和手机的唯一标识符无关,大家可能会有一个疑惑:手机的唯一标识符可以拿来做什么?
几乎所有的软件开发商都通过手机唯一标识符,统计下载量、新增用户、活跃用户等等,没了这个标识符,就没有各个app渠道的下载量排行榜,软件开发商也没法针对软件做一些用户分析,重要性就不消说了吧。
嗯!我终于贡献了有点意义的答案,快来赞我吧~~~~~~~~~
IOS的唯一标识符问题(转)的更多相关文章
- IOS - 唯一标识符的获得和更新
苹果公司不可能让其他人获得个人终端的唯一标识符,所以一个终端给另一个终端发送消息,必须经过苹果的APNS(Apple Push Notification Service)....而且苹果为了防止苹果用 ...
- 获取iOS设备唯一标识
[获取iOS设备唯一标识] 1.已禁用-[UIDevice uniqueIdentifier] 苹果总是把用户的隐私看的很重要.-[UIDevice uniqueIdentifier]在iOS5实际在 ...
- iPhone唯一标识符
为了区分iPhone设备,就要用到iPhone的唯一标识符唯一标识符包括:UDID(唯一设备标识符).identifierForVendor(供应商标识符).advertisingIdentifier ...
- 关于IOS的唯一标识总结
APPLE官方宣布在2013年5月后,使用 UUID的APP将不能通过审核,同时APPLE增加了广告标识符(IDFA)和IDFV. 1.有什么方法获取UUID? //CFUUID CFUUIDRef ...
- GUID全局唯一标识符
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中. ...
- nodejs生成UID(唯一标识符)——node-uuid模块
unique identifier 惟一标识符 -->> uid 在项目开发中我们常需要给某些数据定义一个唯一标识符,便于寻找,关联. node-uuid模块很好的提供了这个 ...
- GUID全局唯一标识符相关知识了解
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中.在理想情 ...
- 全局唯一标识符(GUID)
全局唯一标识符,简称GUID(发音为/ˈɡuːɪd/或/ˈɡwɪd/),是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA-106 ...
- 高并发 php uniqid 用md5生成不重复唯一标识符方案
高并发 php uniqid 用md5生成不重复唯一标识符方案uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.uniqid(prefix,more_entropy)prefix 可 ...
随机推荐
- java 轨迹栈
printStackTrace()方法所提供的信息可以通过getStackTrace()方法直接访问. getStackTrace()方法返回一个由根轨迹中的元素所构成的数组,每一个元素都表示栈中的一 ...
- 3种高效的Tags标签系统数据库设计方案分享
需求背景 目前主流的博客系统.CMS都会有一个TAG标签系统,不仅可以让内容链接的结构化增强,而且可以让文章根据Tag来区分.相比传统老式的Keyword模式,这种Tag模式可以单独的设计一个Map的 ...
- poj 2524 求连通分量(并查集模板题)
求连通分量 Sample Input 10 91 21 31 41 51 61 71 81 91 1010 42 34 54 85 80 0Sample Output Case 1: 1Case 2: ...
- LINUX的STRACE命令用法 [转]
调用:strace [ -dffhiqrtttTvxx ] [ -acolumn ] [ -eexpr ] ...[ -ofile ] [ -ppid ] ... [ -sstrsize ] [ -u ...
- 高能天气——团队Scrum冲刺阶段-Day 5
高能天气--团队Scrum冲刺阶段-Day 5 今日完成任务 于欣月:基本实现计步器功能:现阶段实现了每天进行步数统计并显示,计划实现历史步数统计和设置锻炼计划功能,并实现可视化图形界面 余坤澎:实现 ...
- 006.Zabbix添加监控主机
一 配置步骤和流程 Zabbix完整的监控配置流程可以简单的描述为: Host groups(主机组)---->Hosts(主机)---->Applications(监控项组)----&g ...
- 读研 or 工作?对计算机类专业学习的看法
先来介绍一下自己 中南大学(不知名985双一流 A 类)大二计算机专业本科生,才学编程1年多一点.大一的时候搞了大半年 ACM,现在慢慢转向项目开发(在学习 JAVA 开发,U3D 和 C#),同时在 ...
- shell 父子传值
通过一个中间文件进行: #!/bin/bash ( subvar="hello shell" echo "$subvar" > temp.txt ...
- python 实现结构体
# python 使用类创建结构体 class Myclass(object): class Struct(object): def __init__(self, name, age, job): s ...
- Linux下实现自动设置SSH代理
SSH的巨大价值体现在能够配置为代理服务器上.不像在Windows下每次还需要手动登录设置,Linux有很好的工具链能够实现自动设置SSH代理,就是expect和ssh的联合使用,再加上proxych ...