【问题标题】:Using UDID in pre-iOS6 apps (and IDFA for 6.0+)在 iOS6 之前的应用程序中使用 UDID(以及 6.0+ 的 IDFA)
【发布时间】:2013-02-02 05:58:32
【问题描述】:

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 官方文档中找不到任何提及。

【问题讨论】:

    标签: ios ios6 udid


    【解决方案1】:

    很可能他们不是,但他们应该。但是请看,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 真的懒惰和/或决定对你做坏事,这可能足以解决故事的静态分析部分。

    【讨论】:

    • 哈哈,真的吗?基本上尝试将其偷偷溜过审阅者以抵消他/她(错误地?)以 UDID 访问为由拒绝我的应用程序的机会?我宁愿让 Apple 以书面形式记录这个 UDID 混乱,然后对审查过程保持完全透明,并解释我在使用 UDID 时做了什么(仅适用于 iOs5)以及为什么......
    • @Tyson 任何理性的人都会喜欢它,但苹果是懒惰和邪恶的。 :-( 太糟糕了。不过,您可以尝试在没有任何技巧的情况下提交您的应用程序,看看它是否被拒绝。
    【解决方案2】:

    UDID 现在验证失败。去 OpenUDID。

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      相关资源
      最近更新 更多