WebView加载livestream.com视频遇CFNetwork SSLHandshake failed (-9806)错误求助
解决WebView加载livestream.com视频时的SSL握手失败问题
这个SSL握手失败(错误码-9806)的问题我碰到过类似的,咱们一步步来排查解决:
1. 先搞懂错误码的含义
CFNetwork SSLHandshake failed (-9806)本质是TLS版本不兼容——你的App请求的TLS版本低于livestream.com服务器要求的最低版本,导致握手失败。
2. 修正ATS配置的两个关键问题
你贴的Info.plist ATS配置可能存在两个小问题:
- 大概率漏了顶层的
NSAppTransportSecuritykey(这是ATS配置的必填父节点) - 设置的
NSExceptionMinimumTLSVersion为TLSv1.1,现在livestream.com已经要求至少TLSv1.2了
修正后的完整ATS配置:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>livestream.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> </dict> </dict> </dict>
3. 验证livestream.com的TLS要求
你可以用终端命令确认网站支持的TLS版本:
curl -v https://livestream.com
看输出里的SSL connection using字段,会显示网站实际支持的TLS版本(现在应该是TLSv1.2或TLSv1.3),确保ATS配置里的版本匹配。
4. WebView加载的额外配置(针对WKWebView)
如果你用的是WKWebView,除了iframe里的playinline=1,还要在WebView配置里开启对应权限:
let configuration = WKWebViewConfiguration() configuration.allowsInlineMediaPlayback = true // 如果你需要全屏播放,也可以开启这个 configuration.allowsFullscreenMediaPlayback = true let webView = WKWebView(frame: .zero, configuration: configuration)
5. 内存警告的后续处理
解决SSL问题后如果还收到内存警告,大概率是WebView加载视频时内存占用过高:
- 在页面退出时销毁WebView实例(不要留着引用)
- 清理WebView的缓存:
WKWebsiteDataStore.default().removeData(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes(), modifiedSince: Date.distantPast) { // 缓存清理完成 } - 对于WKWebView,可以自定义
WKProcessPool来限制进程内存占用
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

