Flutter WebView加载指定链接出现SSL握手错误及白屏问题
解决Flutter WebView加载https://maps.chi.ac.uk的SSL握手错误问题
错误原因分析
日志中的SSL error code 1, net_error -202表明SSL握手失败,大概率是目标网站的SSL证书不被设备系统信任,或者TLS协议版本与WebView存在兼容问题(其他网站正常加载说明WebView基础配置无问题)。
解决建议
1. 临时绕过SSL验证(仅测试/内部场景使用,生产环境禁止)
如果是测试或内部可信网站,可以临时忽略SSL错误:
Android端代码修改
在创建WebViewController时,配置Android专属的WebViewClient来忽略SSL错误:
_controller = WebViewController.fromPlatformCreationParams( PlatformWebViewControllerCreationParams( androidAndroidSettings: AndroidWebViewControllerSettings( webViewClient: AndroidWebViewClient( onReceivedSslError: (controller, request, errorHandler) { // 忽略SSL错误,仅用于测试场景 errorHandler.proceed(); // 若需提示用户风险,可调用errorHandler.cancel()并弹出提示框 }, ), ), ), ) ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setBackgroundColor(const Color(0x00000000)) ..setNavigationDelegate( NavigationDelegate( onWebResourceError: (WebResourceError error) { // 打印详细错误信息便于排查 print("Web资源错误: ${error.description}, 错误码: ${error.errorCode}"); }, onNavigationRequest: (NavigationRequest request) { return NavigationDecision.navigate; }, ), ) ..loadRequest(Uri.parse('https://maps.chi.ac.uk'));
iOS端配置修改
在项目的ios/Runner/Info.plist中添加针对该域名的ATS例外:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>chi.ac.uk</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> </dict> </dict> </dict>
2. 排查证书与协议兼容性
- 确认目标网站的TLS协议版本:如果网站使用了较旧的TLS 1.0/1.1,部分现代WebView(尤其是Android 7.0+、iOS 10+)默认禁用,需网站方升级至TLS 1.2及以上版本。
- 检查证书有效性:用设备自带浏览器打开该网站,若提示证书不可信,说明证书未被系统信任链收录,需网站方修复证书配置(比如补充完整的中间证书)。
3. 验证设备系统版本
旧版本Android(7.0以下)或iOS(10以下)对新TLS协议支持有限,若设备系统过旧,可尝试升级系统后再测试。
内容的提问来源于stack exchange,提问作者RishV
相关产品推荐
相关产品推荐

