在iOS6之前的应用程序中使用UDID(对于6.0+;,使用IDFA)

在iOS6之前的应用程序中使用UDID(对于6.0+;,使用IDFA),ios,ios6,udid,Ios,Ios6,Udid,iOS6的新版本对于运行iOS6的用户的转换跟踪效果良好。但是,如果应用程序的最低支持版本低于iOS 6,那么在iOS 6之前的设备上运行时,可接受的处理方法是什么 您仍然可以在iOS6之前的设备上使用UDID: iOS 6中引入了广告标识符(IDFA)。它被广告商用来跟踪转化率和高级目标定位等。在使用iOS 6(或更高版本)的设备上,IDFA旨在取代UDID作为设备标识符。在使用iOS 5(或更低版本)的设备上,苹果将继续支持使用UDID作为设备标识符 但这对我来说不太合适。iOS版本检查是运

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

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

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

但这对我来说不太合适。iOS版本检查是运行时的事情,这意味着您的代码将始终静态链接到不推荐的UDID访问器,并且只有在运行时才决定是否读取它。当然,苹果的审查过程将看到UDID的静态链接,并拒绝该应用程序。他们不会对代码进行反编译并确认您的逻辑是否正确,或者尝试进行100%代码覆盖率测试以确认在iOS6中运行时它从未被读取,是吗

此外,请注意:

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


这似乎意味着只要您通知用户,UDID仍然可以被读取。然而,我在苹果的官方文档中找不到这方面的任何提及。

很可能没有,但他们应该这样做。但是你看,苹果的目标不是取悦开发者;他们的目标是取悦自己(即赚很多钱)

如果您担心这一事件最终会发生在您身上(这是一种相当合理的担心),那么您可以尝试混淆对该特定消息的调用(并且仅在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];
}

这是一个相当弱的“模糊处理”,但如果苹果真的懒惰和/或决定对你进行欺骗,可能足以完成故事的静态分析部分。

UDID现在无法验证。去OpenUDID。

哈哈,真的吗?基本上,试着偷偷地绕过审查者,以抵消他/她(错误地?)以UDID访问为由拒绝我的应用程序的可能性?我宁愿让苹果公司以书面形式记录这一UDID混乱,然后对审查过程完全透明,并解释我在使用UDID时做了什么(仅限iOs5)以及为什么…@Tyson任何有理智的人都会喜欢,但苹果公司又懒又坏-(太糟糕了。不过,你可以尝试提交你的应用程序,而不需要任何技巧,看看它是否被拒绝。