NSURLSession/NSURLConnection HTTP 加载失败和 iOS 9 的其他 AdMob 警告

Posted

技术标签:

【中文标题】NSURLSession/NSURLConnection HTTP 加载失败和 iOS 9 的其他 AdMob 警告【英文标题】:NSURLSession/NSURLConnection HTTP load failed and other AdMob warnings for iOS 9 【发布时间】:2015-09-03 11:27:14 【问题描述】:

我在 App Store 中有一个支持 ios 7 和 8 的现有应用程序(尽管我很快就会放弃对 iOS 7 的支持)。

我最新版本的应用带来了 IAD 和 AdMobs(其中 AdMobs 充当 IADS 的故障转移)。随着即将推出的 iOS 9,以及最近 Google 要求移除 SSL 的热潮 (http://googleadsdeveloper.blogspot.ch/2015/08/handling-app-transport-security-in-ios-9.html HTTPS request in iOS 9 : NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)),从初学者的角度来看,我想问一下我在 Xcode 7 beta 5 中运行我的应用时遇到的一些警告。

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

我也遇到了这个链接http://timekl.com/blog/2015/08/21/shipping-an-app-with-app-transport-security/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=email&utm_source=iOS_Dev_Weekly_Issue_213

那么,在 iOS 9 上运行我的应用程序时,我究竟需要做什么才能从控制台中删除此警告?

我遇到过一个关于禁用 Xcode 中的 botched 的列表,但首先我不明白禁用它的作用是什么,而且,这是必需的吗? What does ENABLE_BITCODE do in xcode 7?

对此的任何想法将不胜感激。

【问题讨论】:

【参考方案1】:

阅读此App Transport Security Technote

现在您可能必须将 NSAllowsArbitraryLoads 全局设置为 YES,因为您无法控制广告来自哪些服务器。

【讨论】:

@amitsbajaj 此外,您当前在应用商店中的二进制文件(链接到 iOS SDK 当然。就此而言,如果您不需要使用任何 iOS-9 特定功能或解决任何 iOS-9 特定错误,则可以通过将目标 SDK 切换到 iOS 8 来暂时完全避免 ATS。这将为您带来大约iOS 8 SDK 消失之前的一个操作系统发布周期。 :-) 您的意思是使用 Xcode 6,对吗? Xcode 7 将链接到 iOS 9 SDK(无论部署目标如何),我相信 ATS 规则适用。 @NicolasMiari 实际上,ATS 似乎确实会影响使用 iOS 8.x SDK 构建的应用程序。我还认为 ATS 不会影响链接到 iOS 8.x SDK 的应用程序。在 Apple 开发者论坛 (forums.developer.apple.com/message/40668#40668) 上的这个帖子中,一位 Apple 员工表示 ATS 不应影响使用低于 9.0 的 SDK 构建的应用程序。无论如何,在我更新到 iOS 9 后,我的应用程序刚刚停止接收来自 AdMob 的广告。一些应用程序,例如 Google AdSense,在我升级到 iOS 9 后也停止了正常工作。 苹果员工是正确的。但是,如果您使用的是共享库而不是静态库,IIRC,这些库进行的网络调用的链接或之后行为将适用于这些库最初链接的任何版本。因此,如果 AdMob 将他们最新的 SDK 与 iOS 9 相关联,而您正在动态地与他们的 SDK 相关联,那么您的应用本身是否与旧版 SDK 相关联并不重要。不过,不要引用我的话。【参考方案2】:

将以下语法添加到您应用的 info.plist 中,这对我有用。

<key>NSAppTransportSecurity</key>
 <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

【讨论】:

【参考方案3】:

因为您正在调用具有自签名证书的服务器。你必须绕过它。

【讨论】:

对于 ios 9,您的服务器应该包含一个有效的证书。

以上是关于NSURLSession/NSURLConnection HTTP 加载失败和 iOS 9 的其他 AdMob 警告的主要内容,如果未能解决你的问题,请参考以下文章