引用地址

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的唯一标识符问题(转)的更多相关文章

  1. IOS - 唯一标识符的获得和更新

    苹果公司不可能让其他人获得个人终端的唯一标识符,所以一个终端给另一个终端发送消息,必须经过苹果的APNS(Apple Push Notification Service)....而且苹果为了防止苹果用 ...

  2. 获取iOS设备唯一标识

    [获取iOS设备唯一标识] 1.已禁用-[UIDevice uniqueIdentifier] 苹果总是把用户的隐私看的很重要.-[UIDevice uniqueIdentifier]在iOS5实际在 ...

  3. iPhone唯一标识符

    为了区分iPhone设备,就要用到iPhone的唯一标识符唯一标识符包括:UDID(唯一设备标识符).identifierForVendor(供应商标识符).advertisingIdentifier ...

  4. 关于IOS的唯一标识总结

    APPLE官方宣布在2013年5月后,使用 UUID的APP将不能通过审核,同时APPLE增加了广告标识符(IDFA)和IDFV. 1.有什么方法获取UUID? //CFUUID CFUUIDRef ...

  5. GUID全局唯一标识符

         全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中. ...

  6. nodejs生成UID(唯一标识符)——node-uuid模块

    unique identifier 惟一标识符        -->> uid 在项目开发中我们常需要给某些数据定义一个唯一标识符,便于寻找,关联. node-uuid模块很好的提供了这个 ...

  7. GUID全局唯一标识符相关知识了解

     全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中.在理想情 ...

  8. 全局唯一标识符(GUID)

    全局唯一标识符,简称GUID(发音为/ˈɡuːɪd/或/ˈɡwɪd/),是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA-106 ...

  9. 高并发 php uniqid 用md5生成不重复唯一标识符方案

    高并发 php uniqid 用md5生成不重复唯一标识符方案uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.uniqid(prefix,more_entropy)prefix 可 ...

随机推荐

  1. TcxGrid 调整列位置的事件

  2. java 重新抛出异常

    一.有时希望把刚捕获的异常重新抛出,尤其时在使用Exception捕获所以异常的时候,既然已经得到了对当前异常对象的引用,可以重新把它抛出: catch(Exception e){ System.ou ...

  3. linux pwd指令C实现

    linux pwd指令C实现 研究实现pwd所需的系统调用 我们可以通过man命令和grep命令来获取我们所需要的系统调用函数信息 man chdir Linux pwd命令用于显示工作目录. 执行p ...

  4. [转] HTML5之FileReader的使用

    HTML5定义了FileReader作为文件API的重要成员用于读取文件,根据W3C的定义,FileReader接口提供了读取文件的方法和包含读取结果的事件模型. FileReader的使用方式非常简 ...

  5. 【LOJ】#2511. 「BJOI2018」双人猜数游戏

    题解 设\(f[p][a][b]\)表示询问了\(p\)次,答案是\(a,b\)是否会被猜出来 然后判断如果\(p = 1\) 第一个问的\(Alice\),那么\([s,\sqrt{nm}]\)约数 ...

  6. 【Atcoder】AGC027 题解

    A - Candy Distribution Again 大意:有x个糖给n个小朋友,必须分完,小朋友得到糖数为一个确切值的时候小朋友会开心,求最多的开心数 题解 直接排序然后贪心分,如果分到最后一个 ...

  7. ionic获取ios唯一设备id的解决方案

    经常有朋友来问这个问题. 每次都去解释这个问题也浪费不少时间, 所以还是开一篇文章, 把这个问题说清楚吧. 先纠正一个误区吧: 有同学可以通过ionic natvie的device插件获取. 我们在文 ...

  8. [Python]conda与 virtualenv虚拟环境配置

    参考: Anaconda使用总结 Anacodna之conda与 virtualenv对比使用教程,创建虚拟环境 conda设置Python虚拟环境 python的virtualenv环境与使用 有时 ...

  9. 电脑同时安装Python2和Python3以及virtualenvwrapper(转)

    电脑同时安装Python2和Python3以及virtualenvwrapper  https://www.jianshu.com/p/d22f19496e03   windows: 1 下载地址:P ...

  10. centos7 静默安装oracle

    系统centos7.4 mini 关闭selinux.firewalld 配置主机名: hostnamectl set-hostname  --static oracle 之前说oracle不认cen ...