背景:
大多数应用都会用到苹果设备的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
相关推荐
总结来说,OpenUDID是iOS设备标识的一个历史性的解决方案,它在UDID被禁用后填补了市场空白。然而,随着Apple对用户隐私保护的加强和新标识符的引入,开发者现在有更多的选择,同时也需要面对更复杂的隐私合规问题。...
"XweiUDID"是一个针对这种变化的解决方案,它是由“卖火柴的一点阳光”提供的Objective-C实现,旨在为开发者提供一种类似UDID的功能,以适应iOS的新政策。 首先,我们需要理解为什么需要UDID替代方案。UDID在早期...
总的来说,这个示例提供了一个解决方案,允许开发者在iOS 5之后的环境中,通过非官方手段获取UDID并实现数据回传。虽然这种方式在App Store发布的应用中不再适用,但对于企业内部应用或者测试环境,仍然有一定的价值...
在这个话题中,我们将深入探讨如何利用UDID(Unique Device Identifier)和个人开发者账号来实现iOS超级签名。 首先,UDID是每个iOS设备独一无二的标识符,用于区分不同的设备。在iOS 7之后,为了保护用户隐私,...
iOS 设备唯一标示符(UDID)解决方案 ZKUDIDManager ,ZKUDIDManager是一个开源的基于Keychain和IDFV的iOS设备唯一标示符(UDID...
在iOS系统中,UDID(Unique Device Identifier)是设备独一无二的标识符,IMEI(International Mobile Equipment Identity)是国际移动设备识别码,SN(Serial Number)是设备序列号,而ICCID(Integrated Circuit ...
UDID 解决方案 SecureUDID ,SecureUDID 是一个开源的基于沙箱机制的 UDID 解决方案,旨在解决苹果因为废弃了 UDI...
通过pc电脑,如何利用各种软件,获取iOS设备的UDID号
通过这个小程序,可以获取到当前设备的UDID信息,用于广告等业务
UDID-Grabber 是一个专门设计用于抓取 iOS 设备唯一设备标识符(UDID)的工具,尤其适合在 Heroku 平台上运行。UDID 是每个 iOS 设备上一个唯一的16进制字符串,通常在开发、测试或管理 iOS 应用时需要用到。这个...
获取iOS设备的UDID,方便测试,不用上传到app store也可以安装
UDID.io 使用示例 著名的使用移动配置获取 iPhone 和 iPad 的 UDID、IMEI、序列号等。 此存储库包含示例应用程序,它使用“第三方 API”将 UDID.io 用作您网站或移动应用程序的一部分。 API 描述和规范 API 使用 ...
这个"IOS获取UDIDdemo支持ios7"的压缩包文件,很可能是提供了一种解决方案,帮助开发者在iOS 7及更高版本中模拟获取UDID的功能。 UDID在早期被广泛用于各种目的,例如设备注册、统计分析、广告追踪等。然而,由于...
全能签软件源UDID验证+远程公告+远程时间锁+锁库名+远程控制 移动开发 - IOS一、锁定动态库名称、防止二次修改动态库名称,二次修改动态库名称闪退二、软件源远程控制功能:1、软件源后台开启关闭 动态库UDID网络...
这个压缩包文件“ProPLUG OpenUDID - iOS Unique Identifier Replacement UDID.rar”正是为了提供一种开放源码的解决方案,以替代传统的UDID。 首先,我们需要理解UDID是什么。UDID是一个由苹果分配给每个iOS设备的...
在iOS开发中,由于苹果对用户隐私保护的加强,自iOS 6开始,Apple不再允许开发者直接使用UDID(Unique Device Identifier)来标识设备。UDID是一个设备的全球唯一的序列号,但考虑到用户隐私,苹果引入了新的机制,...
获取设备的udid,不用上架app store 也可以安装到手机上
UDID(Unique Device Identifier)是苹果设备的一个唯一识别码,用于区分不同的iOS设备。...然而,随着隐私保护意识的增强,开发者应逐渐适应不依赖UDID的解决方案,以适应不断变化的苹果政策和用户需求。
值得注意的是,自从iOS 7之后,苹果为了加强用户隐私保护,取消了通过官方API直接获取UDID的功能,开发者不再能直接获取UDID,而是转向使用其他替代方案,如使用广告标识符(IDFA)或Vendor ID等。然而,在某些特定...
该过程主要用于将iOS应用程序安装到自己的iOS设备上测试、或者安装到别人的iOS设备上,或者想发布到App Store中。 一、添加证书 添加证书是制作Profile文件的第一步。首先,需要登录到苹果开发者网站,选择...