Firebase双子域配置问题:动态链接跳转至Web端异常
Firebase动态链接跳转异常与404问题排查方案
问题场景
- Firebase Hosting配置两个子域,Flutter Web应用运行正常
- 将其中一个子域关联至Firebase Dynamic Links后,生成的动态链接始终跳转至Web版本
- 调整
firebase.json中rewrites规则顺序后,长链接出现「页面未找到」错误
附:当前配置与代码
firebase.json 配置
{ "hosting": { "public": "build/web", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "rewrites": [ // 调整过顺序的路由重写规则 ] } }
Flutter端动态链接构建代码
final dynamicLinkParams = DynamicLinkParameters( uriPrefix: 'https://your-subdomain.page.link', link: Uri.parse('https://your-app.com/deep-link'), androidParameters: AndroidParameters( packageName: 'com.your.app', minimumVersion: 123, ), iosParameters: IOSParameters( bundleId: 'com.your.app', minimumVersion: '1.0.0', ), ); final dynamicLink = await dynamicLinkParams.buildShortLink();
Firebase控制台截图
排查与修复步骤
1. 拆分Dynamic Links与Hosting的子域关联
Dynamic Links关联的子域不能同时作为Flutter Web的托管子域,Firebase会优先将该子域的请求导向Dynamic Links服务,而非Hosting。操作:
- 从Firebase Hosting「自定义域」列表中移除关联Dynamic Links的子域
- 确认Dynamic Links控制台中该子域状态为「已验证」
2. 修正firebase.json的rewrites规则
规则顺序会直接影响路由匹配,确保非Dynamic Links子域的请求优先指向Flutter Web,同时不干扰Dynamic Links子域的默认处理。示例配置:
{ "hosting": { "public": "build/web", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "rewrites": [ // 仅针对非Dynamic Links子域的请求,重写至Flutter入口 { "source": "**", "condition": { "host": "your-web-subdomain.yourdomain.com" }, "destination": "/index.html" } ] } }
注:如果Dynamic Links子域仍在Hosting的自定义域列表中,
rewrites规则会覆盖Dynamic Links的默认跳转逻辑,导致异常或404。
3. 校验动态链接参数配置
Flutter端构建时需确保:
uriPrefix严格匹配Dynamic Links控制台中关联的子域(如https://your-subdomain.page.link)androidParameters/iosParameters填写的包名、Bundle ID与移动端App完全一致- 若需Web端也处理深层链接,需确保
link参数对应的路由在Flutter Web中已配置
4. 部署与测试
- 重新部署Hosting配置:
firebase deploy --only hosting - 使用无痕模式测试动态链接,避免缓存干扰
- 利用Firebase控制台的「测试动态链接」工具验证跳转逻辑
内容的提问来源于stack exchange,提问作者yyyy
相关产品推荐
相关产品推荐

