游客发表

urlscheme怎么获取

发帖时间:2026-10-17 04:41:08

你在微信里点开一个链接,直接跳到了淘宝商品页。在浏览器地址栏输入 `alipays://platformapi/startapp?appId=20000056`,支付宝就弹出来了。这背后都是 URL Scheme 在干活——说白了,它就是 App 给自己注册的一个"门牌号",格式通常是 `协议名://路径?参数`。

获取 URL Scheme 最直接的办法是翻官方文档。微信的 scheme 是 `weixin://`,支付宝是 `alipays://`,淘宝是 `taobao://`。但文档往往只给基础入口,具体到某个功能页面,比如打开某个特定小程序、跳转到某笔订单详情,文档里不一定写得全。这时候就得靠抓包。

我常用的工具是 Charles 和 Stream。以 iOS 为例,手机连上代理后打开目标 App,操作到你想跳转的那个页面,然后去 Charles 里翻请求记录。重点看两类:一是 HTTP 响应头里的 `Location` 字段,有些 App 服务端会下发跳转指令;二是 App 内部 WebView 加载的页面 URL,很多 H5 页面会通过 `window.location.href = 'xxx://'` 来唤起原生页面。抓到的 scheme 往往带着一长串参数,比如 `taobao://item.taobao.com/item.htm?id=123456`,这就是你要的东西。

Android 上还有更省事的办法。用 `adb shell dumpsys package com.taobao.taobao | grep -A 20 "Scheme"` 能直接列出 App 在 Manifest 里注册的所有 intent-filter。我试过几个主流 App,基本上能拿到七八成的 scheme 定义。不过有些 App 做了混淆或者动态注册,dumpsys 就看不到了。另外,反编译 APK 看 `AndroidManifest.xml` 也是老路子,用 apktool 解包后搜 `android:scheme` 关键字,结果比 dumpsys 更全,但工作量也更大。

有个坑得注意:iOS 9 之后,系统对 scheme 跳转加了限制。你在 Safari 里直接输 `weixin://` 可能没反应,得通过用户点击链接触发。而且微信内置浏览器基本屏蔽了大部分外部 scheme 跳转,除非是它白名单里的。我实测过,在微信里点 `taobao://` 链接,微信会弹一个"即将离开微信"的确认框,用户点允许才能跳。这个确认框是微信自己加的,不是系统行为。

还有个野路子:去 GitHub 搜 `awesome-url-scheme` 或者 `iOS-URL-Schemes`,有人专门整理了常用 App 的 scheme 列表。我看过几个仓库,更新不算勤快,但作为起点够用了。比如 `zhihu://`、`bilibili://`、`twitter://` 这些都能查到。缺点是没有参数说明,你得自己试。比如 `bilibili://video/123456` 能打开视频,但 `bilibili://space/123456` 打开的是用户空间,这些规则没人写文档,全靠摸索。

实际用的时候,scheme 跳转成功率不是百分之百。App 版本更新、系统权限变更、甚至用户没安装目标 App,都会导致跳转失败。所以代码里得加兜底逻辑——比如先 `try { window.location.href = 'xxx://' } catch(e) { }`,再设个定时器检查页面是否被切到后台,没切就跳去应用商店或者 H5 页面。我见过不少产品在这块偷懒,用户点了没反应,体验很糟。

最后说个判断技巧:如果你抓到的 scheme 里带 `fallback` 或者 `callback` 参数,说明这个 App 设计时考虑了跳转失败的情况。比如 `alipays://platformapi/startapp?appId=20000056&fallback=https%3A%2F%2Fwww.alipay.com`,这种就相对靠谱。没有 fallback 的,自己补一个。

    热门排行

    友情链接