iOS 6 UDID - identifierForVendor 与 identifier For Advertising 相比有啥优势?

Posted

技术标签:

【中文标题】iOS 6 UDID - identifierForVendor 与 identifier For Advertising 相比有啥优势?【英文标题】:iOS6 UDID - What advantages does identifierForVendor have over identifierForAdvertising?iOS 6 UDID - identifierForVendor 与 identifier For Advertising 相比有什么优势? 【发布时间】:2012-08-03 21:25:55 【问题描述】:

Apple 正在更改 ios6 的隐私设置并弃用设备 UUID (UDID)。根据 WWDC 演示文稿和文档,UDID 有两个替代品,都在 UIDevice 类中:

-identifierForVendor

同一开发者的应用之间的 ID 相同。 删除该团队 ID 的最后一个应用。 已备份。

-identifierForAdvertising

设备独有。 适用于所有应用程序;用于广告 - iAd 已从 iOS 6 及更高版本的 UDID 转换。 使用“清除所有内容和设置”进行重置。 已备份。

在我看来,-identifierForVendor 不如-identifierForAdvertising,因为它会在上次从供应商处卸载应用程序时重置,并通过“删除所有内容和设置”来重置。

-identifierForVendor-identifierForAdvertising 有什么优势?

【问题讨论】:

您发布的问题是否也提供了答案:) 对于我能想到的所有用例,identifierForAdvertising 都更胜一筹。我看不到 identifierForVendor 的用途。 Apple 网站上有一个完整的开发者论坛,您可以在那里讨论 iOS6 而无需担心 NDA。 【参考方案1】:

我怀疑如果您将identifierForAdvertising 用于与广告无关的任何内容(即,如果您将identifierForAdvertising 发送到您自己的服务器,即使您不是广告网络或如果您在同一请求中发送 identifierForAdvertising 以及其他可能识别个人的数据)。

如果我的怀疑是正确的,identifierForVendor 相对于identifierForAdvertising 的优势在于它不会让您的应用被拒绝。

【讨论】:

你有这方面的第一手资料吗?您是否使用新的广告或供应商 ID 提交了任何内容? 正如我所说,这只是一个猜测。 我认为发送 IFA 不太可能导致您的应用被拒绝。有完全正当的理由将 IFA 发送到您自己的服务器而不是“广告网络”,即。服务器到服务器转换跟踪【参考方案2】:

重要提示

Apple 刚刚发布 iOS 6.0,NDA 已解除。

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

[[UIDevice currentDevice] identifierForAdvertising]

此方法包含在 iOS 6 中。如果您使用上述方法,您的应用将(很可能)崩溃并被拒绝!

相反,Apple 创建了一个新类 ASIdentifierManager,其中包含方法 advertisingIdentifier。这是上面的apple docs:

【讨论】:

请注意,这仅适用于identifierForAdvertisingidentifierForVendor 保留在 UIDevice 类中。 现在只有我奶奶在使用 iOS 6,所以我假设 identifierForAdvertising 是公平的游戏? @botbot 是的,我们的最低目标是 iOS 7 几乎我们所有的应用程序......你的可能也应该...... :]【参考方案3】:

它们是两个不同的 ID,用于两种不同的目的。 我认为 identifierForVendor 将用于执行需要链接到特定用户/设备的应用程序的操作,例如提供推送通知和更新用户的应用程序数据服务器端(例如他们的分数或存储的任何其他数据)他们)。 identifierForAdvertising 应该用于诸如有针对性的广告之类的事情,还应该用于检查特定广告活动的有效性(检查哪些设备因特定广告而安装了应用程序)。

【讨论】:

【参考方案4】:

用户可以限制在手机上使用广告跟踪。请参阅“设置”>“常规”>“关于”>“广告”下的 this article on the opt-out mechanism。

新的ASIdentifierManager 类有一个属性advertisingTrackingEnabled,它根据用户的广告跟踪是否受限而返回真或假。即使设备的广告标识符由advertisingIdentifier 属性返回而不管选择退出,如果用户选择退出,您也不应该使用该标识符。

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

【讨论】:

这是解决实际问题的唯一可靠答案。谢谢。【参考方案5】:

这些 API 设计得非常糟糕,这清楚地表明 - Apple 不希望我们识别用户设备。

只需查看 identifierForVendor 描述即可。

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

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

【讨论】:

【参考方案6】:

在iOS 6中根据设备的唯一标识符创建一个uniqueString:

#import <AdSupport/ASIdentifierManager.h>

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

【讨论】:

这是一个糟糕的建议,这样做:[[NSUUID UUID] UUIDString] 没有。您是否阅读了问题中 identifierForVendor/advertisingIdentifier 的描述?你读过这个问题吗?【参考方案7】:

identifierForAdvertising 在跟踪方面可能更胜一筹,但可能会受到用户当前或将来选择退出的影响。另一方面,identifierForVendor 不太可能成为用户的主题。

【讨论】:

【参考方案8】:

使用 供应商 ID。 这是一篇很有启发性的文章http://www.doubleencore.com/2013/04/unique-identifiers/

【讨论】:

【参考方案9】:

要知道的重要一点是,identifierForVendor 的备份只能恢复到同一设备。如果备份恢复到不同的设备,则清除标识符。

【讨论】:

嘿,malhal,您是否测试过具有来自应用商店的使用identifierForVendor 的应用程序的设备在设备 A 上备份并在设备 B 上恢复是否会重置 identifierForVendor?我在文档中找不到与该答案相关的任何内容。【参考方案10】:

用户可以随时在“设置”中更改 identifierForAdvertising, 如果设备上没有来自该供应商的应用,则重新安装应用后 identifierForVendor 会发生变化。

这是获取或持久、交叉安装设备标识符的替代方案和最佳解决方案:

描述:https://blog.onliquid.com/persistent-device-unique-identifier-ios-keychain/

代码:https://gist.github.com/miguelcma/e8f291e54b025815ca46

【讨论】:

以上是关于iOS 6 UDID - identifierForVendor 与 identifier For Advertising 相比有啥优势?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 6 UDID - identifierForVendor 与 identifier For Advertising 相比有啥优势?

苹果手机添加udid怎么回事

iOS 获取一个不变的UDID

UDID是啥 如何获取iOS设备UDID

获取UDID

iOS 7.0 beta 版本中的 UDID