Firebase Hosting托管网站无法通过Deep Link打开Flutter应用求助
Firebase Hosting下Flutter Deep Link失效排查方案
核心问题定位
你用adb测试Deep Link逻辑正常,但实际通过域名触发失效,结合Firebase Hosting的配置,大概率是静态资源部署规则或请求路由的问题,以下是具体排查和修复步骤:
1. 修正ignore规则,确保.well-known文件被部署
你的firebase.json中ignore配置包含**/.*,这会匹配所有隐藏目录(包括.well-known),导致该目录下的文件被跳过部署。修改规则如下:
"ignore": [ "firebase.json", "**/node_modules/**", "**/.*[!.well-known]" // 排除.well-known目录,允许其被部署 ]
或者更精准地指定需要忽略的隐藏文件:
"ignore": [ "firebase.json", ".git/**", "**/node_modules/**" ]
2. 调整rewrites规则,避免.well-known请求被重定向
当前的rewrites会把所有请求都导向index.html,包括对.well-known下文件的请求,导致系统无法获取验证文件。修改为:
"rewrites": [ { "source": "!/(.well-known/**)", // 排除.well-known路径的重写 "destination": "/index.html" } ]
3. 配置appAssociation为FILE,使用自定义验证文件
Firebase Hosting默认会自动生成apple-app-site-association文件,覆盖你自定义的内容。需要显式指定使用自己的文件:
"hosting": { "public": "public", "ignore": [/* 修正后的规则 */], "appAssociation": "FILE", // 关键配置,使用自定义的关联文件 "rewrites": [/* 修正后的规则 */] }
4. 验证文件是否正确部署并可访问
执行firebase deploy --only hosting重新部署后,通过以下方式验证:
- 用curl访问:
curl https://<你的域名>/.well-known/assetlinks.json,确认返回正确的JSON内容,且HTTP状态码为200 - 同样验证
apple-app-site-association:curl https://<你的域名>/.well-known/apple-app-site-association,确保返回内容与你本地文件一致,且没有被重定向到index.html
5. 检查验证文件的格式正确性
- assetlinks.json:确认
package_name与AndroidManifest中的包名完全一致,sha256_cert_fingerprints是Google Play Console中显示的十六进制指纹(格式为AA:BB:CC:...,无多余空格) - apple-app-site-association:确认
appID是TeamID.BundleID的格式,paths配置无语法错误(你用["*"]没问题)
内容的提问来源于stack exchange,提问作者Ali Alqallaf
相关产品推荐
相关产品推荐

