如何在Android中精准匹配指定Query参数的Deep Link?
解决方案:通过Manifest的Intent Filter精确匹配Deep Link
你可以利用Android的sspPattern属性精确匹配查询参数,结合路径规则,直接在Manifest层实现仅允许目标Deep Link的需求,无需后续跳转判断。
正确的Intent Filter配置
替换你当前的<data>标签为以下配置:
<data android:host="example.com" android:scheme="https" android:sspPattern="/magic_links/.*\\?.*client_id=android($|&)" />
配置说明
sspPattern负责匹配URL中路径+查询参数的完整片段(scheme-specific part),这是核心——pathPattern仅作用于路径部分,无法识别?后的查询参数,这也是你之前尝试失效的原因。/magic_links/.*:确保路径以/magic_links/开头,后续可匹配任意字符(对应你的UUID部分)。\\?:转义匹配查询参数的起始问号?(正则中?是特殊字符,必须转义才能匹配实际的问号)。.*client_id=android:匹配包含client_id=android的查询参数段,允许该参数前后存在其他查询参数;如果需要严格只允许这一个参数,可改为client_id=android$。($|&):确保client_id=android的结尾要么是链接的结束,要么是下一个参数的分隔符&,彻底排除client_id=android1这类参数值不精确的情况。
之前方案无效的原因
android:sspPattern=".*?client_id=android":该规则会匹配client_id=android1,因为android是android1的子串,无法精确限制参数值。android:pathPattern="/magic_links/.*client_id=android.*":pathPattern仅处理URL的路径部分,完全不会识别?后的查询参数内容,因此对目标规则无效。
内容的提问来源于stack exchange,提问作者Paraskevas Ntsounos
相关产品推荐
相关产品推荐

