Android非Chrome浏览器通过App Link唤起应用异常相关问题咨询
问题1:为什么不同浏览器的行为存在差异?为什么非Chrome浏览器无法像Chrome一样直接唤起应用,而是先跳转至站点再唤起应用?
Chrome作为Google官方出品的浏览器,严格遵循Android系统的App Link标准逻辑:只要你的应用在清单中配置了对应域名的App Link,且域名根目录下的assetlinks.json验证通过,Chrome会直接跳过网页加载步骤,调用系统级Intent分发直接唤起应用,同时把完整的原始URL传给应用。
而绝大多数第三方浏览器(三星浏览器、火狐等)都自行实现了链接跳转逻辑,没有对接系统级的App Link校验能力,遇到HTTPS协议的链接时默认会先加载对应网页,再执行网页内部的跳转逻辑,不会直接唤起应用,因此会出现先访问站点再触发唤起的表现。
问题2:如何在不修改站点代码的前提下解决该问题,是否仅通过修改Android应用清单即可实现?
如果完全无法修改站点代码,仅靠修改应用清单无法彻底解决所有非Chrome浏览器的参数丢失问题。
原因是你拿到的自定义Scheme无参数、跳转Play Store的行为都是网页内部逻辑触发的,应用侧无法干预网页的跳转逻辑。你可以尝试优化清单配置适配支持系统App Link校验的环境:
- 给对应HTTPS域名的Intent Filter添加
android:autoVerify="true"属性,触发系统级域名验证 - 细化路径匹配规则,明确匹配
/payment/applink.html路径,同时保留对query参数的捕获能力 - 确保Intent Filter同时声明
<category android:name="android.intent.category.BROWSABLE" />和<category android:name="android.intent.category.DEFAULT" />
如果优化后仍无法覆盖所有浏览器,建议直接切换为自定义Scheme的唤起方式,成本最低适配性最好。
问题3:我后续测试了自定义Scheme的App Link,所有浏览器表现一致,均可正常唤起应用,为什么自定义Scheme可以实现各浏览器行为统一?
自定义Scheme不属于HTTP/HTTPS这类通用网页协议,所有浏览器对非网页协议的处理逻辑是统一的:不会尝试加载对应网页,直接将链接交给系统Intent分发处理,匹配系统中注册了对应Scheme的应用,该逻辑没有浏览器自定义的空间,因此所有浏览器表现一致。
同时自定义Scheme不需要做域名所有权验证,不会触发网页加载流程,自然不会出现参数丢失、跳转Play Store的问题。
问题4:为什么点击https://mobile.meta.com/payment/applink.html链接可以通过自定义Scheme唤起应用?该站点后台做了什么逻辑可以同时唤起应用并跳转Play Store页面?
该站点的前端页面写了固定的JS跳转逻辑,和后台配置无关:
- 页面加载完成后,会首先尝试通过
window.location跳转或者iframe加载你配置的自定义Scheme链接,触发应用唤起 - 同时会启动一个延时任务,如果指定时间内跳转自定义Scheme失败(判定为用户未安装应用),就自动跳转至应用的Play Store详情页
你拿到的自定义Scheme无参数,是因为页面的JS逻辑没有把原始HTTPS链接的查询参数拼接在自定义Scheme后面,属于页面逻辑的问题。你手动输入URL时会正常加载页面执行相同的JS逻辑,因此也会触发Play Store跳转。
内容的提问来源于stack exchange,提问作者Stephen Fong
相关产品推荐
相关产品推荐

