文章介绍当下 iOS 系统中各种 App 之间的跳转技术,并最终重点介绍 UniversalLinks 的一种特殊的使用技巧来帮助 App 来引流,提升转化。
介绍下当下支持的 App 页面跳转技术及其优劣:
用户在系统中其他 App 中点击 scheme 链接;浏览器网页中点击 scheme 链接会弹出一个 Alert 弹框,让用户确认是否跳转。 优势:与 http 的 url 提供类似,可以通过 URL 直观表达跳转的页面和意思。触发条件可以是用户点击,也可以通过程序触发 JS 或者 App。 劣势:跳转时系统会弹出确认框让用户确认,体验略差。并且不能知道 App 是否安装,只能通过一些手段推测需要跳转的 App 是否已经安装,如果跳转时没有安装则会弹出 "Safari 不能打开该网页,因为网址无效。" 的提示体验打折扣,关于 H5 页面如何推测 App 已经安装后面会介绍。
- <appscheme>://detail?id=10000
访问这个页面的时候在网页加载完后往下拉页面可以看到 App 的跳转入口,可以承接跳转的 App 的功能。 可以手机访问这个 Demo 页面 来体验下 优势:对用户而言,点击进入不需要二次确认;自动检测 App 安装状态,未安装引导到 App Store,已安装则可直接打开 App,并带入预置在 app-argument 中的 url 值,让 App 感知当前的页面,可以 App 中继续行为。 劣势:最大的问题是跳转操作不可通过程序控制,只能由用户点击触发跳转;另一个产品经理不怎么喜欢的是居然还显示评分星级,这是个头疼的事情。
- <meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
三种技术各有优劣,组合使用可以让引流体验变得非常好。下面会简单介绍三种技术的部署方法和一些技巧。
这种技术部署是需要 App 本身对 scheme 协议头进行注册的,而且这种注册是属于系统级别本地注册关联。
这时 App 安装后,协议头即注册生效,可以通过浏览器地址栏中输入该协议头即可跳转。
注意:因为是本地注册,所以如果遇到某个其他 App 也注册这个协议头那会发生什么情况呢?经过实践测试结果发现,协议头是本地抢注式,先被安装的注册的 App 拥有更高的优先权,当先装的 App 被删除时,第二注册者会命中,以此后推。
这种方式是直接去中心化,去校验,完全自由的一种部署方式。
唯一需要做的只是在 html 页面新增 meta 标签即可
- <meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
使用 iOS 手机访问这个地址 Demo 页面
这种方式更为麻烦一些,因为相当于支持了 http 链接直接打开 App,所以需要双向授信才行。
网站端
的 JSON 格式文件,防止在可以被根目录直接访问到的地方。例如打算绑定 m.alibaba.com 那么就需要
- apple-app-site-association
这个文件可以正常访问,mine/type 为 json/text。
- https://m.alibaba.com/apple-app-site-association
- {
- "applinks": {
- "apps": [],
- "details": [{
- "appID": "9JA89QQLNQ.com.apple.wwdc",
- //bundleid
- "paths": ["/wwdc/news/", "/videos/wwdc/2015/*"] //path 可以通配符
- },
- { // 可配置多个域名和path匹配规则的绑定
- "appID": "ABCD1234.com.apple.wwdc",
- "paths": ["*"]
- }]
- }
- }
App 端
的数组下面添加一个 item
- com.apple.developer.associated-domains
即可
- applinks:m.alibaba.com
当然 App 端能找到 entitlements 文件需要打开 Capabilities 中的 Associated Domain 能力,这需要开发者账号项目才能开启。
到这里双向绑定已做完,编译项目到设备上,通过点击在 备忘录 中预置的匹配 Universal Links 链接,即可完美跳转了。
为什么要放到备忘录?不能直接浏览器地址栏打开吗?答案是不行,还记得上面讲过,苹果希望的是不打断用户意图的情况下,所以在浏览器地址栏中直接输入地址的行为,苹果认为用户有明显意图想要访问 http 网页,所以不会直接跳转到 App。当然程序也无法控制,如果是 JS 程序跳转某个 UniversalLinks,那结果就是请求正常发出,并不会跳转到 App。
而且,而且,苹果的初衷其实是希望不同 App 之间可以通过这种方式相互跳转。 当初我亲测微信跳转 Alibaba.com App 完美跳转。 后来,有一种非常规操作可以阻挡这种跳转,以至于现状是几乎所有 App 都禁用了 UniversalLinks 的外跳。 但我仍然有解决办法,我会把 UniversalLinks 的运作原理和攻防技巧放在下一篇文章里详细描述。
其实正确的叫法应该叫 Scheme[skim],而不是 Schema['ski:mə], 官方文档 在描述中也是一直使用 Scheme。
从词典上查看,这两个词的意思表达非常相近,都有计划策划的意思。
Promoting Apps with Smart App Banners
原文 - iOS App 间相互跳转漫谈 - UniversalLinks 的极致使用 ]
来源: https://juejin.im/post/5a3678d0f265da43231b0e7b