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

App关闭/杀死时Firebase Dynamic Link无法跳转指定页面求助

解决Firebase动态链接冷启动跳转失效问题

你的代码只处理了App处于运行状态(前台/后台)时的动态链接跳转,但**冷启动场景(App被杀死后点击链接启动)**需要主动获取初始链接并处理,这就是问题所在。

修改initDynamicLinks方法,添加冷启动链接的处理逻辑:

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
import 'dart:developer' as developer;

Future<void> initDynamicLinks() async {
  // 处理冷启动场景的初始链接
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();
  if (initialLink != null) {
    handleDynamicLink(initialLink);
  }

  // 处理App运行时的链接跳转(热启动/后台唤醒)
  FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
    handleDynamicLink(dynamicLinkData);
  }).onError((error) {
    developer.log(error.message.toString());
  });
}

// 统一处理动态链接跳转逻辑,避免重复代码
void handleDynamicLink(PendingDynamicLinkData dynamicLinkData) {
  final String linkStr = dynamicLinkData.link.toString();
  final String id = linkStr.substring(linkStr.lastIndexOf('/') + 1);
  // 延迟执行跳转,确保路由环境已初始化
  WidgetsBinding.instance.addPostFrameCallback((_) {
    Get.to(() => Page(id: id));
  });
}

@override
void initState() {
  initDynamicLinks();
  super.initState();
}

关键说明:

  1. getInitialLink():专门用于获取App冷启动时携带的动态链接,返回非空值说明是通过点击动态链接启动的App
  2. 统一跳转逻辑:把解析链接和跳转的代码抽成handleDynamicLink方法,减少重复代码
  3. addPostFrameCallback:确保在Widget树构建完成后再执行路由跳转,避免GetX路由未初始化导致的跳转失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:35:18