关于App URL Scheme
最近使用北京易通行扫码坐公交地铁,为了更高效些,开始调研是不是能够做到一键弹出地铁码/公交码,毕竟每次找到App=>启动App=>切换到对应乘车码,这样一套操作还是很麻烦的。
一键唤起App的具体页面功能,该需求能实现的本质就是个URL Scheme,因此关键就是能不能拿到这个信息了。
先说结论,最终我只能实现一键唤起易通行App,即RuubyPay://
,而具体地铁码/公交码页面并不行,原因是查不到具体功能/页面的介绍SDK,或者没有猜出来。虽然没有彻底解决,但至少搞清楚了寻找指定App URL Scheme的一般方法了,以后有此需要就这么来搞。
基本方法
Google/GitHub检索
首先还是万能搜索大法,毕竟别人很多都想到和找到了,比如微信扫码
weixin://scanqrcode
官方文档
好点的软件对其URL Scheme支持是有系统介绍的,比如Surge/Things等,通过官方文档就可以了解能支持到什么程度。这点微信,美团之类的都没系统的介绍,基本都靠网友自己去找了,这点差评。
iMazing等软件查看app中的
info.plist
,如果是Mac App的话,直接finder中查看app内容即可,不需要第三方Appinfo.plist中检索CFBundleURLSchemes关键词,具体数组值即Scheme
很多App对应网页版经常有点击跳转到对应App,这个跳转链接就是URL Scheme,抓取到网页内容中的该链接即可。比如腾讯会议的网页链接中的一键加入会议,又比如招商银行的活动页,一键打开,通过简单的调试就可以得到URL Scheme。
注意
- Scheme
区分大小写
,比如RuubyPay://
可以唤起易通行,而rubbypay://
报地址不对 - 一个App的Scheme支持多个,也可以没有,这点完全取决于App开发者
- info.plist这种办法只能解决唤起App,但是具体页面路径不得而知,因为该部分并不在该文件中提前定义,而是具体代码中实现。具体页面除了SDK/网页代码中抓取,就只能猜了。Scheme正确而路径错误的情况下App是可以正常被唤起,只是无法执行对应动作。
- 苹果系统下,iPad/iPhone/Mac均有Scheme支持
特别用途- check目标App安装状态
URL Scheme除了可以用于快速换起某App/具体功能之外,还有个特殊用途即可以查询某App是否安装。
使用方法
info.plist中声明这些App需要查询
注意URL Scheme query的数量限制为50
1 | <key>LSApplicationQueriesSchemes</key> |
- 代码中调用,根据返回值true/false来确定App是否安装
1 | UIApplication.shared.canOpenURL(URL(string: "myapp1://test")!) |
题外话
之所以了解到该用法是因为taio作者利用这个能力检查用户是否装了Surge类MitM工具进而导致被用户喷。做法虽然过分,但技术无罪,了解下无妨。 相关讨论贴见大家是怎么看待 Taio 的这种行为的