引用地址

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. IdentityServer4使用EFCore生成MySql时的小bug

    EFCore生成PersistedGrantDbContextModelSnapshot的时候发现 b.Property<string>("Data") .IsRequ ...

  2. linux操作系统语言更改

    有时候我们的服务器在安装时安装的默认语言不支持中文,导致程序.文档中的汉子显示乱码,从而使系统报一些莫名其妙的错误,这是可以更改操作系统的默认语言 1.echo  $LANG   查看当前操作系统的语 ...

  3. 【AtCoder】ARC087

    C - Good Sequence 题解 用个map愉悦一下就好了 代码 #include <bits/stdc++.h> #define fi first #define se seco ...

  4. 006 jquery过滤选择器-----------(可见性过滤选择器)

    1.介绍 2.程序 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  5. P2398 GCD SUM

    P2398 GCD SUM一开始是憨打表,后来发现打多了,超过代码长度了.缩小之后是30分,和暴力一样.正解是,用f[k]表示gcd为k的一共有多少对.ans=sigma k(1->n) k*f ...

  6. 007.MySQL-Keepalived搭配脚本01

    vim /etc/keepalived/check_MySQL.sh #!/bin/bash MYSQL=/usr/bin/mysql MYSQL_HOST=localhost MYSQL_USER= ...

  7. Hashmap jdk7 死循环

    如果理解的有问题,欢迎大家指正. https://www.cnblogs.com/webglcn/p/10587708.html jdk7的hashmap 由数组和链表组成,存在几个问题: 当key的 ...

  8. 命令:man

    简介 man命令,是manual的缩写,manual表示手册的意思.通过man命令,可以查询大多数shell外部命令的帮助手册. 语法格式 # man [[section] page ...] ... ...

  9. rabbitmq学习(四) —— 发布订阅

    为了说明这种模式,我们将建立一个简单的日志系统.这个系统将由两个程序组成,第一个将发出日志消息,第二个将接收并处理日志消息.在我们的日志系统中,每一个运行的接收程序的副本都会收到日志消息. 交换器(E ...

  10. MOXA的Nport5600初始密码

    今天第一次弄Nport,看了半天手册没找到初始密码,网上也搜不到,按照说明书上想打电话问问,发现根本是空号... 后来灵感一来试了一下,居然是:moxa