配置含特殊字符的pathPrefix后Deeplink无法正常运行如何解决
失效原因
Android 的 Intent Filter 中,pathPrefix 属性仅匹配 URI 的路径部分,不会匹配查询参数内容。
标准 URI 结构为 [scheme]://[host][path]?[query]#[fragment],其中 ? 是路径和查询参数的分隔符,不属于路径的组成部分,所以你将包含 ? 的内容写到 pathPrefix 中自然无法正常匹配。
解决方案
分两种场景处理:
- 场景1:
?mypage.php本身就是路径的一部分,不是查询参数前缀
对特殊字符?做 URL 编码转义即可,?对应的编码值为%3F,修改配置:<data android:pathPrefix="/%3Fmypage.php" /> - 场景2:
mypage.php属于查询参数,完整 URI 形式为http://www.mywebsite.com/?mypage.php
Android 原生 Intent Filter 不支持直接匹配查询参数,可通过两种方式处理:- 放宽
pathPrefix配置,在业务层做参数校验
先把路径匹配规则改成匹配根路径:
再在跳转目标 Activity 中获取 URI 自行校验:<data android:pathPrefix="/" />Uri deeplinkUri = getIntent().getData(); if (deeplinkUri != null && deeplinkUri.toString().startsWith("http://www.mywebsite.com/?mypage.php")) { // 匹配成功,执行对应业务逻辑 }- 使用
pathPattern做模糊匹配
用通配符规则匹配包含目标内容的路径,pathPattern中.代表匹配任意字符,*代表匹配0个或多个前面的字符:
<data android:pathPattern="/.*mypage.php" /> - 放宽
内容的提问来源于stack exchange,提问作者Zammy
相关产品推荐
相关产品推荐

