Firebase动态链接无法接收多个查询参数的问题咨询
解决Firebase DeepLink多查询参数获取问题
你遇到的问题核心出在两个关键地方:深层链接的参数格式错误,以及没有同时获取并传递两个参数给joinMeeting方法,下面一步步帮你修正:
1. 修复深层链接的参数格式
首先看你的字符串资源里的链接模板:
<string name="app_deep_link_url">https://example.in/?meetingCode=%1$s?meetingToken=%2$s</string>
这里的问题是用了第二个?来分隔第二个参数,而URL中多查询参数的正确分隔符是&,所以要改成:
<string name="app_deep_link_url">https://example.in/?meetingCode=%1$s&meetingToken=%2$s</string>
之前的错误格式会导致meetingToken被解析成meetingCode参数值的一部分(比如myuser?meetingToken=rtgdhh...),自然无法正确获取到meetingToken参数。
2. 修正动态链接的参数获取逻辑
你的handleDynamicLink方法里只获取了meetingCode并调用joinMeeting,但joinMeeting需要两个参数,所以要同时获取两个参数,并且确保都存在的时候再调用方法:
private fun handleDynamicLink() { Firebase.dynamicLinks .getDynamicLink(intent) .addOnSuccessListener { pendingDynamicLinkData -> pendingDynamicLinkData?.link?.let { deepLink -> val meetingCode = deepLink.getQueryParameter("meetingCode") val meetingToken = deepLink.getQueryParameter("meetingToken") // 确保两个参数都不为空再调用方法 if (!meetingCode.isNullOrEmpty() && !meetingToken.isNullOrEmpty()) { joinMeeting(meetingCode, meetingToken) } else { // 处理参数缺失的情况,比如提示用户链接无效 toast(getString(R.string.main_invalid_deep_link)) } } ?: run { toast(getString(R.string.main_error_fetch_dynamic_link)) } } .addOnFailureListener { _ -> toast(getString(R.string.main_error_fetch_dynamic_link)) } }
这里的改动细节:
- 同时获取
meetingCode和meetingToken两个参数 - 添加参数非空校验,避免因为参数缺失导致的方法调用错误
- 优化了空值处理逻辑,代码更简洁易读
3. 可选:添加参数缺失的提示资源
建议在strings.xml里补充一个链接无效的提示文本:
<string name="main_invalid_deep_link">无效的会议链接,请检查后重试</string>
验证修改效果
修改完成后,生成的深层链接格式会变成正确的:https://example.in/?meetingCode=myuser&meetingToken=rtgdhh.tywufgsioqpp
此时deepLink.getQueryParameter("meetingToken")就能正确拿到参数值,调用joinMeeting(meetingCode, meetingToken)也不会再出现参数缺失的错误了。
内容的提问来源于stack exchange,提问作者Chris John
相关产品推荐
相关产品推荐

