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

Flutter Firebase动态链接在WhatsApp点击后内部打开应用问题问询

根因说明

该问题由Android系统任务栈机制触发:WhatsApp唤起第三方应用时,默认会将拉起的应用Activity放入WhatsApp自身的任务栈中,不会为应用创建独立任务栈。后续从桌面启动器打开应用时,系统会为应用创建新的独立任务栈,最终出现两个应用实例同时运行的情况。

修复方案

1. 调整AndroidManifest.xml配置

找到你的应用启动页对应的Activity节点,添加/修改以下属性:

<activity
    android:name=".MainActivity"
    <!-- 核心配置:全局仅维护一个应用任务栈 -->
    android:launchMode="singleTask"
    <!-- 允许其他应用唤起的Activity转移到应用自身任务栈 -->
    android:allowTaskReparenting="true"
    <!-- 其余原有配置保持不变 -->
    >
    <!-- 原有intent-filter配置保持不变 -->
</activity>

2. 补充Flutter层动态链接监听逻辑

你现有代码仅处理了应用冷启动时的初始链接获取场景,singleTask模式下应用已在后台运行时被唤起,不会触发getInitialLink回调,需要额外添加实时链接监听:

// 原有初始化逻辑保留
FirebaseDynamicLinks.instance.getInitialLink().then((value){
    if (value != null){
        if (value.link.queryParameters["challenge_id"] != null){
            DesafioModel desafioModel = DesafioModel();
            desafioModel.id = value.link.queryParameters["challenge_id"];
            Get.offNamed("$CHALLENGE_DETAILS_ROUTE", arguments: desafioModel);
         }
     }
 });

// 新增动态链接实时监听,处理应用已启动时的唤起场景
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  final challengeId = dynamicLinkData.link.queryParameters["challenge_id"];
  if (challengeId != null) {
    DesafioModel desafioModel = DesafioModel();
    desafioModel.id = challengeId;
    Get.offNamed("$CHALLENGE_DETAILS_ROUTE", arguments: desafioModel);
  }
}).onError((e) {
  // 可自行添加链接解析异常的兼容逻辑
});

验证标准

配置修改完成后测试:

  • WhatsApp内点击动态链接,可正常跳转应用对应挑战详情页
  • 按Home键回到桌面,点击应用图标打开,直接显示之前打开的详情页,不会重复触发启动页逻辑
  • 系统后台仅存在一个应用实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:39:03