iOS6 UDID - identifierForVendor比identifierForAdvertising有什么优势?

69
苹果正在更改iOS6的隐私设置并弃用设备UUID(UDID)。 根据WWDC演示和文档,有两个替代UDID的方法,都在UIDevice类中:
-identifierForVendor:相同开发者的应用程序之间相同的ID。删除该Team ID的最后一个应用程序后会被清除,但会进行备份。
-identifierForAdvertising:设备唯一的ID。可供所有应用程序使用,并用于广告 - iAd已从UDID转换为iOS 6及更高版本。通过“擦除所有内容和设置”可以重置,但会进行备份。
看起来,相对于 identifierForAdvertising, identifierForVendor 劣势较大,因为它会在卸载供应商应用程序的最后一步以及“擦除所有内容和设置”时被重置。那么,identifierForVendor 有什么优点呢?

4
你所发布的问题本身就包含了答案,是吗?:) - AppHandwerker
对于我所能想到的所有用例,identifierForAdvertising更为优越。我看不出identifierForVendor有什么用处。 - Tihom
2
在苹果网站上有一个完整的开发者论坛,您可以在那里讨论iOS6而不必担心NDA。 - Abizern
10个回答

34

重要提示:

苹果刚发布了iOS 6.0并解除了NDA。

对于预先包含引用代码的开发人员

[[UIDevice currentDevice] identifierForAdvertising]

这个方法没有被包含在iOS 6中。如果您使用上述方法,您的应用程序很可能会崩溃并被拒绝!

相反,苹果公司创建了一个新的类ASIdentifierManager,其中包括方法advertisingIdentifier。这是苹果文档的链接:ASIdentifierManager文档


13
请注意,这仅适用于“identifierForAdvertising”。 “identifierForVendor”保留在“UIDevice”类中。 - Alex
只有我的奶奶现在还在使用iOS 6,所以我认为identifierForAdvertising是可以使用的吧? - botbot
1
@botbot 是的,我们所有应用的最低目标都是 iOS 7...你的应该也是...:] - JRG-Developer

23

用户可以限制手机上的广告跟踪。请参见此文章中的退出机制,位于设置 > 通用 > 关于本机 > 广告 下。

新的ASIdentifierManager类有一个属性advertisingTrackingEnabled,根据用户是否限制广告跟踪返回true或false。尽管设备的广告标识符无论如何都会通过advertisingIdentifier属性返回,但如果用户选择退出,您不应使用标识符。

因此,identifierForVendor的优点在于,无论用户选择加入或退出广告跟踪,您始终可以访问并使用该手机的此ID。


1
这是唯一一个确切的答案,解决了实际问题。谢谢。 - Basil Bourque

8
我猜测如果您在非广告相关的任何事情上使用 identifierForAdvertising (例如将 identifierForAdvertising 发送到自己的服务器,即使您不是广告网络,或者将 identifierForAdvertising 与其他可能识别个人身份的数据一起发送),那么苹果公司可能会直接拒绝您的应用程序。
如果我的猜测是正确的,那么 identifierForVendor 相比 identifierForAdvertising 的优势是它不会导致您的应用程序被拒绝。

你是否有关于此的第一手知识?你是否已经提交了任何新广告或供应商ID的内容? - Tihom
1
就像我说的,这只是一个猜测。 - Ole Begemann
3
我认为发送 IFA 不太可能导致您的应用被拒绝。如果是服务器之间的转化追踪,完全有合理的理由将 IFA 发送到您自己的服务器,而无需成为“广告网络”。 - wallacer

5

它们是两个用于不同目的的不同标识符。 我认为,identifierForVendor 应该用于需要将应用程序链接到特定用户/设备的事情,例如提供推送通知和在服务端更新用户的应用程序数据(例如他们的分数或任何其他为他们存储的数据)。
应将 identifierForAdvertising 用于针对性广告和检查特定广告活动的效果(检查由于特定广告而安装了哪些设备上的应用)。


3

1
在iOS 6中,基于设备唯一标识符创建一个uniqueString的方法如下:
#import <AdSupport/ASIdentifierManager.h>

NSString *uniqueString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
NSLog(@"uniqueString: %@", uniqueString);

1
这是一个糟糕的建议,请使用以下代码:[[NSUUID UUID] UUIDString] - Kevlar
不好意思,请问您有没有阅读问题中关于identifierForVendor/advertisingIdentifier的描述?您有没有看完整个问题? - jrc

0

这些API设计得太糟糕了,这明显表明-苹果不希望我们识别用户设备。

只需看一下identifierForVendor的描述。

如果用户从同一供应商删除所有应用程序,则会被擦除。:(它不可靠-可能返回nil(文档建议“等待”一段时间,如果发生这种情况。:(

他们没有使用明显的解决方案,该解决方案随时都可以工作,而且不依赖于安装/卸载-返回内部硬件设备ID与团队ID连接的SHA-1(或任何其他哈希)。


0
重要的是要知道identifierForVendor的备份只能恢复到相同的设备上。如果将备份恢复到不同的设备,则标识符将被清除。

嘿malhal,你测试过使用identifierForVendor的App从appstore下载到设备A并备份后在设备B上恢复是否会重置identifierForVendor吗?我在文档中找不到相关答案。 - Segev

0

0

identifierForAdvertising 可能在追踪方面更优秀,但可能会受用户现在或未来的选择退出影响。另一方面,identifierForVendor 不太可能受到用户影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接