`
zjjzmw1
  • 浏览: 1366428 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

ios udid 替换方案

    博客分类:
  • iOS
阅读更多

转自:http://blog.csdn.net/ygc973797893/article/details/8725039

 

 

iOS 设备ID 完美替代方案 - 亲测

分类: ios开发 1928人阅读 评论(0) 收藏 举报
 

目录(?)[+]

 

背景:

大多数应用都会用到苹果设备的UDID号,UDID通常有以下两种用途:

1)用于一些统计与分析目的;【第三方统计工具如友盟,广告商如ADMOB等】

2)将UDID作为用户ID来唯一识别用户,省去用户名,密码等注册过程。

 

不过,2011年时,苹果就宣布ios5.0以后的系统中将不再支持以下方法获取用户的UDID【苹果设备的唯一识别码】:

[UIDevice currentDevice] uniqueIdentifier];

【注:对于已越狱了的设备,UDID并不是唯一的.使用Cydia插件UDIDFaker,可以为每一个应用分配不同的UDID】

 

同时,苹果公司建议使用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来使用。

问题是如果用户删除该应用再次安装时,又会生成新的字符串,所以不能保证唯一识别该设备。

 

而最近(2012年3月),有消息称苹果应用商店开始拒绝使用UDID的应用上架。

 

替代方案:

现在网上有一现成的解决方案,使用设备的Mac地址,因为Mac地址也是唯一的.unix有系统调用可以获取Mac地址.但有些事情需要注意: 
1.iPhone可能有多个Mac地址,wifi的地址,以及SIM卡的地址.一般来讲,我们取en0的地址,因为他是iPhone的wifi的地址,是肯定存在的.
2.Mac地址涉及到隐私,不应该胡乱将用户的Mac地址传播!所以我们需要将Mac地址进行hash之后,才能作为DeviceId上传.

 

该解决方案源码地址:https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5

该方案提供了两个方法:

uniqueDeviceIdentifier (返回MAC和CFBundleIdentifier的MD5值)
uniqueGlobalDeviceIdentifier(返回MAC的MD5值)

 

使用方法:

#import "UIDevice+IdentifierAddition.h"

NSLog(@"%@",[[UIDevice currentDevice] uniqueDeviceIdentifier]);
NSLog(@"%@",[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier]);

 

测试结果:

WIFI下:

UDID:XXXX21f1f19edff198e2a2356bf4XXXX 
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX 

3G下:

UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX

GPRS下

UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX

飞行模式下:

UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX

删除应用重装后:

UDID:XXXX21f1f19edff198e2a2356bf4XXXX

新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX

 

参考整理自以下网页:

http://stackoverflow.com/questions/6993325/uidevice-uniqueidentifier-deprecated-what-to-do-now

http://www.cocoachina.com/bbs/read.php?tid=92404

 

补充:还有两个比较通用的开源解决方案:

OpenUDID:https://github.com/ylechelle/OpenUDID

SecureUDID:https://github.com/crashlytics/secureudid

背景:

大多数应用都会用到苹果设备的UDID号,UDID通常有以下两种用途:

1)用于一些统计与分析目的;【第三方统计工具如友盟,广告商如ADMOB等】

2)将UDID作为用户ID来唯一识别用户,省去用户名,密码等注册过程。

 

不过,2011年时,苹果就宣布ios5.0以后的系统中将不再支持以下方法获取用户的UDID【苹果设备的唯一识别码】:

[UIDevice currentDevice] uniqueIdentifier];

【注:对于已越狱了的设备,UDID并不是唯一的.使用Cydia插件UDIDFaker,可以为每一个应用分配不同的UDID】

 

同时,苹果公司建议使用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来使用。

问题是如果用户删除该应用再次安装时,又会生成新的字符串,所以不能保证唯一识别该设备。

 

而最近(2012年3月),有消息称苹果应用商店开始拒绝使用UDID的应用上架。

 

替代方案:

现在网上有一现成的解决方案,使用设备的Mac地址,因为Mac地址也是唯一的.unix有系统调用可以获取Mac地址.但有些事情需要注意: 
1.iPhone可能有多个Mac地址,wifi的地址,以及SIM卡的地址.一般来讲,我们取en0的地址,因为他是iPhone的wifi的地址,是肯定存在的.
2.Mac地址涉及到隐私,不应该胡乱将用户的Mac地址传播!所以我们需要将Mac地址进行hash之后,才能作为DeviceId上传.

 

该解决方案源码地址:https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5

该方案提供了两个方法:

uniqueDeviceIdentifier (返回MAC和CFBundleIdentifier的MD5值)
uniqueGlobalDeviceIdentifier(返回MAC的MD5值)

 

使用方法:

#import "UIDevice+IdentifierAddition.h"

NSLog(@"%@",[[UIDevice currentDevice] uniqueDeviceIdentifier]);
NSLog(@"%@",[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier]);

 

测试结果:

WIFI下:

UDID:XXXX21f1f19edff198e2a2356bf4XXXX 
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX 

3G下:

UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX

GPRS下

UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX

飞行模式下:

UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX

删除应用重装后:

UDID:XXXX21f1f19edff198e2a2356bf4XXXX

新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX

 

参考整理自以下网页:

http://stackoverflow.com/questions/6993325/uidevice-uniqueidentifier-deprecated-what-to-do-now

http://www.cocoachina.com/bbs/read.php?tid=92404

 

补充:还有两个比较通用的开源解决方案:

OpenUDID:https://github.com/ylechelle/OpenUDID

SecureUDID:https://github.com/crashlytics/secureudid

 

 
 
 
分享到:
评论

相关推荐

    ios UDID替换方案--真正可行的。OpenUDID

    总结来说,OpenUDID是iOS设备标识的一个历史性的解决方案,它在UDID被禁用后填补了市场空白。然而,随着Apple对用户隐私保护的加强和新标识符的引入,开发者现在有更多的选择,同时也需要面对更复杂的隐私合规问题。...

    XweiUDID:IOS UDID 解决方案

    "XweiUDID"是一个针对这种变化的解决方案,它是由“卖火柴的一点阳光”提供的Objective-C实现,旨在为开发者提供一种类似UDID的功能,以适应iOS的新政策。 首先,我们需要理解为什么需要UDID替代方案。UDID在早期...

    iOS 通过 描述文件获取 UDID

    总的来说,这个示例提供了一个解决方案,允许开发者在iOS 5之后的环境中,通过非官方手段获取UDID并实现数据回传。虽然这种方式在App Store发布的应用中不再适用,但对于企业内部应用或者测试环境,仍然有一定的价值...

    iOS超级签名 udid 个人开发者签名

    在这个话题中,我们将深入探讨如何利用UDID(Unique Device Identifier)和个人开发者账号来实现iOS超级签名。 首先,UDID是每个iOS设备独一无二的标识符,用于区分不同的设备。在iOS 7之后,为了保护用户隐私,...

    iOS 设备唯一标示符(UDID)解决方案 ZKUDIDManager.zip

    iOS 设备唯一标示符(UDID)解决方案 ZKUDIDManager ,ZKUDIDManager是一个开源的基于Keychain和IDFV的iOS设备唯一标示符(UDID...

    iOS7获取UDID、IMEI、SN、ICCID、Mac地址等信息

    在iOS系统中,UDID(Unique Device Identifier)是设备独一无二的标识符,IMEI(International Mobile Equipment Identity)是国际移动设备识别码,SN(Serial Number)是设备序列号,而ICCID(Integrated Circuit ...

    UDID 解决方案 SecureUDID.zip

    UDID 解决方案 SecureUDID ,SecureUDID 是一个开源的基于沙箱机制的 UDID 解决方案,旨在解决苹果因为废弃了 UDI...

    如何获取iOS设备的UDID号

    通过pc电脑,如何利用各种软件,获取iOS设备的UDID号

    获取iOS设备UDID的小程序

    通过这个小程序,可以获取到当前设备的UDID信息,用于广告等业务

    UDID-Grabber:一个抓取 iOS UDID 的工具

    UDID-Grabber 是一个专门设计用于抓取 iOS 设备唯一设备标识符(UDID)的工具,尤其适合在 Heroku 平台上运行。UDID 是每个 iOS 设备上一个唯一的16进制字符串,通常在开发、测试或管理 iOS 应用时需要用到。这个...

    获取iOS设备的UDID

    获取iOS设备的UDID,方便测试,不用上传到app store也可以安装

    udidio-example:iOS 设备的 UDID 注册。 查找 iPhone 的 UDID。 UDID.io使用示例应用

    UDID.io 使用示例 著名的使用移动配置获取 iPhone 和 iPad 的 UDID、IMEI、序列号等。 此存储库包含示例应用程序,它使用“第三方 API”将 UDID.io 用作您网站或移动应用程序的一部分。 API 描述和规范 API 使用 ...

    IOS获取UDIDdemo支持ios7

    这个"IOS获取UDIDdemo支持ios7"的压缩包文件,很可能是提供了一种解决方案,帮助开发者在iOS 7及更高版本中模拟获取UDID的功能。 UDID在早期被广泛用于各种目的,例如设备注册、统计分析、广告追踪等。然而,由于...

    全能签软件源UDID验证+远程公告+远程时间锁+锁库名+远程控制 移动开发 - IOS

    全能签软件源UDID验证+远程公告+远程时间锁+锁库名+远程控制 移动开发 - IOS一、锁定动态库名称、防止二次修改动态库名称,二次修改动态库名称闪退二、软件源远程控制功能:1、软件源后台开启关闭 动态库UDID网络...

    ProPLUG OpenUDID - iOS Unique Identifier Replacement UDID.rar

    这个压缩包文件“ProPLUG OpenUDID - iOS Unique Identifier Replacement UDID.rar”正是为了提供一种开放源码的解决方案,以替代传统的UDID。 首先,我们需要理解UDID是什么。UDID是一个由苹果分配给每个iOS设备的...

    UUID+KeyChain实现iOS唯一标示UDID

    在iOS开发中,由于苹果对用户隐私保护的加强,自iOS 6开始,Apple不再允许开发者直接使用UDID(Unique Device Identifier)来标识设备。UDID是一个设备的全球唯一的序列号,但考虑到用户隐私,苹果引入了新的机制,...

    获取iOS设备的UDID.pages

    获取设备的udid,不用上架app store 也可以安装到手机上

    苹果手机UDID的获取

    UDID(Unique Device Identifier)是苹果设备的一个唯一识别码,用于区分不同的iOS设备。...然而,随着隐私保护意识的增强,开发者应逐渐适应不依赖UDID的解决方案,以适应不断变化的苹果政策和用户需求。

    快速查看UDID

    值得注意的是,自从iOS 7之后,苹果为了加强用户隐私保护,取消了通过官方API直接获取UDID的功能,开发者不再能直接获取UDID,而是转向使用其他替代方案,如使用广告标识符(IDFA)或Vendor ID等。然而,在某些特定...

    苹果开发账户中添加Udid,证书和ipa打包

    该过程主要用于将iOS应用程序安装到自己的iOS设备上测试、或者安装到别人的iOS设备上,或者想发布到App Store中。 一、添加证书 添加证书是制作Profile文件的第一步。首先,需要登录到苹果开发者网站,选择...

Global site tag (gtag.js) - Google Analytics