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能正常获取内容。
二、修正动态链接读取代码
- 区分
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("短链接解析失败"); }
- 同时处理冷启动与热启动场景:
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链接"); } } - 避免使用强制解包(
data!),先判断数据是否为null,防止崩溃。
三、验证Firebase基础配置
- 确认Firebase控制台的动态链接域名已关联你的安卓应用,且添加了应用的SHA-1和SHA-256指纹(路径:项目设置→应用→安卓应用→指纹)。
- 检查
google-services.json文件是否正确放置在安卓项目的app目录下,文件中的包名与应用实际包名一致。
四、正确调试方式
真机调试时,不要直接在代码中硬编码短链接调用getDynamicLink,通过以下方式触发链接测试:
- 将短链接发送到测试手机,点击链接打开应用。
- 使用adb命令模拟Intent启动:
替换adb shell am start -W -a android.intent.action.VIEW -d "https://******.page.link/test" com.your.app.packagecom.your.app.package为你的应用包名,执行后查看控制台输出。
内容的提问来源于stack exchange,提问作者Fedy Belaid
相关产品推荐
相关产品推荐

