微信小程序跳转app方案研究
微信开放从小程序跳转到手机应用的功能,具体来说,这项功能属于腾讯此前开放的“app 链接分享到微信”的延伸功能,用户通过某款 app 打开微信并直接跳转到小程序页面后,微信将允许用户直接在小程序页面打开来源 app。微信还强调了这项功能暂时不支持其他路径,想利用小程序为 app 导流或者说你打算制作一个 app 推荐的小程序,目前来看依然是做不到的。
其实这项功能的逻辑和苹果从 iOS 9 开始增加的“返回上一个应用”功能十分相似,当用户从一个 app 跳转到另一个 app 时,可以直接通过屏幕左上方的链接直接返回到来源 app。
此功能需要用户主动触发才能打开 APP,所以不由 API 来调用,需要用
open-type
的值设置为launchApp
的 button 组件的点击来触发。当小程序从 APP 分享消息卡片的场景打开(场景值 1036,APP 分享小程序文档 iOS / Android) 或从 APP 打开的场景打开时(场景值 1069),小程序会获得打开 APP 的能力,此时用户点击按钮可以打开分享该小程序卡片/拉起该小程序的 APP。即小程序不能打开任意 APP,只能
跳回
APP。在一个小程序的生命周期内,只有在特定条件下,才具有打开 APP 的能力。
在基础库 < 2.5.1 的版本,这个能力的规则如下:
当小程序从 1069 场景打开时,可以打开 APP。
当小程序从非 1069 的打开时,会在小程序框架内部会管理的一个状态,为 true 则可以打开 APP,为 false 则不可以打开 APP。这个状态的维护遵循以下规则:
- 当小程序从 App 分享消息卡片(场景值1036)打开时,该状态置为 true。
- 当小程序从以下场景打开时,保持上一次打开小程序时打开 App 能力的状态:当小程序从非以上场景打开时,不具有打开 APP 的能力,该状态置为 false。
- 从其他小程序返回小程序(场景值1038)时(基础库 2.2.4 及以上版本支持)
- 小程序从聊天顶部场景(场景值1089)中的「最近使用」内打开时
- 长按小程序右上角菜单唤出最近使用历史(场景值1090)打开时
- 当小程序从非以上场景打开时,不具有打开 APP 的能力,该状态置为 false。
也就是说,小程序唤起app只能在特定场景下才能实现,并且在用户没有下载安装app的情况下,也是不支持跳转到下载页的,所以官网提供的方案要想从小程序引流到app还不是特别好的方式。
那么只能继续查方案,大概有以下几种思路:
1、利用官方api
就是上面提到的官方解决方案。需要app接入开放平台,并且与小程序属于同一账号下。最主要的问题是该方案仅适用于通过app打开小程序,或者通过app分享的卡片打开小程序,其他情况无法跳转,故在常用的场景下,该方案基本不可行。
2、利用webview网页跳转
我们可以在手机默认浏览器中直接在一个网页中打开app;那么在微信小程序web-view中是否可以呢?实际上web-view有大量权限限制,基本除了展示信息,其他交互都需要通过小程序原生代码实现。
3、利用默认浏览器跳转
在手机默认浏览器中,我们可以直接在一个网页中打开app;但是微信小程序做了限制,不允许跳转到默认浏览器,故该方案不可行。
4、利用应用宝跳转
应用宝是腾讯的,是否可以跳转到应用宝,然后打开app或下载呢?然而由于网页域名鉴权,除了腾讯自家的部分特殊小程序,其他小程序都是无法跳转的。
以上4种方案基本不可行,后来看到一篇博客写的使用小程序客服功能(原文:https://itlao5.com/wp/933.html),就试了下,发现真的可以,但是这种方案也有比较明显的缺点。
5、利用小程序客服的功能
小程序有小程序客服这个功能,而小程序客服是微信中的一个类似于公众号的功能;我们知道公众号是可以间接跳转到app的,那么跳转app的方案就出来了,小程序先打开客服页面,然后在客服页面通过关键字回复一个url(或卡片),点击url(或卡片)跳转到app推广链接,然后就可以打开或下载app了。
方案有了,那么该尝试下如何实施了:
(1)先跳转到微信小程序客服
官方提供了button可以直接跳转,设置open-type='contact'即可:
<button open-type='contact'>点击进入【墨天轮APP】</button>
(2)跳转到微信小程序客服,输入关键字回复app下载宣传页或宣传二维码
客服会话关键词回复,这个小程序官方的仅支持文字回复,建议使用api接口来实现卡片或图片回复,可以自己开发,也可以用第三方平台,如:芝麻服务助手、知己助手等,反正就是搜索微信小程序客服,可以出来一大堆。
(3)这个方案缺点也很明显,就是操作步骤过多,还有一个就是无法精准定位到具体app页面,比如我在看某篇文章,点击打开app其实是希望还是进入到app的这篇文章页面,使用客服功能就不容易做到。
但是在目前无法做到十全十美的方案下,该方案也可以变通解决。
这个消息推送是否可以写一个api,然后接收消息,比如在某个文章页打开的客服,就自动复制该文章的id及标识文章(比如:article/88),以此作为关键词粘贴输入回复,api再根据该关键词返回不同的url二维码。不过我也没有尝试,因为这样操作用户也比较麻烦。有好的方案欢迎赐教。