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
相关产品推荐
相关产品推荐

