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 可 ...
随机推荐
- IdentityServer4使用EFCore生成MySql时的小bug
EFCore生成PersistedGrantDbContextModelSnapshot的时候发现 b.Property<string>("Data") .IsRequ ...
- linux操作系统语言更改
有时候我们的服务器在安装时安装的默认语言不支持中文,导致程序.文档中的汉子显示乱码,从而使系统报一些莫名其妙的错误,这是可以更改操作系统的默认语言 1.echo $LANG 查看当前操作系统的语 ...
- 【AtCoder】ARC087
C - Good Sequence 题解 用个map愉悦一下就好了 代码 #include <bits/stdc++.h> #define fi first #define se seco ...
- 006 jquery过滤选择器-----------(可见性过滤选择器)
1.介绍 2.程序 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- P2398 GCD SUM
P2398 GCD SUM一开始是憨打表,后来发现打多了,超过代码长度了.缩小之后是30分,和暴力一样.正解是,用f[k]表示gcd为k的一共有多少对.ans=sigma k(1->n) k*f ...
- 007.MySQL-Keepalived搭配脚本01
vim /etc/keepalived/check_MySQL.sh #!/bin/bash MYSQL=/usr/bin/mysql MYSQL_HOST=localhost MYSQL_USER= ...
- Hashmap jdk7 死循环
如果理解的有问题,欢迎大家指正. https://www.cnblogs.com/webglcn/p/10587708.html jdk7的hashmap 由数组和链表组成,存在几个问题: 当key的 ...
- 命令:man
简介 man命令,是manual的缩写,manual表示手册的意思.通过man命令,可以查询大多数shell外部命令的帮助手册. 语法格式 # man [[section] page ...] ... ...
- rabbitmq学习(四) —— 发布订阅
为了说明这种模式,我们将建立一个简单的日志系统.这个系统将由两个程序组成,第一个将发出日志消息,第二个将接收并处理日志消息.在我们的日志系统中,每一个运行的接收程序的副本都会收到日志消息. 交换器(E ...
- MOXA的Nport5600初始密码
今天第一次弄Nport,看了半天手册没找到初始密码,网上也搜不到,按照说明书上想打电话问问,发现根本是空号... 后来灵感一来试了一下,居然是:moxa