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

Flutter中FirebaseDynamicLinks跨Host链接无法被onLink.listen捕获

问题解决思路

问题出在哪

onLink.listen默认只会监听和当前应用uriPrefix同Host的链接,哪怕你允许列表里加了另一个Host的规则,跨Host的链接还是不会被触发拦截——多数路由库都默认这么限制,避免误处理外部链接。

具体调整步骤

1. 给路由库添加双Host前缀

拿常用的React Navigation举例,你需要把两个Host都加到prefixes配置里,让路由库明确这两个Host的链接都属于它的处理范围:

const linking = {
  prefixes: ['https://testshare.host.us', 'https://test.host.us'],
  config: {
    screens: {
      // 此处填写你的路由映射配置
    },
  },
};

如果用的是其他路由库,找类似「允许的前缀」「Host白名单」的配置项,把两个Host都添加进去即可。

2. 检查并优化允许列表正则

你当前的两个正则规则本身没问题,但可以稍微调整得更灵活,避免匹配遗漏:

^https:\/\/testshare.host.us\/?(\?id=[0-9]{1,10}&type=[A-Za-z]+)?$

不过核心还是要让路由库识别跨Host链接属于可拦截范围,正则只是辅助匹配。

3. 手动编写拦截逻辑兜底

如果默认配置不生效,直接自定义监听逻辑,手动判断链接是否符合规则:

import { Linking } from 'react-native';

Linking.addEventListener('url', (event) => {
  const targetUrl = event.url;
  // 把允许规则整理成正则数组
  const allowedRules = [
    /^https:\/\/testshare.host.us\/?id=[0-9]{1,10}&type=[A-Za-z]+/,
    /^https:\/\/test.host.us\/.*$/
  ];
  // 匹配任意一条规则就执行处理逻辑
  if (allowedRules.some(rule => rule.test(targetUrl))) {
    // 此处填写你的链接处理逻辑
    handleDeepLink(targetUrl);
  }
});

关键系统配置提醒

不管用哪种方法,都要在iOS的Info.plist或Android的AndroidManifest.xml中,把两个Host都配置为应用可处理的链接,否则系统不会把对应链接传递给你的应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:26:37