在iOS6之前的应用程序中使用UDID(以及6.0+的IDFA)

时间:2013-02-02 05:58:32

标签: ios ios6 udid

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

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

  

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

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

另外,AppsFlyer mention that UDID's can be enabled in their SDK,附注:

  

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

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

2 个答案:

答案 0 :(得分:2)

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

如果您害怕此事件最终会发生在您身上(这是一个非常合理的恐惧),那么您可以尝试模糊对该特定消息的调用(并且仅在iOS 5及更早版本上调用它以便不违反服务条款)。例如:

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真的变得懒惰和/或决定做b * dger你,可能足以通过故事的静态分析部分。

答案 1 :(得分:1)

UDID现在验证失败。去OpenUDID。