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渠道的下载量排行榜,软件开发商也没法针对软件做一些用户分析,重要性就不消说了吧。

嗯!我终于贡献了有点意义的答案,快来赞我吧~~~~~~~~~

目录
相关文章
|
Web App开发 XML Java
通过Safari浏览器获取iOS设备UDID(设备唯一标识符)
摘要:通过苹果Safari浏览器获取iPhone UDID步骤详解:苹果公司允许开发者通过IOS设备和Web服务器之间的某个操作,来获得IOS设备的UDID(包括其他的一些参数)。 通过苹果Safari浏览器获取iPhone UDID步骤详解: 一、获得UDID通过移动Safari概述: 苹果公司允许开发者通过IOS设备和Web服务器之间的某个操
4235 0
|
Web App开发 XML PHP
通过Safari与mobileconfig获取iOS设备UDID(设备唯一标识符)
科普:UDID 是由子母和数字组成的40个字符串的序号,用来区别每一个唯一的iOS设备,包括 iPhones, iPads, 以及 iPod touches 随着苹果对程序内获取UDID封杀的越来越严格,私有api已经获取不到UDID,Mac地址等信息,继而出现了使用钥匙串配合uuid等等方法变相实现 由于近期项目需求是设备授权的形式使用软件,使用钥匙串等方法不完全能解决问
5911 0
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
110 1
|
1月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
1月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
63 1
|
9天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
28 9
|
8天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
6天前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。
|
9天前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!