`
wangming2012
  • 浏览: 141169 次
  • 性别: Icon_minigender_1
  • 来自: 枣阳
社区版块
存档分类
最新评论

iOS7或以后将不能使用MAC地址生成设备的唯一标识

    博客分类:
  • iOS7
阅读更多

英文原文:In iOS 7 and later, if you ask for the MAC address of an iOS device, the system returns the value 02:00:00:00:00:00. If you need to identify the device, use the identifierForVendor property of UIDevice instead. (Apps that need an identifier for their own advertising purposes should consider using the advertisingIdentifier property of ASIdentifierManager instead.)
翻译:从iOS7及更高版本往后,如果你向ios设备请求获取mac地址,系统将返回一个固定值“02:00:00:00:00:00”,如果你需要识别 设备的 唯一性,请使用UIDevice的identifierForVendor属性。(因广告目的而需要识别设备的应用,请考虑使用 ASIdentifierManager的advertisingIdentifier属性作为替代)

这个MAC地址是指什么?有什么用?
       MAC(Medium/Media Access Control)地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位)。其中,前三个字节是由IEEE的注册管理机构 RA负责给不同厂家分配的代码(高位24位),也称为“编制上唯一的标识符” (Organizationally Unique Identifier),后三个字节(低位24位)由各厂家自行指派给生产的适配器接口,称为扩展标识符(唯一性)。
    MAC地址在网络上用来区分设备的唯一性,接入网络的设备都有一个MAC地址,他们肯定都是不同的,是唯一的。一部iPhone上可能有多个MAC地址, 包括WIFI的、SIM的等,但是iTouch和iPad上就有一个WIFI的,因此只需获取WIFI的MAC地址就好了,也就是en0的地址。
      形象的说,MAC地址就如同我们身份证上的身份证号码,具有全球唯一性。这样就可以非常好的标识设备唯一性,类似与苹果设备的UDID号,通常的用途 有:1)用于一些统计与分析目的,利用用户的操作习惯和数据更好的规划产品;2)作为用户ID来唯一识别用户,可以用游客身份使用app又能在服务器端保 存相应的信息,省去用户名、密码等注册过程。

那么,如何使用Mac地址生成设备的唯一标识呢?主要分三种:
1、直接使用“MAC Address” 
2、使用“MD5(MAC Address)”
3、使用“MD5(Mac Address+bundle_id)”获得“机器+应用”的唯一标识(bundle_id 是应用的唯一标识)

      iOS7之前,因为Mac地址是唯一的, 一般app开发者会采取第3种方式来识别安装对应app的设备。为什么会使用它?在iOS5之前,都是使用UDID的,后来被禁用。苹果推荐使用UUID 但是也有诸多问题,从而使用MAC地址。而MAC地址跟UDID一样,存在隐私问题,现在苹果新发布的iOS7上,如果请求Mac地址都会返回一个固定 值,那么Mac Address+bundle_id这个值大家的设备都变成一致的啦,跟UDID一样相当于被禁用。那么,要怎么标识设备唯一呢?

在iOS系统中,获取设备唯一标识的方法有很多:
一.UDID(Unique Device Identifier)

二.UUID(Universally Unique Identifier) 

三.MAC Address

四.OPEN UDID

五.广告标示符(IDFA-identifierForIdentifier)

六.Vindor标示符 (IDFV-identifierForVendor)

七.推送token+bundle_id

UDID的全称是Unique Device Identifier,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成(越狱的设备通过某些工具可以改变设备的UDID)。移动网络 可利用UDID来识别移动设备,但是,从IOS5.0(2011年8月份)开始,苹果宣布将不再支持用uniqueIdentifier方法获取设备的 UDID,iOS5以下是可以用的。在2013年3月21日苹果已经通知开发者:从2013年5月1日起,访问UIDIDs的程序将不再被审核通过,替代 的方案是开发者应该使用“在iOS 6中介绍的Vendor或Advertising标示符”。所以UDID是绝对不能用啦。

OPEN UDID,没有用到MAC地址,同时能保证同一台设备上的不同应用使用同一个OpenUDID,只要用户设备上有一个使用了OpenUDID的应用存在 时,其他后续安装的应用如果获取OpenUDID,都将会获得第一个应用生成的那个。但是根据贡献者的代码和方法,和一些开发者的经验,如果把使用了 OpenUDID方案的应用全部都删除,再重新获取OpenUDID,此时的OpenUDID就跟以前的不一样。可见,这种方法还是不保险。

广告标示符,是iOS 6中另外一个新的方法,提供了一个方法advertisingIdentifier,通过调用该方法会返回一个NSUUID实例,最后可以获得一个 UUID,由系统存储着的。不过即使这是由系统存储的,但是有几种情况下,会重新生成广告标示符。如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成。关于广告标示符的还原,有一点需要注意:如果程序在后台运行,此时用户“还原广告标示符”,然后再回到程序中,此时获取广 告标示符并不会立即获得还原后的标示符。必须要终止程序,然后再重新启动程序,才能获得还原后的广告标示符。

Vindor标示符,也是在iOS 6中新增的,跟advertisingIdentifier一样,该方法返回的是一个 NSUUID对象,可以获得一个UUID。如果满足条件“相同的一个程序里面-相同的vindor-相同的设备”,那么获取到的这个属性值就不会变。如果 是“相同的程序-相同的设备-不同的vindor,或者是相同的程序-不同的设备-无论是否相同的vindor”这样的情况,那么这个值是不会相同的。

推送token+bundle_id的方法:
1、应用中增加推送用来获取token 
2、获取应用bundle_id 
3、根据token+bundle_id进行散列运算 

apple push token保证设备唯一,但必须有网络情况下才能工作,该方法不依赖于设备本身,但依赖于apple push,而苹果push有时候会抽风的。

UUID是Universally Unique Identifier的缩写,中文意思是通用唯一识别码。它是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指 定。这样,每个人都可以建立不与其它人冲突的 UUID。在此情况下,就不需考虑数据库建立时的名称重复问题。苹果公司建议使用UUID为应用生成唯一标识字符串。

iOS中获取UUID的代码如下: 
-(NSString*) uuid {  
    CFUUIDRef puuid = CFUUIDCreate( nil );  
    CFStringRef uuidString = CFUUIDCreateString( nil, puuid );  
    NSString * result = (NSString *)CFStringCreateCopy( NULL, uuidString);  
    CFRelease(puuid);  
    CFRelease(uuidString);  
    return [result autorelease];  

开发者可以在应用第一次启动时调用一 次,然后将该串存储起来,以便以后替代UDID来使用。但是,如果用户删除该应用再次安装时,又会生成新的字符串,所以不能保证唯一识别该设备。这就需要 各路高手想出各种解决方案。所以,之前很多应用就采用MAC Address。但是现在如果用户升级到iOS7(及其以后的苹果系统)后,他们机子的MAC Address就是一样的,没办法做区分,只能弃用此方法,重新使用UUID来标识。如果使用UUID,就要考虑应用被删除后再重新安装时的处理。

一个解决的办法是:UUID一般只生成一次,保存在iOS系统里面,如果应用删除了,重装应用之后它的UUID还是一样的,除非系统重置 。但是不能保证在以后的系统升级后还能用(如果系统保存了该信息就能用)。

 

 

分享到:
评论

相关推荐

    Delphi跨平台(Win,Android,IOS)获取设备唯一标识符

    本篇文章将深入探讨如何在Delphi中,利用FMX库来获取不同平台设备的唯一标识符以及MAC地址。 首先,我们需要了解在不同平台上设备唯一标识符的概念: 1. iOS:在iOS系统中,通常使用UDID(Unique Device ...

    ios 获取IP Mac地址

    然而,由于隐私和安全考虑,iOS自iOS 7开始就限制了直接获取设备的MAC地址。现在,`CNCopyCurrentNetworkInfo`返回的BSSID并不是真正的MAC地址,而是一个随机生成的值。因此,在iOS上获取设备的物理MAC地址是不可能...

    ios通过BLE读取蓝牙地址

    在iOS平台上,通过Bluetooth Low Energy (BLE) 也就是蓝牙4.0及更高版本,获取蓝牙设备的MAC地址是一项常见的操作。在iOS系统中,苹果为了用户隐私和安全,对直接获取蓝牙设备MAC地址进行了限制。然而,我们仍然可以...

    获取手机唯一标识

    早期,开发者会使用Wi-Fi或蓝牙的MAC地址作为设备标识,但由于MAC地址的可追踪性,Google在Android 6.0以后禁止了在后台获取这些信息。 4. **广告ID(Advertising ID)** Google为广告目的提供了一个可重置的唯一...

    iOS获取设备的唯一标识

    早期开发者也曾尝试通过Wi-Fi或蓝牙获取设备的MAC地址,但由于隐私问题,从iOS 7开始,Apple阻止了这种方式。 6. **自定义解决方案** 鉴于官方API的限制,有些开发者尝试创建自定义解决方案,例如结合多个系统...

    根据mac地址生成固定串号

    在iOS开发中,"根据MAC地址生成固定串号"是一个涉及到设备唯一标识的问题。通常,开发者需要一个标识符来区分不同的设备,以便于数据分析、个性化设置或者应用内数据同步等。在苹果的iOS系统中,`UIDevice`类是提供...

    获取移动设备唯一标识

    4. **MAC Address**:iOS设备的MAC地址不能直接获取,以保护用户隐私。 在实际开发中,为了遵守隐私政策并保证应用的兼容性,开发者通常会结合多种标识符,如IDFV和IDFA,生成一个自定义的设备标识。同时,考虑到...

    读取设备信息 ios

    因此,开发者通常无法直接获取到真实的MAC地址,但可以通过其他方式获取到设备的唯一标识,例如使用Wi-Fi或蓝牙的硬件标识符,不过这些标识符也会受到一定的限制。 尽管如此,如果你的应用确实需要某种形式的唯一...

    快速生成iOS APP全套icon工具(Mac上可运行)

    为了减轻开发者的工作量,"快速生成iOS APP全套icon工具"应运而生,这款工具特别适合Mac用户使用,能快速高效地自动生成符合苹果规范的各种尺寸图标。 该工具的核心功能在于自动化处理图标的设计工作,它能够接受一...

    ios/iphone设备号、识别号

    早期,开发者可以通过获取Wi-Fi或蓝牙的MAC地址来获取设备的唯一标识,但由于隐私原因,iOS 7之后苹果不再允许访问MAC地址。 5. **硬件序列号** 虽然苹果不推荐直接使用,但理论上仍然可以通过某种方式获取到设备...

    swift-iOSApp获取唯一标识符方案

    6. **MAC地址**:iOS 7以后,苹果不再允许访问设备的MAC地址,以保护用户隐私。 7. **UUID(Universally Unique Identifier)**:在iOS 8之后,苹果推荐使用`NSUUID`来创建应用内部的唯一标识符。这个UUID只对单个...

    iOS获取设备唯一标识的8种方法

    在iOS开发中,获取设备唯一标识的目的是为了追踪和区分不同的设备,以便提供个性化服务、数据分析或推送通知。然而,由于隐私保护的原因,苹果不断调整其政策,限制了某些获取设备标识的方法。以下是对8种获取iOS...

    iOS 独立开发者福音,App ICON 生成工具,自动生成所有尺寸的 Icon.zip

    在iOS应用开发中,App Icon是用户界面的重要组成部分,它代表了应用的视觉标识,吸引用户的注意力,并在设备上提供直观的识别。然而,为不同的iOS设备和系统版本准备所有必要的Icon尺寸是一项繁琐的任务,尤其是对于...

    iOS 获取openudid

    这是因为iOS 7之后,苹果限制了对MAC地址的直接访问。接着,这个MAC地址与应用的bundle identifier组合,经过特定的哈希算法(通常是MD5或SHA1)处理,生成一个唯一的字符串。 2. **共享机制**:OpenUDID的另一个...

    获取网卡MAC地址 获取网卡MAC地址

    需要注意的是,有些网络设备或虚拟机可能会使用随机生成的MAC地址,这被称为MAC地址漂移或MAC spoofing,用于增强网络隐私或进行安全测试。此外,由于MAC地址是物理层面的信息,跨越网络时会被网络层协议(如ARP)...

    ios开发获取手机唯一标识符和调用系统打电话拨号功能

    在早期的iOS版本中,开发者可以使用`UDID`(Unique Device Identifier)来获取设备的唯一标识,但出于隐私保护考虑,Apple在iOS 5之后限制了`UDID`的使用。因此,开发者需要寻找其他替代方案。 1. **广告标识符...

    获取iphone设备信息

    1. **openUDID**: 在iOS早期,为了唯一标识设备,开发者常常使用UDID(Unique Device Identifier)。然而,出于隐私考虑,Apple在iOS 5之后限制了对UDID的访问。`openUDID`是当时出现的一种替代方案,它是由OpenUDID...

    ios11.4真机调试包

    5. 验证你的设备,Xcode会自动生成一个描述文件,并将其安装到你的Mac上。 6. 接下来,你需要将“ios11.4真机包”中的11.4 (15F79)文件添加到Xcode的设备列表中。这可能需要手动导入,具体方法是找到设备描述文件,...

    苹果企业级证书申请及使用流程/IOS推送证书创建

    3. 转换p12文件:如果需要在服务器上使用,可以使用openssl命令行工具将.p12文件转换成.pem格式,以便服务器端能读取: ``` openssl pkcs12 -in certificate.p12 -out certificate.pem -nodes openssl pkcs12 -in...

    IOS ionic打包ios文档.docx

    本文档详述了如何将使用AngularJS和Ionic框架开发的前端应用打包成适用于iOS的APP。以下是关键步骤的详细说明: 1. **添加MIME类型**: 在发布应用之前,需要确保服务器支持特定的MIME类型,例如`.ipa`和`.plist`...

Global site tag (gtag.js) - Google Analytics