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

应用终止状态下通过Firebase动态链接打开崩溃问题排查

Firebase动态链接在应用终止状态打开崩溃问题排查

问题描述

我已在应用中集成Firebase动态链接,该功能在应用处于前台和后台状态时运行正常,但当应用处于终止状态时,通过动态链接打开会导致崩溃。动态链接已被打印且不为空,但打开后出现半黑半红的空白屏。

处理动态链接的代码如下:

static Future<void> initDynamicLinks() async {
    try {
      // terminated state
      final PendingDynamicLinkData initLink =
          await FirebaseDynamicLinks.instance.getInitialLink();
      if (initLink != null) {
        print('init link $initLink');
        final Uri deeplink = initLink?.link;
        if (deeplink != null) {
          print('routing');
          // routing(deeplink, deeplink.queryParameters);
        } else {
          print('deep link is null');
        }
      } else {
        print('init link is null');
      }
    } catch (e) {
      print('error getting link $e');
    }

    // background and foreground states
    FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) async {
      final Uri deeplink = dynamicLinkData.link;
      final queryParams = deeplink.queryParameters;
      if (deeplink != null) {
        routing(deeplink, queryParams);
      } else {
        print('listen link is null');
      }
    }).onError((error) {
      print('onLink error');
      print(error.message);
    });
  }

注:routing是用于导航至指定路径的函数。

可能的原因及解决方案

  • 导航时机过早:应用终止状态下,initDynamicLinks可能在Flutter Widget树未完全初始化时就调用routing,导致导航上下文未就绪引发异常。
    解决:将导航逻辑延迟到Widget树初始化完成后执行,比如使用WidgetsBinding.instance.addPostFrameCallback:

    if (deeplink != null) {
      print('routing');
      WidgetsBinding.instance.addPostFrameCallback((_) {
        routing(deeplink, deeplink.queryParameters);
      });
    }
    
  • routing函数依赖资源未初始化:前台/后台状态下可用的资源(如Bloc、Provider实例)在终止状态下可能还未加载完成,直接调用routing会因资源缺失崩溃。
    解决:检查routing中依赖的所有资源,确保导航前这些资源已初始化。可通过Future.wait等待必要资源加载完毕后再执行导航,或在导航前添加状态校验。

  • 路由路径未注册:动态链接解析后的路由路径未在应用路由表中定义,导致导航时找不到对应页面,出现空白屏。
    解决:打印deeplink.path确认路径正确性,检查应用路由表是否包含该路径,确保所有动态链接对应的路由都已正确注册。

  • 原生端配置错误:终止状态下的动态链接处理依赖Android/iOS原生配置,比如Android的AndroidManifest.xml中intent-filter配置错误,或iOS的Associated Domains、Info.plist配置缺失。
    解决:核对Firebase官方文档的原生配置步骤,确保Android的intent-filter包含正确的scheme和host,iOS已添加动态链接域名到Associated Domains,且Info.plist中FirebaseDynamicLinksCustomDomains配置正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:15:34