You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Android端使用inappwebview自定义标签时主Activity断网问题

Flutter主Activity在inappwebview自定义标签浮层打开时丢失网络连接的问题解决

问题描述

当第二个Activity打开基于flutter_inappwebview包的自定义标签浮层时,主Activity出现网络连接丢失,Firestore抛出以下错误:

W/Firestore( 8958): (25.1.0) [WatchStream]: (a5b7c53) Stream closed with status:Status{code=UNAVAILABLE, description=Unable to resolve host firestore.googleapis.com}

仅在浮层打开时出现该问题,关闭浮层后网络立即恢复。相关环境信息:

  • Flutter版本:3.24.3
  • Android SDK版本:35.0.0
  • 测试设备:Galaxy A35 5G、Android-arm64模拟器
  • 使用依赖包:flutter_inappwebview 6.1.4
    已确认其他场景网络正常,AndroidManifest已添加INTERNET权限:
<uses-permission android:name="android.permission.INTERNET" />

原因分析

  1. Android 14+进程网络优先级限制:API 34及以上版本对应用进程的网络访问管控更严格,自定义标签浮层(WebView进程)启动时,系统可能降低主Activity进程的网络优先级,导致主进程DNS解析或网络请求被阻塞。
  2. 自定义标签进程隔离冲突:默认情况下,Custom Tabs可能使用独立进程运行,与主进程抢占网络连接池资源,打断Firestore的长连接。
  3. Firestore长连接资源抢占:Firestore的WatchStream是长连接,WebView启动时会占用大量网络资源,导致长连接被强制断开,且无法在浮层运行期间重新建立。

解决方案

方案1:强制自定义标签与主进程同运行

修改flutter_inappwebview的Custom Tabs配置,避免进程隔离导致的资源竞争:

CustomTabsOptions customTabsOptions = CustomTabsOptions(
  intentExtraOptions: {
    "android.support.customtabs.extra.KEEP_ALIVE": true,
    "android.intent.extra.PROCESS_NAME": "你的应用包名",
  },
);

// 打开自定义标签时传入配置
InAppBrowser.openWithSystemBrowser(
  url: Uri.parse("目标URL"),
  options: InAppBrowserClassOptions(
    customTabs: customTabsOptions,
  ),
);

方案2:补充网络相关配置

在AndroidManifest.xml中添加权限和网络安全配置,确保主进程网络访问不受限:

<!-- 补充网络状态权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<application
    ...
    android:usesCleartextTraffic="true"
    android:networkSecurityConfig="@xml/network_security_config">
    ...
</application>

在res/xml/network_security_config.xml中配置信任Firestore域名:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">firestore.googleapis.com</domain>
    </domain-config>
</network-security-config>

方案3:优化Firestore重连机制

配置Firestore自动重试策略,并监听网络状态手动触发重连:

// 初始化Firestore时设置重试参数
FirebaseFirestore.instance.settings = Settings(
  persistenceEnabled: true,
  retryDelay: const Duration(seconds: 2),
  maxAttempts: 5,
);

// 监听网络变化,恢复时重置Firestore连接
Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
  if (result != ConnectivityResult.none) {
    FirebaseFirestore.instance.clearPersistence();
    FirebaseFirestore.instance.settings = Settings(persistenceEnabled: true);
  }
});

方案4:升级flutter_inappwebview版本

当前使用的6.1.4版本可能存在Android 14+适配缺陷,尝试升级到最新稳定版,官方大概率已修复进程间网络冲突问题。

内容的提问来源于stack exchange,提问作者Malou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:08:21