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

Flutter使用unilinks插件实现Android DeepLink失效问题解决

解决DeepLink无法触发的问题

1. 修正AndroidManifest的链接匹配规则

你当前配置的android:host="myhost.com",但测试链接是unilink://myhost,host部分不匹配,这是导致无法触发Intent Filter的核心问题。

  • 若要匹配unilink://myhost,将host改为myhost:
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data
        android:scheme="unilink"
        android:host="myhost"/>
</intent-filter>
  • 确保该intent-filter放在**启动Activity(通常是MainActivity)**的标签内部,并且Android 12+需为Activity添加android:exported="true"属性:
<activity
    android:name=".MainActivity"
    android:exported="true"
    ...>
    <!-- 上述intent-filter需放置在此处 -->
</activity>

2. 验证unilinks插件依赖

确认pubspec.yaml中已添加正确的插件依赖:

dependencies:
  unilinks: ^0.5.1 # 使用最新稳定版本

执行flutter pub get完成依赖安装。

3. 完善代码错误捕获逻辑

当前初始化代码未处理异常,可能导致插件初始化失败无法察觉,建议添加异常捕获:

Future<void> initDeepLinks() async {
  try {
    // 检查应用启动时的DeepLink
    final initialLink = await uni_links.getInitialLink();
    handleDeepLink(initialLink);

    // 监听应用运行中的DeepLink
    uni_links.linkStream.listen(
      handleDeepLink,
      onError: (err) {
        print('DeepLink监听错误: $err');
      },
    );
  } catch (e) {
    print('DeepLink初始化失败: $e');
  }
}

4. 采用可靠的测试方式

部分浏览器对自定义Scheme支持有限,推荐以下测试方法:

  • adb命令测试(最稳定):
adb shell am start -W -a android.intent.action.VIEW -d "unilink://myhost" com.your.package.name

将com.your.package.name替换为你的Flutter应用包名(可在AndroidManifest.xml的package属性中查看)。

  • 网页触发测试:创建简单HTML文件,通过a标签触发链接:
<a href="unilink://myhost">打开我的应用</a>

在设备浏览器中打开该HTML文件并点击链接测试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:03:18