Flutter deep link如何获取query parameters 无需Firebase方案咨询
深度链接查询参数获取方案(无需Firebase Dynamic Links)
一、uni_links参数获取实现(你此前没找到的参数获取逻辑)
uni_links本身仅负责透传完整的深度链接字符串,没有单独封装参数查询能力,需要结合Dart内置Uri类完成参数解析,正确实现步骤如下:
- 先确认原生端配置没有截断参数:
- Android端
intent-filter的android:pathPattern不要配置过窄导致参数被丢弃,确保scheme、host配置匹配你的深度链接规则 - iOS端Universal Links的Associated Domains配置、Custom URL Scheme配置不要加多余的路径限制,避免query部分被系统截断
- Android端
- Flutter层参数解析代码示例:
import 'package:uni_links/uni_links.dart'; import 'dart:core'; // 应用冷启动场景获取初始深度链接参数 Future<void> getInitLinkParams() async { try { final String? fullLink = await getInitialLink(); if (fullLink != null) { // 用Uri类直接解析完整链接字符串 Uri parsedUri = Uri.parse(fullLink); // 获取所有查询参数的Map集合 Map<String, String> queryParams = parsedUri.queryParameters; // 按需取对应参数即可,例:取名为uid的参数 String? uid = queryParams['uid']; } } catch (e) { // 异常处理逻辑 } } // 应用在后台存活时监听深度链接跳转 void listenLinkEvent() { linkStream.listen((String? newLink) { if (newLink != null) { Uri parsedUri = Uri.parse(newLink); Map<String, String> queryParams = parsedUri.queryParameters; // 业务处理逻辑 } }); }
排查提示:如果依旧拿不到参数,优先打印完整的fullLink/newLink字符串,确认原生层是否已经把完整链接传递到了Flutter侧
二、替代uni_links的可选方案
- 采用维护更活跃的
app_links插件:全平台兼容的深度链接处理插件,使用逻辑和uni_links一致,返回完整链接字符串后用Uri类解析即可拿到参数 - 原生层自实现桥接:不依赖第三方插件的情况下,Android端在
MainActivity的onCreate、onNewIntent方法中获取完整的intent data,iOS端在AppDelegate的对应链接回调方法中获取完整链接,通过MethodChannel传递到Flutter层后自行解析即可
常见踩坑点排查
- 确认邮件客户端的链接没有经过中间重定向服务丢弃查询参数
- Android端如果配置了
singleTask/singleInstance启动模式,要在onNewIntent中调用setIntent更新intent数据,避免读取旧的空参数链接 - iOS端Universal Links不要限制死具体路径,确保通配符覆盖完整的跳转规则
内容的提问来源于stack exchange,提问作者HD_
相关产品推荐
相关产品推荐

