在用户增长业务中,通过各种取巧方式打开微信小程序是一个特别常见的业务需求,但是微信也不想就这么“被利用”,以前微信可能还是很好的分享渠道,但是随着更新迭代,已经关闭了很多入口。我们也是在业务需求下不停的寻找更多的解决办法。
一、URL Scheme
原理:
前端提供路径和appid,后端对接微信获取accesstoken和短链,最后前端负责跳转即可
实现:
location.href = 'weixin://dl/business/?t=xxxxxx'
参考:
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/url-scheme.html
通过接口生成短链接:
1 获取accesstoken https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html
2 获取短链 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-scheme/generateScheme.html
3 生成返回错误 https://blog.csdn.net/qiao_shi/article/details/121852432
问题:
适用于从短信、邮件、微信外网页等场景打开小程序。 通过 URL Scheme 打开小程序的场景值为 1065。
1、每个独立的URL Scheme被用户访问后,仅此用户可以再次访问并打开对应小程序,其他用户无法再次通过相同URL Scheme打开该小程序;
2、每天生成URL Scheme和URL Link 总数量上限为50万;
3、针对非个人主体小程序开放。
二、开放标签
原理:
依旧需要后端生产签名,前端拼接自己需要的参数
实现:
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [], // 必填,需要使用的JS接口列表
openTagList: [] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
});
<wx-open-launch-weapp
id="launch-btn"
appid="wx12345678"
path="pages/home/index?user=123&action=abc"
>
<script type="text/wxtag-template">
<style>.btn { padding: 12px }</style>
<button class="btn">打开小程序</button>
</script>
</wx-open-launch-weapp>
<script>
var btn = document.getElementById('launch-btn');
btn.addEventListener('launch', function (e) {
console.log('success');
});
btn.addEventListener('error', function (e) {
console.log('fail', e.detail);
});
</script>
参考:
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html
获取签名:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62
问题:
1、H5通过开放标签打开小程序的场景值为1167,也就是说,不是随便都可以跳的;
2、开放对象为认证的服务号,也就是说只能是企业和单位,个人想用需要用到云开发。
三、云开发
原理:
从官网done一个html页面,按照要求填写url和appid,丢到云上就行了,十分简单好用。具体可以参考下面。
实现:
这里的签名等,就不需要后端支持了,毕竟是花了钱的,果然就容易多了。
wx.config({
// debug: true, // 调试时可开启
appId: '小程序 AppID', // <!-- replace -->
timestamp: 0, // 必填,填任意数字即可
nonceStr: 'nonceStr', // 必填,填任意非空字符串即可
signature: 'signature', // 必填,填任意非空字符串即可
jsApiList: ['chooseImage'], // 必填,随意一个接口即可
openTagList:['wx-open-launch-weapp'], // 填入打开小程序的开放标签名
})
参考:
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/staticstorage/jump-miniprogram.html
费用:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/billing/price.html
问题:
很明显,就是收费,有强需求的可以考虑。
四、利用小程序做跳板
原理:
web-view中的页面接入JSSDK 1.3.2可以向小程序容器postMessage,小程序后退、组件销毁、分享、复制链接等情况下会触发原生bindmessage
实现:
// h5页面发送消息
wx.miniProgram.postMessage({ data: 'foo' })
参考:
https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html
问题:
1、跳转小程序会弹出确认对话框;
2、bindmessage有触发条件,交互上需要特殊处理
综上
每个方案都有对应的场景,并且都有优势和局限,基于平台的二次开发本来就有很多限制,根据需求来吧。相比之下,第四种方法应该影响最小,并且在之前做的美团医保支付业务中有实际应用,效果还行。