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

Flutter集成Firebase动态链接无法读取链接内参数问题求助

问题原因及解决办法

问题根源

你创建动态链接时,link参数误用了Firebase动态链接的域名(mydomain.page.link),同时uriPrefix设置成了带路径的https://mydomain.page.link/share。Firebase处理时会剥离掉与uriPrefix匹配的部分,最终导致深层链接丢失pageName和id参数。

修复步骤

1. 调整深层链接(link参数)

使用自定义的非Firebase域名作为深层链接基础(可以是你自己的域名,或占位域名如https://yourapp.com/deep-link),将参数附加在该链接后。

2. 修改uriPrefix

uriPrefix应为Firebase动态链接的根前缀,即https://mydomain.page.link,不要添加额外路径(如/share)。

修正后的创建函数

Future<Uri> createDynamicLink({bool? short, required String pageName, required String id}) async {
  // 自定义深层链接,携带参数
  final String deepLink = 'https://yourapp.com/deep-link?pageName=$pageName&id=$id';
  Uri uri = Uri.parse(deepLink);
  log("uri $uri");

  final DynamicLinkParameters parameters = DynamicLinkParameters(
    link: uri,
    // 使用Firebase动态链接根前缀
    uriPrefix: 'https://mydomain.page.link',
    androidParameters: const AndroidParameters(
      packageName: 'com.somestuff.somestufff',
    ),
    iosParameters: const IOSParameters(
      bundleId: 'com.somestuff.somestufff',
      appStoreId: "647xxxxxx",
    ),
  );

  Uri url;
  if (short == true) {
    final ShortDynamicLink shortLink = await dynamicLinks.buildShortLink(parameters);
    url = shortLink.shortUrl;
  } else {
    url = await dynamicLinks.buildLink(parameters);
  }
  return url;
}

3. 正确读取参数示例

在应用初始化时添加动态链接监听,解析参数:

void initDynamicLinks() async {
  // 处理应用冷启动时的链接
  final PendingDynamicLinkData? data = await FirebaseDynamicLinks.instance.getInitialLink();
  final Uri? deepLink = data?.link;
  _handleDeepLink(deepLink);

  // 处理应用后台唤起时的链接
  FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
    _handleDeepLink(dynamicLinkData.link);
  }).onError((error) {
    log("动态链接错误: $error");
  });
}

void _handleDeepLink(Uri? deepLink) {
  if (deepLink != null) {
    String? pageName = deepLink.queryParameters['pageName'];
    String? id = deepLink.queryParameters['id'];
    log("获取到参数: pageName=$pageName, id=$id");
    // 这里编写页面跳转逻辑
  }
}

额外注意事项

  • 若使用自定义域名,需在Firebase控制台的动态链接设置中完成域名配置;直接用Firebase提供的page.link域名则无需额外配置。
  • 测试时建议通过分享或短信发送链接后打开,避免模拟器/真机的缓存干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:56:24