苹果最近的新闻,但不适合的原因,他们通常会想成为。被称为AntiSec黑客组发表了超过一百万匿名的UDID,连同有关的UDID的设备类型和用户名。从一个应用程序的出版公司蓝蟾蜍的UDID。这个小插曲,沿着从国会审议,有助于说明为什么苹果已决定弃用的UDID,因为他们创造了隐私问题。
设备的UDID是每个苹果设备是唯一的字母数字字符串。App开发商已使用UDID的跨应用程序跟踪用户的使用习惯,和潜在的销售第三方广告信息,并开辟了一个潜在的恶意软件/间谍软件攻击的设备。正如你可以想像,这种做法可能会导致许多用户的隐私担忧。在2011年8月发布的iOS 5中,苹果弃用的UDID的使用。然后,他们开始拒绝直接访问UDID的应用程序。最终,苹果将完全禁用的UDID。
自从苹果弃用的UDID的使用,开发人员需要一种方式来为他们的应用程序生成一个唯一的标识符。的iOS 6发布之前,这可以通过创建一个UUID 的CFUUIDCreate功能。要使用CFUUIDCreate,你可以做一些类似下面的代码:
1 |
CFUUIDRef identifierObject = CFUUIDCreate(kCFAllocatorDefault); |
2 |
3 |
/ /的CFUUID转换为一个字符串 |
4 |
的NSString * identifierString =(的NSString __bridge_transfer *)CFUUIDCreateString(kCFAllocatorDefault identifierObject); |
5 |
CFRelease((CFTypeRef)identifierObject); |
如果存储在identifierString NSUserDefaults进行时,新生成的UUID将坚持只要安装在设备上的应用程序,该应用程序。这也可以防止被其他应用程序所利用的id。另一种选择是将存储新生成UUID在钥匙串。这样一来,如果一个开发人员需要访问安装的应用程序之间,或在应用程序之间的UUID,它可以从钥匙扣检索。ID可以用下面的代码添加到NSUserDefaults进行:
1 |
NSUserDefaults进行*默认值= [NSUserDefaults进行standardUserDefaults]; |
2 |
[默认的setObject:forKey identifierString: @“udidKey” ]; |
3 |
同步[默认]; |
ID然后,可以用下面的代码检索:
1 |
udidString的NSString * = [默认objectForKey: @“udidKey” ]; |
与iOS 6,苹果推出了三个新的API来处理的唯一标识符,并取代UDID。这些新的标识符是应用标识符,供应商标识,广告标识。这三种不同的唯一标识符被设计来处理以前用于UDID的各种场景,但在一个更安全的方式。有了这些新的标识符,应用程序开发人员将有惟一地识别和跟踪用户,但不一定会允许其他应用程序开发人员能够访问另一个应用程序的用户数据。让我们深入到每个这些API的更深一点。
应用标识符
应用程序标识符是与iOS 6中引入的一个新的API,唯一确定的东西。要生成应用程序标识符,并将其放置在一个NSString,您只需进行以下电话:
1 |
ID appIdObject = [NSUUID UUID]; |
2 |
的NSString * appIdString = [appIdObject UUIDString]; |
这将生成一个唯一的128位值不包含硬件细节。每一个方法被调用时,所产生的价值将是独一无二的。所以,现在,这将被用于什么呢?答案是什么。生成的值,然后存储在NSUserDefaults进行,并在需要的时候检索。这意味着,应用程序标识符存在,只要在设备上安装的应用程序,将被备份,跨设备可以被恢复。换句话说,它将有NSUserDefaults进行的所有其他项目相同的行为。
供应商标识
供应商的标识是每个开发团队为每个设备分配一个唯一的标识符。一个团队可以由一个单一的开发商作为个人参加的iPhone开发者计划,可以由许多开发商如果用户参加了作为一个公司的iPhone开发者计划。因此,一旦一个应用程序安装在设备上的一个特定的团队,将为该组安装在一个给定的移动设备为每个应用程序生成一个唯一的标识符。此标识符将坚持在设备上,只要是一个应用程序安装在该装置上的那支球队。要访问的供应商标识符,只需进行以下电话:
1 |
NSUUID * vendorIdObject = [[UIDevice currentDevice] identifierForVendor]; |
使用厂商识别码的应用程序标识符的优势,iOS的管理标识符映射,它的备份,它不会恢复在不同的设备(如UDID)。这最后一点意味着,你的供应商ID将改变整个设备。一旦一个特定的球队的最后一个应用程序被删除,所以是从一个设备供应商标识符。这是可能的,因为iOS的有计数每队ID的应用程序。时,将产生一个新的应用程序的那支球队再次在设备上安装。有一件事要记住,这个id是不是球队标识符的哈希,它实际上是球队的第一个应用程序存储在设备上时,会产生一个随机ID。
广告标识
最后一个新的API与iOS 6的广告标识。正如它的名字所暗示的,该标识符可以和应该用于广告用途,,如频率攻丝和转换跟踪。其实,苹果的iAd的广告网络,已经从UDID转换广告标识完全与iOS 6。广告标识是唯一的设备,是提供给任何应用程序。这是这是最喜欢的UDID,因为它是唯一的设备标识符,它是访问任何设备上的应用,备份,它不会被还原到不同的设备,如UDID和供应商标识。一个区别是,会被人遗忘,如果用户执行“抹掉所有内容和设置”动作设置应用程序内的广告标识符。这是可能的,因为该标识符是一个软件生成的标识符,而不是硬件标识符。广告标识,可以用下面的代码访问:
1 |
#导入<AdSupport/AdSupport.h>“ |
2 |
... |
3 |
ID adIdObject = [ASIdentifierManager sharedManager]。advertisingIdentifier; |
此外,AdSupport.framework必须被添加到应用程序。这非常类似于如何被访问的供应商标识符。供应商和广告标识之间的主要区别是只能由标识符是提供给任何开发的任何应用程序开发人员的应用和广告供应商标识符访问。然而,用户有选择限制他们的设备上添加跟踪。这可以通过选择设置?关于?广告。如果打开此为“ON”,广告标识只能用于以下用途:频次上限,转换事件,估计独特的用户数量,安全性和欺诈检测,调试。这可以检查通过调用方法的ASIdentifierManager类advertisingTrackingEnabled。
比较这些API
总结
与iOS 6,苹果已经提供了这三个新的API,可以用来完全取代UDID的iOS 6释放。苹果建议你现在开始过渡。你建立任何新的应用程序,都应该使用新的API。如果你有一个现有的应用程序,过渡到新的API,当你提交到App Store的更新。做到这一点是很重要的,,因为UDID和类似标识符,因此无法使用在未来。传统的行为不会改变,而这个改变任何现有的已安装的应用程序不会受到影响。附件是一个简单的示例项目,利用这些新的API以及遗留CFUUIDCreate功能。
附件 | 大小 |
---|---|
SimpleUniqueIdentifier.zip | 39.71 KB |