Android浏览器Intent跳转异常:已安装App却打开Google Play商店
问题背景
使用如下Intent链接在网站唤起安卓应用:
intent:<someContextForTheApp>#Intent;scheme=<appScheme>;action=android.intent.action.VIEW;S.browser_fallback_url=<urlToAppPageInPlaystore>;end
应用已配置对应scheme的Intent Filter,原本逻辑是已安装应用则唤起,未安装则跳转Google Play,近期无论应用是否安装都直接跳商店,但本地HTML文件中点击相同链接可正常唤起。
可能的原因
浏览器安全策略更新:主流安卓浏览器(如Chrome)近期调整了Intent链接的处理规则,针对线上HTTPS网站的Intent跳转增加了限制,比如要求必须搭配
intent://协议的正确格式,或者需要额外的用户交互触发(不能通过脚本自动跳转,必须用户手动点击),而本地HTML属于file://协议不受此限制。网站HTTPS配置问题:部分浏览器对HTTPS网站的Intent跳转有更严格的校验,比如要求页面有正确的CSP(内容安全策略)配置,若CSP中禁止了Intent协议的跳转,会直接触发fallback URL。本地HTML没有CSP限制,所以能正常工作。
应用Intent Filter配置变更:近期更新应用时,可能误改了Intent Filter参数,比如scheme大小写错误、action匹配规则变更,或者移除了
android.intent.category.BROWSABLE这类关键配置,导致浏览器无法识别已安装应用,直接触发回退。但本地测试用的是未更新的应用包,所以不受影响。Google Play商店拦截逻辑调整:部分地区或版本的Google Play商店更新了跳转处理逻辑,当检测到Intent链接来自线上网站时,直接拦截并打开商店页面,绕过了浏览器的应用检测步骤。本地文件的跳转不在拦截范围内。
浏览器缓存数据异常:用户浏览器的应用协议关联缓存出现异常,导致无法正确识别本地已安装的应用,直接触发fallback。本地HTML使用的是无缓存干扰的上下文,所以正常。
内容的提问来源于stack exchange,提问作者mjsxbo

