背景
因为公司业务,会有各种各样的需要唤起小程序的需求,并且很多还都是客户的小程序。因为小程序这样那样的安全校验,所以很多唤起小程序的方式是有局限性的。
下面我就总结一下目前自己碰到的所有唤起小程序的方法,给后续需要踩坑的同学一点指引
微信生态内唤起小程序
这个是最简单的场景,代表是微信浏览器唤起小程序 和 小程序/小游戏跳转第三方小程序,官方文档
1. 微信浏览器
这个因为有了微信的环境,所以浏览器端直接用微信的开放标签就可以拉起小程序
标题 | 必填 | 备注 |
---|---|---|
appid | 是 | 所需跳转的小程序appid,即小程序对应的以wx 开头的id |
username | 否(与appid二选一) | 所需跳转的小程序原始id,即小程序对应的以gh_ 开头的id(跳转时,有appid会优先使用appid,没有appid才会使用username) |
path | 否 | 所需跳转的小程序内页面路径及参数 |
xml
<wx-open-launch-weapp id="launch-btn" username="XXXX" path="XXXXX">
<template>
<button style="width: 200px; height: 45px;">打开小程序</button>
</template>
</wx-open-launch-weapp>
2. 小程序/小游戏
直接用navigateToMiniProgram,官方文档
javascript
wx.navigateToMiniProgram({
appId: XXXXX,
path: XXXXX,
extraData: {
// 可选:传递给目标小程序的额外数据
},
success(res) {
console.log('调起成功')
},
fail(res) {
console.log('失败', res)
},
})
用scheme唤起小程序
这个其实就是用deeplink来唤起小程序,分为接口获取的加密url scheme和明文scheme两种, 官方文档
使用量限制:
- 生成端:每天生成 URL Scheme(加密 明文) 和 URL Link 的总数量上限为50万
- 打开端:每天通过 URL Scheme(加密 明文) 和 URL Link 打开小程序的总次数上限为300万
1. 加密 scheme
这个需要通过接口获取,优点是不需要传参数 (appid和path等),可以随意在query上拼接参数,在大多数环境都能唤起(前提是手机装了微信),缺点是请求得到加密scheme需要access_token作为入参 ,access_token又是拿secret通过接口换的,secret这个东西基本就相当于开发权限。如果不是自己的小程序不可能要的到。官方接口文档
ruby
// 加密 scheme
weixin://dl/business/?t= *TICKET*
// 获取 加密scheme接口
POST https://api.weixin.qq.com/wxa/generatescheme?access_token=ACCESS_TOKEN
2. 明文 scheme
开发者无需调用平台接口,在MP平台->设置->隐私与安全->明文Scheme拉起此小程序声明后,可自行根据如下格式拼接appid和path等参数 ,作为明文scheme 链接。明文scheme的好处是不需要任何环境啊,js-sdk依赖啊等等,身为deeplink也是在大多数环境都可以唤起,唯一的缺点就是需要目标小程序配置了访问路径白名单,可以说是最接近理想型的多平台唤起方式。
markdown
weixin://dl/business/?appid=*APPID*&path=*PATH*&query=*QUERY*&env_version=*ENV_VERSION*
其中,各个参数的定义如下:
- 【必填】APPID:通过明文 URL Scheme 打开小程序的 appid ;
- 【必填】PATH:通过明文 URL Scheme 打开小程序的页面 path ,必须是已经发布的小程序存在的页面,不可携带 query;
- 【选填】QUERY:通过明文 URL Scheme 打开小程序的 query ,最大512个字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~%`,需要url_encode;
- 【选填】ENV_VERSION:要打开的小程序版本,正式版为
release
,体验版为trial
,开发版为develop
,仅在微信外打开时生效。注意:若不填写,则默认打开正式版小程序。
通过明文 URL Scheme 打开小程序的场景值为 1286。
用云环境唤起小程序
这个就是在微信外用h5直接唤起小程序了,需要你有个微信认证的云托管静态页面。官方文档
云环境的优点是可以无条件h5直接拉起小程序 。缺点是需要开发云环境才能使用,这个对于很多客户的小程序是没有的。当然也可以做个二跳的方案 h5 -> 云环境拉起自己的小程序 -> 跳转客户小程序。这个就是利用的上面提到的小程序无条件跳转其他小程序,缺点就是二跳每次都会有确认提示,会丢失转化率
我之前就有文章分享关于云环境小程序的写法,感兴趣的朋友可以点击链接传送门
APP(IOS/Android)中唤起小程序
APP中唤起小程序用的就是微信开放SDK的能力,优点是可以在app中直接唤起小程序,使用前提是APP需要经过微信审核, 入参只需要原始id和path。当然同理也有迂回的手段。比如你们公司自己的app通过了审核,deeplink链接 -> 唤起你们自己APP -> 跳转目标小程序
ini
// 引用SDK包,如com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.8.0
String appId = "wxd930ea5d5a258f4f"; // 填移动应用(App)的 AppId,非小程序的 AppID
IWXAPI api = WXAPIFactory.createWXAPI(context, appId);
WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
req.userName = "gh_d43f693ca31f"; // 填小程序原始id
req.path = path; //拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 可选打开 开发版,体验版和正式版
api.sendReq(req);
PC网站唤起小程序
PC网站也是一样需要审核网站 ,才能使用唤起小程序的能力。官方文档
需要先初始化openSDK
php
// 引入 https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxopensdk.js
function dosomething() {
wxopensdk.launchMiniProgram({
appid: "网站应用appid",
userName: "需拉起的小程序 userName",
path: "",
ticket: "申请到的 ticket",
});
}
if (wxopensdk.ready) {
dosomething();
} else {
wxopensdk.onReady = dosomething;
}
wxopensdk.launchMiniProgram({
appid: "wxd930ea5d5a258f4f",
userName: "gh_d43f693ca31f",
path: "",
ticket: "84_5JjOIqRU8dUjR3wVGA0_rdF0UdgvdiFZIyxi8qTaDBuann5POOKAzjbwtmE", // 这个需要接口申请
});
总结
其实如果是自己的小程序,那么推荐你用加密scheme或者APP唤起的方式,比较丝滑并且开发成本低。如果你没有目标小程序的开发权限,那么可能就需要通过一些迂回的手段。可以根据自己需要的场景来选择合适的技术。
如果还有什么遗漏的方式,欢迎评论补充哈
往期文章
简单易上手!发布React + Vite + Storybook组件库