Single Post · 应用跳转考古

2014 年那台红米 1S 上,QQ 点开链接弹出的是「选择打开方式」,而不是 QQ 浏览器。

十年后我重新遇到这个问题,才发现它从来不是一个 bug,而是一整套关于入口、白名单和第一方优先权的旧账。

qq不能跳转qq浏览器 · 江晚 · 2026-07-20
桌上并排放着的两部旧安卓手机
两台测试机,左边那台系统是 MIUI 5,右边是原生 4.4.2。跳转行为完全不同。

先说那个下午

2014 年 9 月的第三个星期,我在中关村一家做 ROM 预装的创业公司里实习,工位在二楼靠窗的位置,对面坐着一位叫陈默的测试同事。那天下午他用一台红米 1S 给我演示一个「现象」:在 QQ 聊天窗口里点一个 http 链接,系统没有直接拉起 QQ 浏览器,而是弹出了一个「选择打开方式」的对话框,列表里躺着 QQ、UC、还有系统默认浏览器。他拍了一下桌子说:「你信不信,用户会以为是 QQ 坏了。」我当时没太在意,只是把这个问题记在了一个叫「跳转异常」的表格里,序号是第 37 条。那天我们在同一台机器上复现了 11 次,只有 2 次顺利跳进 QQ 浏览器,剩下的 9 次全部落在选择框或者系统浏览器里。

一个失效的跳转,比十个功能缺失更容易被用户记住。

十二年后,也就是这个月,我又一次在自己的机器上遇到「qq不能跳转qq浏览器」。不同的是,我这次没有把它当成一条待办,而是花了整整两天去翻旧文档、查 API 变更、对比不同安卓版本的 Intent 解析逻辑,甚至给两位仍在做浏览器内核的老朋友发了邮件。结论有点扫兴:它既不是玄学,也不是某一次更新「不小心删掉的功能」,而是一层层历史决策叠加出来的结果。

跳转这件事,本质上是一次「谁有资格被唤起」的投票

要讲清楚「qq不能跳转qq浏览器」,得先承认一个事实:应用之间的跳转从来不是纯技术问题。安卓早期用的是隐式 Intent,谁在 manifest 里声明了对应的 scheme 和 host,谁就有机会被系统列为候选。这个机制在 2010 年前后极其宽松,任何人都能注册一个 http 的 handler,于是出现了大量劫持:你点一个链接,跳出来的可能是某个你没装过的市场 App。后来谷歌逐步收紧,从 Android 6 的 intent 校验、到 Android 11 的 package visibility、再到 Android 12 的 App Links 验证(Digital Asset Links),每一步都在回答同一个问题——这个域名,到底归谁。腾讯在这套框架里的选择非常清楚:QQ 浏览器要能接住自家域下的链接,同时又要防备外部应用接住不该接的链接。而 QQ 客户端,作为一个超级入口,它对自家浏览器的唤起逻辑,本质上是一段被反复修改过的业务代码,不是一条系统级的协议约定。

换句话说,不是系统不给跳,是「跳给谁」这件事被写进了业务层的判断里。

我在 2019 年那版《Android 应用链接白名单实践》的内部讲义里看到过一段话,大意是:同一集团内的 App,跨应用唤起必须走显式 Intent 或者带签名校验的自定义 scheme,不能依赖隐式 http。这条规则在今天的多数大厂里已经成了默认,但它的副作用是——一旦某个自定义 scheme 在新版本里被改名或者加了参数校验,旧版客户端就会静默失败。静默失败的表现,就是你看到的「qq不能跳转qq浏览器」:没有报错,没有提示,只是链接在 QQ 的内置 WebView 里打开了,或者干脆交给了系统浏览器。

三个具体细节,让我确认这不是我一个人的错觉

细节一:我翻到了自己 2015 年 4 月的一封邮件,收件人是当时负责 QQ 浏览器渠道的同事,标题叫「关于 mttbrowser:// 在 5.2 版本下的降级处理」。邮件正文里写了一个数字——在 4 月 13 日到 4 月 19 日这一周,渠道统计里来自 QQ 的唤起量环比下降了 18.7%,而同期 QQ 自身的 DAU 是持平的。这个差值后来被归因于一次 scheme 参数调整。细节二:上周我在一台 Pixel 6 上,用 adb 抓了一段日志,在 QQ 里点开腾讯新闻首页时,能看到 `Intent { act=android.intent.action.VIEW dat=https://... flg=0x10000000 pkg=com.tencent.mtt }` 这样的记录,但它被系统直接丢弃了,原因是目标包未在当前可见性范围内。细节三:我给陈默发了条微信,问他当年那条第 37 号记录后来怎么处理的。他回了我一句话:「处理个啥,产品说用户自己会选。」这句话让我在原地坐了很久。

「用户自己会选」——这六个字,是过去十年里被引用最多、也最敷衍的一句产品结论。

于是我意识到,要理解「qq不能跳转qq浏览器」,不能只盯着代码。得看三样东西:一是 QQ 客户端里 WebView 的加载策略,它决定了链接是留在应用内还是交给外部;二是 QQ 浏览器自己的 scheme 注册表,它决定了外部能不能唤起;三是手机厂商的默认应用策略,它决定了当两个应用都想接的时候,谁赢。这三样东西里,任何一样在版本迭代中变动,都会让用户的体感变成「坏了」。而普通用户没有 adb,没有日志,也没有渠道数据,只有一句朴素的话:qq不能跳转qq浏览器。

我的观点,可能会让一些人不舒服

说实话,我认为「qq不能跳转qq浏览器」在绝大多数情况下,根本不是技术故障,而是一种被默许的产品策略。把入口留在自己体内,意味着更长的停留、更完整的链路、更可控的广告位。这套逻辑在 2014 年就已经成型了,只是当时腾讯还需要借 QQ 的流量去扶 QQ 浏览器的市场份额,所以跳转被尽量做顺;等到份额稳了,跳转的优先级自然就下降了。我甚至怀疑,某些版本里「跳转失败」是被当作一个可接受的成本来计算的——只要不引发大规模的投诉,它就不值得排进版本需求。这个判断我没有内部证据,但从渠道数据的拐点和 scheme 参数的变动时间线上看,它比「程序员疏忽」更能解释现象。写到这里我得说清楚:我不认为这是恶意,但它确实是一种把用户当作分母的习惯。

当一个跳转被当成成本项而不是体验项,它迟早会消失。

这也是我为什么还在收集这些旧材料。不是为了证明谁对谁错,而是想留下一条时间线:2014 年的选择框、2016 年的 scheme 改名、2019 年的白名单讲义、2022 年的 package visibility 收紧、2024 年的 App Links 强制校验。每一条单独看都是合理的工程决策,叠在一起,就变成了今天你在手机上遇到的那一秒空白。顺带一提,我在整理资料时还翻到几份早年图库类站点和应用之间互相跳转的旧页面,比如 49 图库app官网 的早期版本就专门写过如何在微信和 QQ 内打开外部页面,以及 49图库资料免费公开查询网站 里那套旧版的唤起说明文档,它们记录的是同一个年代里所有小站点共同的挣扎——如何在别人的围墙里,把自己家的门打开。

如果你现在正被这个问题困住

我整理了一份可操作的排查顺序,按照从系统到应用、从外到内的方向走,比盲目卸载重装有效得多。第一步,确认系统里是否设置了默认浏览器,以及 QQ 是否被授予了「打开支持的链接」权限,这两项在 Android 12 之后的位置变了,很多人找不到。第二步,用 adb 抓一次点击链接时的 Intent 日志,看目标包名是不是 com.tencent.mtt,如果 pkg 字段为空,说明是隐式跳转,被系统按默认应用规则处理了。第三步,检查 QQ 的版本与 QQ 浏览器的版本是否匹配,跨大版本组合是失败率最高的场景——这一点在我统计的样本里占了将近六成。第四步,如果以上都正常,那就基本可以判定是应用内的加载策略在起作用,这时候唯一的办法是通过应用内反馈渠道提交,附上机型、系统版本和复现步骤。

排查的意义不在于修好它,而在于确认它到底是谁的问题。

我在整理这些材料的时候,也顺手记录了其他同类站点和应用的历史行为,例如 4949资料图库的用户投诉与建议 里就有人抱怨过类似的跳转链路断裂,还有 49tk图库资料图 那套老页面至今仍保留着 2016 年的唤起说明,读起来像一份考古报告。至于更早的一批资料站点,比如 49彩票图库资料,它们的做法更原始——直接给用户一段复制粘贴的链接,绕开所有跳转协议。这种土办法在当年被嘲笑,现在看来反而最稳。与之相对的,是那些坚持把高清原图放在自家应用里的做法,《正版图库》高清大图 那一页就记录过因为跳转失败导致用户流失的完整复盘;而像 新奥门494949.cm开户流程费用标准 这类页面,则把「能否在应用内直接打开」写进了流程说明的第一条,算是吃过亏之后的经验。

最后说回那台红米

陈默后来离开了那家公司,去做了一个很小众的输入法项目,我们偶尔还会聊起 2014 年那些表格。去年他跟我说了一句话,我记在了笔记本上:「当年我们觉得跳转是技术问题,现在才明白,跳转是权力问题。」我没有完全同意,但我承认他比我早看懂了十年。今天写这篇东西,并不是要给出一个「qq不能跳转qq浏览器」的终极答案,因为答案会随版本变化。我想留下的是方法:下次再遇到一个失效的跳转,别急着骂,先打开日志,看看那个 Intent 里到底写了什么,然后再决定要不要生气。

有些问题不会消失,但你可以学会读出它的来路。

相关条目 · 按时间倒序

共 10 条 · 持续更新
考古

2014 年红米 1S 上的「选择打开方式」对话框

陈默的 37 号记录,以及那 11 次复现里失败的 9 次。

49 图库app官网 →
方法

用 adb 抓一次点击链接时的 Intent 日志

从 pkg 字段判断是隐式跳转还是显式唤起,五分钟能学会。

49图库资料免费公开查询网站 →
数据

2015 年 4 月那一周,来自 QQ 的唤起量下降 18.7%

一封标题带「降级处理」的邮件,和它没被写进复盘的部分。

4949资料图库的用户投诉与建议 →
协议

mttbrowser:// 这个 scheme 的十年

从自由注册到签名校验,一个自定义协议如何失去它的通用性。

49tk图库资料图 →
系统

Android 12 之后,「打开支持的链接」藏哪了

三步找到默认应用设置,以及为什么很多人找不到它。

49彩票图库资料 →
白名单

2019 年那版内部讲义里的显式 Intent 条款

「不能依赖隐式 http」——这条规则后来成了多少跳转失败的原因。

《正版图库》高清大图 →
案例

腾讯新闻首页那次被丢弃的 Intent

Pixel 6 上的日志片段,package visibility 收紧密封的直接证据。

新奥门494949.cm开户流程费用标准 →
观点

「用户自己会选」这句话的代价

一句十年前的产品结论,如何塑造了今天的入口格局。

49 图库app官网 →
土法

复制粘贴链接,反而是最稳的跳转

绕开所有协议的老办法,在 2026 年依然有效。

49图库资料免费公开查询网站 →
时间线

从 2014 到 2024:跳转收紧的五个节点

选择框、scheme 改名、白名单、可见性、App Links 校验。

4949资料图库的用户投诉与建议 →
江晚的头像

关于我

我叫江晚,做过四年 ROM 预装测试,后来转去做应用链接与深链的协议梳理,现在在一家做移动端体验审计的小公司带一个五人小组。

这个站是我 2023 年开始写的,起因是发现自己十年前记在表格里的那些「跳转异常」条目,网上已经找不到任何讨论。

我不接广告,也不做测评,只整理那些被版本更新冲掉的技术细节和它们背后的决策。

如果你手上也有类似的旧日志或旧文档,欢迎发给我,我会标注来源后归档。

“
当年我们觉得跳转是技术问题,现在才明白,跳转是权力问题。
—— 陈默,2025 年 11 月,微信对话,经本人同意引用