唤起小程序呕血总结

背景

因为公司业务,会有各种各样的需要唤起小程序的需求,并且很多还都是客户的小程序。因为小程序这样那样的安全校验,所以很多唤起小程序的方式是有局限性的。

下面我就总结一下目前自己碰到的所有唤起小程序的方法,给后续需要踩坑的同学一点指引

微信生态内唤起小程序

这个是最简单的场景,代表是微信浏览器唤起小程序 和 小程序/小游戏跳转第三方小程序,官方文档

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*

其中,各个参数的定义如下:

  1. 【必填】APPID:通过明文 URL Scheme 打开小程序的 appid ;
  2. 【必填】PATH:通过明文 URL Scheme 打开小程序的页面 path ,必须是已经发布的小程序存在的页面,不可携带 query;
  3. 【选填】QUERY:通过明文 URL Scheme 打开小程序的 query ,最大512个字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~%`,需要url_encode;
  4. 【选填】ENV_VERSION:要打开的小程序版本,正式版为release,体验版为trial,开发版为develop,仅在微信外打开时生效。注意:若不填写,则默认打开正式版小程序。

通过明文 URL Scheme 打开小程序的场景值为 1286。

用云环境唤起小程序

这个就是在微信外用h5直接唤起小程序了,需要你有个微信认证的云托管静态页面。官方文档

云环境的优点是可以无条件h5直接拉起小程序 。缺点是需要开发云环境才能使用,这个对于很多客户的小程序是没有的。当然也可以做个二跳的方案 h5 -> 云环境拉起自己的小程序 -> 跳转客户小程序。这个就是利用的上面提到的小程序无条件跳转其他小程序,缺点就是二跳每次都会有确认提示,会丢失转化率

我之前就有文章分享关于云环境小程序的写法,感兴趣的朋友可以点击链接传送门

APP(IOS/Android)中唤起小程序

APP中唤起小程序用的就是微信开放SDK的能力,优点是可以在app中直接唤起小程序,使用前提是APP需要经过微信审核, 入参只需要原始id和path。当然同理也有迂回的手段。比如你们公司自己的app通过了审核,deeplink链接 -> 唤起你们自己APP -> 跳转目标小程序

官方文档Android(ios同理)

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唤起的方式,比较丝滑并且开发成本低。如果你没有目标小程序的开发权限,那么可能就需要通过一些迂回的手段。可以根据自己需要的场景来选择合适的技术。

如果还有什么遗漏的方式,欢迎评论补充哈

往期文章

h5跳转小程序指北

简单易上手!发布React + Vite + Storybook组件库

相关推荐
知否技术3 小时前
2025微信小程序开发实战教程(二)
前端·微信小程序
小糊涂加油6 小时前
原生微信小程序开发踩坑记录
微信小程序·小程序
笨笨狗吞噬者7 小时前
记录一个uniapp小程序端编译时问题
前端·微信小程序·uni-app
干到60岁退休的码农1 天前
微信小程序 按钮点击事件
微信小程序·小程序
三脚猫的喵1 天前
微信小程序使用图片实现红包雨功能
javascript·微信小程序
炫彩@之星3 天前
微信小程序渗透测试指北(附案例)
微信小程序·小程序
换日线°3 天前
微信小程序生成小程序码缓存删除
微信小程序
像素之间4 天前
微信小程序中安装vant
微信小程序
java1234_小锋4 天前
[免费]微信小程序音乐播放器(爬取网易云音乐数据)(node.js后端)【论文+源码】
微信小程序·小程序·node.js·音乐播放器·网易云音乐
野盒子4 天前
前端面试题 微信小程序兼容性问题与组件适配策略
前端·javascript·面试·微信小程序·小程序·cocoa