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

Flutter应用无法读取Firebase动态链接问题求助

Flutter Firebase动态链接返回null的排查与解决

一、补全AndroidManifest配置

你的AndroidManifest.xml仅配置了短链接域名(******.page.link)的intent-filter,但动态链接的目标域名是*******.tn,需补充对应域名的配置,同时确保所有intent-filter都在MainActivity标签内:

<activity
    android:name=".MainActivity"
    android:exported="true">
    <meta-data 
        android:name="flutter_deeplinking_enabled" 
        android:value="true"/>
    <!-- 短链接域名的intent-filter -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https" android:host="******.page.link" />
    </intent-filter>
    <!-- 目标域名的intent-filter -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https" android:host="*******.tn" />
    </intent-filter>
</activity>

注意android:autoVerify="true"需要在目标域名(*******.tn)的.well-known目录下部署assetlinks.json文件,文件内容参考Firebase控制台动态链接页面的指引,确保通过浏览器访问https://*******.tn/.well-known/assetlinks.json能正常获取内容。

二、修正动态链接读取代码

  1. 区分getDynamicLink与resolveShortLink的用法:
    • getDynamicLink用于获取应用冷启动时的pending链接(用户点击链接打开应用时的初始链接),不能主动解析短链接。
    • 主动解析短链接需使用resolveShortLink:
      // 主动解析短链接示例
      PendingDynamicLinkData? resolvedData = await FirebaseDynamicLinks.instance.resolveShortLink(Uri.parse("https://******.page.link/test"));
      if (resolvedData != null) {
        print("解析后的链接: ${resolvedData.link.toString()}");
      } else {
        print("短链接解析失败");
      }
      
  2. 同时处理冷启动与热启动场景:
    Future<void> initDynamicLinks() async {
      FirebaseDynamicLinks dynamicLinks = FirebaseDynamicLinks.instance;
    
      // 监听应用后台运行时收到的链接(热启动)
      dynamicLinks.onLink.listen((dynamicLinkData) {
        final Uri uri = dynamicLinkData.link;
        print("收到动态链接: ${uri.toString()}");
      }).onError((error) {
        print("链接监听错误: $error");
      });
    
      // 获取应用冷启动时的pending链接
      PendingDynamicLinkData? initialLink = await dynamicLinks.getInitialLink();
      if (initialLink != null) {
        final Uri uri = initialLink.link;
        print("冷启动链接: ${uri.toString()}");
      } else {
        print("无冷启动pending链接");
      }
    }
    
  3. 避免使用强制解包(data!),先判断数据是否为null,防止崩溃。

三、验证Firebase基础配置

  • 确认Firebase控制台的动态链接域名已关联你的安卓应用,且添加了应用的SHA-1和SHA-256指纹(路径:项目设置→应用→安卓应用→指纹)。
  • 检查google-services.json文件是否正确放置在安卓项目的app目录下,文件中的包名与应用实际包名一致。

四、正确调试方式

真机调试时,不要直接在代码中硬编码短链接调用getDynamicLink,通过以下方式触发链接测试:

  1. 将短链接发送到测试手机,点击链接打开应用。
  2. 使用adb命令模拟Intent启动:
    adb shell am start -W -a android.intent.action.VIEW -d "https://******.page.link/test" com.your.app.package
    
    替换com.your.app.package为你的应用包名,执行后查看控制台输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:25:41