让我们的应用程序为iOS 9做好准备会出现HTTP调用问题,导致在应用程序日志中以15s间隔定期出现以下错误:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)
似乎是这种情况,因为Facebook SDK应用事件会定期刷新,如documentation所述......
记录时不会立即发送事件。他们在很多情况下缓存并刷新到Facebook服务器: 当事件计数阈值通过时(当前100个记录的事件)。 通过时间阈值(当前为15秒)。 当应用程序进入后台时,然后返回到前台。
取消激活AppEvents.ActivateApp ();
禁用日志消息,因此这绝对是源。
这个问题似乎出现了,因为Facebook SDK没有使用SSL提供应用事件。因为将这些行添加到info.plist中,如here和here所述,在某种程度上解决了这个问题:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- ... -->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
</dict>
</plist>
另一方面,这使得应用程序只使用HTTP。
Xamarin documentation表示添加例外DOMAIN,而不是为arbritary加载打开应用。
注意:如果您的应用程序需要连接到不安全的网站,则应始终使用NSExceptionDomains输入域作为例外,而不是使用NSAllowsArbitraryLoads完全关闭ATS。 NSAllowsArbitraryLoads只能在极端紧急情况下使用。
我尝试将这段代码添加到info.plist中但没有成功。说出错误信息仍然存在。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>{DOMAIN}</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionsAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
但是在这种情况下DOMAIN会是什么?我们尝试了; www.facebook.com
和facebook.com
。最好是为Facebook SDK激活SSL,但如果不可能添加例外,那么域也是一种有效的解决方法。
是否可以使Facebook SDK使用SSL,如果可以,如何使用?筛选文档并没有为此带来任何结果。也许我们在搜索引擎上搜索错误的条款,有什么建议吗?
我们目前正在使用4.5.1版本中的Facebook SDK Xamarin组件。