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

Android11 WebView自定义URI scheme跳转APP失败(Flutter Twitter登录场景)

问题诱因
  1. Android 11(API 30)调整了WebView的默认URL处理逻辑:API 29及更低版本中,WebView遇到非标准的自定义Scheme时,会自动将请求提交给系统Intent分发体系,匹配对应注册的应用;API 30及以上版本中,WebView默认仅处理http、https、ftp、ws等标准网络协议,遇到未识别的自定义Scheme会直接抛出net::ERR_UNKNOWN_URL_SCHEME错误,不会再触发系统Intent分发。
  2. Android 11新增了包可见性限制,如果应用targetSdkVersion>=30,未在Manifest中声明对应Scheme的查询权限,系统也无法匹配到你的应用作为跳转目标。
修复方案

分两步处理:

步骤1:适配WebView的Scheme拦截逻辑

根据你使用的WebView实现方式选择对应配置:

  • 原生Android WebView场景:重写shouldOverrideUrlLoading方法,手动拦截自定义Scheme并构造Intent跳转
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    String url = request.getUrl().toString();
    if (url.startsWith("app_name://")) {
        try {
            Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
            view.getContext().startActivity(intent);
            return true;
        } catch (Exception e) {
            // 无匹配应用的兜底逻辑
        }
    }
    return super.shouldOverrideUrlLoading(view, request);
}
  • Flutter webview_flutter插件场景:通过navigationDelegate拦截自定义Scheme,配合url_launcher跳转
WebView(
  initialUrl: twitterAuthUrl,
  navigationDelegate: (request) {
    if (request.url.startsWith('app_name://')) {
      launchUrl(Uri.parse(request.url));
      return NavigationDecision.prevent;
    }
    return NavigationDecision.navigate;
  },
)

步骤2:适配Android 11包可见性规则

在AndroidManifest.xml的根节点(和application节点平级)添加如下配置:

<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="app_name" />
    </intent>
</queries>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:45:03