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

如何在Flutter WebView中通过Asset Links唤起第三方原生App?

在Flutter WebView中唤起已配置App Link的原生App

你遇到的component name is null错误,是因为url_launcher默认无法直接通过HTTPS URL解析到App Link对应的原生App组件——App Link的匹配逻辑是由Android系统负责的,而非插件直接处理。以下是几种可行的解决方案:

方案1:使用android_intent_plus发送系统VIEW Intent

Android的App Link是通过ACTION_VIEW Intent触发的,直接调用系统Intent可以让系统自动匹配对应的原生App:

  1. 添加依赖到pubspec.yaml:
dependencies:
  android_intent_plus: ^4.0.0 # 替换为最新版本
  1. 修改WebView的onNavigationRequest逻辑:
import 'package:android_intent_plus/android_intent.dart';
import 'package:webview_flutter/webview_flutter.dart';

// ...

WebView(
  initialUrl: "your_initial_url",
  navigationDelegate: (navigation) async {
    if (navigation.url.startsWith('https://www.bank.com')) {
      final intent = AndroidIntent(
        action: 'android.intent.action.VIEW',
        data: navigation.url,
      );
      await intent.launch();
      return NavigationDecision.prevent;
    }
    return NavigationDecision.navigate;
  },
)

方案2:调整url_launcher的调用方式

通过指定LaunchMode.externalApplication,让Android系统负责链接的解析和处理,而非插件自行查找组件:

  1. 确保url_launcher依赖已添加,然后修改代码:
import 'package:url_launcher/url_launcher.dart';
import 'package:webview_flutter/webview_flutter.dart';

// ...

WebView(
  initialUrl: "your_initial_url",
  navigationDelegate: (navigation) async {
    if (navigation.url.startsWith('https://www.bank.com')) {
      final uri = Uri.parse(navigation.url);
      if (await canLaunchUrl(uri)) {
        // 让系统处理链接,触发App Link匹配
        await launchUrl(uri, mode: LaunchMode.externalApplication);
      }
      return NavigationDecision.prevent;
    }
    return NavigationDecision.navigate;
  },
)
  1. 针对Android 11+,需要在android/app/src/main/AndroidManifest.xml中添加查询声明,允许App访问目标链接的Intent:
<queries>
  <intent>
    <action android:name="android.intent.action.VIEW" />
    <data android:scheme="https" android:host="www.bank.com" />
  </intent>
</queries>

关键注意事项

  • 确认目标银行App已正确配置App Link:https://www.bank.com/.well-known/assetlinks.json文件存在且格式正确,App的Manifest中包含对应的<intent-filter>并设置了android:autoVerify="true"。
  • Debug模式下,需在设备开发者选项中开启App Links verification settings的允许调试选项,否则系统可能跳过本地验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:53:15