3

iOS6的新IDFA 功能适用于运行 iOS6 的用户的转化跟踪。但是,如果应用程序的最低支持版本低于 iOS 6,那么在 iOS6 之前的设备上运行时,可接受的处理方法是什么?

Jumptap 提到您仍然可以在 iOS6 之前的设备上使用 UDID:

广告标识符 (IDFA) 是在 iOS 6 中引入的。广告商使用它来跟踪转化和高级定位等。在使用 iOS 6(或更高版本)的设备上,IDFA 旨在取代 UDID 作为设备标识符。在使用 iOS 5(或更低版本)的设备上,Apple 将继续支持使用 UDID 作为设备标识符。

但这并不适合我。iOS 版本检查是运行时的事情,这意味着您的代码将始终静态链接到已弃用的 UDID 访问器,并且仅在运行时决定是否读取它。当然,Apple 的审核过程会看到指向 UDID 的静态链接并拒绝该应用程序。他们不会反编译代码并确认你的逻辑是正确的,或者尝试做一个 100% 的代码覆盖测试来确认它在 iOS6 中运行时永远不会被读取,是吗?!?!

此外,AppsFlyer 提到可以在他们的 SDK 中启用 UDID,并附上以下说明:

*UDID 详细信息:一些广告网络(例如 Tapjoy)需要 UDID 才能运行 CPI 活动。在上述情况下,您需要启用 UDID 并使用明确的隐私声明更新您的应用条款和条件,通知您的用户收集他们的私人信息。

这似乎意味着只要您通知用户,仍然允许读取 UDID。但是,我在 Apple 官方文档中找不到任何提及。

4

2 回答 2

2

很可能他们不是,但他们应该。但是请看,Apple 的目标不是取悦开发者;而是取悦开发者。他们的目标是取悦自己(即赚很多钱)。

如果您担心此事件最终会发生在您身上(这是一个非常合理的恐惧),那么您可以尝试混淆对该特定消息的调用(并且仅在 iOS 5 和更早版本上调用它,以免违反 TOS )。例子:

NSString *str1 = @"ueId";
NSString *str2 = @"uniq";
NSString *sel = [NSString stringWithFormat:@"%@%@ent%cfi%s", str2, str1, 'i', "er"];
SEL msg = NSSelectorFromString(sel);
if (iOS_5_or_older) {
    deviceID = [[UIDevice currentDevice] performSelector:msg];
}

这是一个相当弱的“混淆”,但如果Apple真的变得懒惰和/或决定对你做坏事,这可能足以通过故事的静态分析部分。

于 2013-02-02T06:16:14.483 回答
1

UDID 现在验证失败。去 OpenUDID。

于 2013-05-31T15:54:15.033 回答