`
king_tt
  • 浏览: 2289141 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ios设备唯一ID的替换解决方案

 
阅读更多


一.UDID(Unique Device Identifier)
UDID是Unique Device Identifier的缩写,中文意思是设备唯一标识.
在很多需要限制一台设备一个账号的应用中经常会用到,在Symbian时代,我们是使用IMEI作为设备的唯一标识的,可惜的是Apple官方不允许开发者获得设备的IMEI.


ios5 sdk中的获取方法:
[UIDevice currentDevice] uniqueIdentifier]


uniqueIdentifier在UIDevice.h中的定义如下:
@property(nonatomic,readonly,retain) NSString *uniqueIdentifier __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_5_0); // a string unique to each device based on various hardware info.
意思是iOS2.0以上及iOS5.0以下的系统可用,但不建议使用.Apple有可能在ios5.0之后删除该函数.
经过测试,未越狱的iPhone,系统版本为5.0.1,依然可以获取UDID.


但是我们需要注意的一点是,对于已越狱了的设备,UDID并不是唯一的.使用Cydia插件UDIDFaker,可以为每一个应用分配不同的UDID.
所以UDID作为标识唯一设备的用途已经不大了.


二.UUID(Universally Unique Identifier)
UUID是Universally Unique Identifier的缩写,中文意思是通用唯一识别码.
由网上资料显示,UUID是一个软件建构的标准,也是被开源软件基金会(Open Software Foundation,OSF)的组织在分布式计算环境(Distributed Computing Environment,DCE)领域的一部份.UUID的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定.


根据以上定义可知,同一设备上的不同应用的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];
}


虽然UUID是官方提出的一种替代UDID的建议方案,但网上有资料说UUID不能保证在以后的系统升级后(IOS6,7)还能用.


经过我测试目前,UUID在IOS4和IOS5下均可以使用,而且UUID每次生成的值都不一样,需要开发者自行保存UUID.
如果使用UUID为标识保存用户的资料在网络上,当用户重装软件后,UUID的值就可能会发生改变(基本上可说是百分百会发生改变),用户则无法重新下载原来的网络资料.


三.一个可行的解决方案
经过上述的探讨,我们不难发现,无论是使用UDID或是UUID,我们的目的通常都是为了让用户可以自动注册,而不需要账号密码.而使用UDID和UUID作为用户的ID也并不是毫无缺陷.
现在网上有一现成的解决方案,使用设备的Mac地址,因为Mac地址也是唯一的.unix有系统调用可以获取Mac地址.但有些事情需要注意:
1.iPhone可能有多个Mac地址,wifi的地址,以及SIM卡的地址.一般来讲,我们取en0的地址,因为他是iPhone的wifi的地址,是肯定存在的.(例外情况依然有:市面上依然存在一部分联通的阉割版无wifi的iPhone)
2.Mac地址涉及到隐私,不应该胡乱将用户的Mac地址传播!所以我们需要将Mac地址进行hash之后,才能作为DeviceId上传.


关于第一个注意点的问题,经过我测试,没有Wifi功能的iPhone3GS一样可以获得Mac地址,所以这应该是目前标识设备唯一最好的一个解决方案.


解决方案github下载地址https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5
分享到:
评论

相关推荐

    解决xcode 运行不了真机iPhone 15 iOS 17 设备的问题

    本文将深入探讨这个问题,并提供一系列解决方案。 首先,确保你的Xcode版本是最新的。Apple经常更新Xcode以支持新设备和操作系统,因此,如果你的Xcode版本过旧,可能不兼容iOS 17。你可以通过App Store检查并安装...

    微信小程序开发附源码:详解Vue开发微信H5微信分享签名失败问题解决方案.doc

    本文将详细解析这一问题的原因并提供一个简洁的解决方案。 首先,问题的根源在于iOS设备与Android设备在处理Web页面的机制不同。在iOS的微信内置浏览器中,对于单页面应用(SPA)的处理方式不同于安卓,存在缓存问题...

    App Singer(iOS重签名工具)

    App Singer作为一款iOS重签名工具,其功能强大且易于操作,为开发者提供了便捷的解决方案。理解重签名的原理和步骤,以及如何安全地使用App Singer,将有助于提升iOS应用的调试和分发效率。然而,务必遵守苹果的...

    ios自动化批量打包

    鉴于此,采用自动化脚本辅助完成这一系列打包任务成为一种高效解决方案。通过这种方式不仅可以显著提高工作效率,还能够确保打包过程的一致性和准确性,同时减轻人工操作带来的负担。接下来将详细介绍如何通过编写...

    pingpp ios接口文档

    在iOS应用开发中,集成第三方支付接口是常见的需求,Ping++是一个流行的聚合支付服务提供商,提供了包括微信支付、支付宝、银联等多种支付方式的一站式解决方案。本文将深入解析"pingpp ios接口文档",帮助开发者...

    IOS应用源码——跳转到app store的小案例.zip

    通常,这类文档会包含代码的部署步骤、关键类或方法的解释以及可能遇到的问题和解决方案。为了正确理解和利用这个源码,你需要打开这个文件阅读其中的说明,了解源码的工作原理。 最后,`zueos-ZIStoreButton-08ea...

    swizzle 处理一些错误

    标签“IOS Swizzle 数组越界”表明这是专门针对iOS开发中遇到的问题而设计的解决方案。Swizzle虽然强大,但也需要谨慎使用,因为它可能影响到代码的可读性和性能。在实际开发中,应尽量避免直接修改系统库的方法,...

    IOS第三方登录

    它可能包含了具体的SDK文件、示例代码、配置文档等,帮助开发者更好地理解和使用这个第三方登录解决方案。 综合以上信息,iOS第三方登录涉及的知识点包括: 1. **OAuth协议**:大部分第三方登录服务基于OAuth协议...

    一行代码让你的 App 全局替换成 Apple Style 的 Emoji.zip

    然而,开源社区已经提供了许多解决方案来解决这个问题,其中一个就是我们关注的"Emojix"项目。Emojix是一个专门为Android设计的库,它能够帮助开发者轻松地将文本中的Unicode表情符号转换为高质量的Apple Style ...

    ios-SQLite简单使用.zip

    总之,SQLite在iOS应用中提供了一种高效的数据持久化解决方案。通过使用`FMDB`库,开发者可以轻松地执行SQL语句,实现对数据的增、删、改、查操作。对于初学者来说,理解这些基本概念和操作是掌握iOS应用数据管理的...

    swift-IntercomforiOS用于将Intercom集成到您的iOS应用程序中

    总之,Swift-Intercom for iOS提供了一套完整的解决方案,使得开发者能够方便地将Intercom的强大功能整合进iOS应用,从而提升用户体验,增强用户关系管理。通过以上步骤和最佳实践,你可以实现高效的实时通讯和用户...

    iOS-面试宝典3.0.pdf

    请结合RunLoop来谈谈解决方案 可以使用RunLoop来监控下载任务的状态,一旦检测到某个下载任务失败,可以在RunLoop中重新启动该任务,直到成功为止。这种方式可以有效地管理长时间运行的任务,并能及时响应各种事件。...

    微信小程序开发之IOS和Android兼容的问题

    就是new Date(“2017-06-16”) 在IOS会出现NAN的情况所以对于时间转换需要另行封装,解决方案如下 1.替换”-“为”/“ 2.删除”.“后面的字符串(带毫秒也会有问题) 代码如下: /** * 字符串转换为时间 * @...

    ios数据库操作

    总之,SQLite3是iOS应用中常用的数据库解决方案,它的简单性和灵活性使其成为处理小到中等规模数据的理想选择。通过理解SQLite3的基本概念和操作,开发者可以高效地实现数据存储和检索,从而提升应用的性能和用户...

    微信小程序在ios下Echarts图表不能滑动的问题解决

    在微信小程序中,开发者经常遇到的一个问题是iOS设备下Echarts图表无法正常滑动的问题。...当然,对于更复杂的交互需求,可能需要寻找其他解决方案,例如利用微信小程序提供的API进行更深度的交互事件处理。

    videoautoplay:视频自动播放解决方案

    视频自动播放的限制与解决方案IOS微信安卓微信IOS携程安卓携程PC端是否支持支持(有声音)不支持支持(无声音)支持(无声音)支持(无声音)解决方案自动播放默认不播放,用户点击页面任何地方后播放默认静音自动...

    iOS中json解析出现的null,nil,NSNumber的解决办法

    - **NullSafe Category**:这是一个强大的解决方案,通过Category在运行时将`NSNull`对象自动转换为`nil`,无需额外操作。可以在GitHub上找到这个开源库,将其集成到项目中即可。 3. **深入理解JSON结构** JSON...

    增强现实秘笈

    **解决方案:** - 使用`localposition`来调整模型位置。 - 如果通过`position`属性调整模型位置,记得更改模型的`parent`属性以确保正确地继承位置信息。 #### 二、模型抖动问题 **问题描述:** 使用EasyAR时发现...

    IOS json 解析遇到错误问题解决办法

    在iOS开发中,JSON(JavaScript Object Notation)是一种常见的数据交换格式,用于应用程序与服务器之间的通信。然而,处理JSON数据时可能会遇到...希望这个解决方案能对你有所帮助,感谢你对编程知识的关注和支持!

    Unity导出的Xcode工程合并到现有的Xcode项目实现AR流程及合并中遇到的各种问题解决方法,附demo下载地址

    在整合过程中遇到的常见问题及解决方案也已经在文中详细列出。希望这些信息能帮助大家顺利解决问题,并顺利完成项目开发工作。此外,提供的demo下载地址([http://pan.baidu.com/s/1pLcpKpl]...

Global site tag (gtag.js) - Google Analytics