评论

如何在微信内外部浏览器唤起小程序

如何使用h5唤起微信小程序

微信外部浏览器唤起微信小程序

目的:通过发送短信召回流失用户。

官方文档地址

步骤一

  • 该API我们主要用到的配置如下:
  • jump_wxa:跳转到的目标小程序信息。该对象内包含两个字段。
  • path:通过scheme码进入的小程序页面路径,必须是已经发布的小程序存在的页面,不可携带query
  • query:通过scheme码进入小程序时的query。

步骤二

  • 需要注意的是,query必传,然而如果我们需要跳转的页面不需要参数,也需要配置上query,默认我们填写的是from=sms, 用于统计是从短信渠道来的。

步骤三

  • 与后端约定access_token 通过前端传递appKey进行区分,传哪个微信小程序的appKey 就生成对应小程序的access_token。

步骤四

  • 支持设置scheme的过期时间,默认永久,我们的应用场景很少,暂不详说。

步骤五

  • 代码里操作如下,由后端聚合参数信息。
let postData = {
  appKey: 'QTSHE_MINI_APP',
  path: 'pages/partdetails/partdetails',
  query: 'partJobId=123456' || 'a=1'
}
this.$axios.post('xxx', postData).then((res) => {
  if (res.success) {
    const url = res.data.openlink
    // 将scheme转为我们平台的短链接,否则在安卓手机上无法打开微信小程序,会默认打开浏览器搜索。
    this.$axios.get(`xxx`, {url}).then((res) => {
      if (res.success) {
        this.shortLink = res.data // 将weixin://xxxx 转换为 https://b.qtshe.com/xxx
      }
    })
  } else {
    this.$Message.error('获取失败,请稍后重试')
  }
}).catch((err) => {
  console.log(err)
  this.$Message.error('获取失败,请稍后重试')
})


微信内部浏览器唤起小程序

官方文档地址

步骤一

  • 首先需要登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”,未配置会导致wx.config签名失败,导致无法使用开放标签。

步骤二

步骤三

  • 通过config接口注入权限验证配置并申请所需开放标签, 在wx.config里增加openTagList标签,内置两个开放标签 wx-open-launch-app 微信h5唤起本地已经安装的app,以及 wx-open-launch-weapp 微信h5唤起小程序,操作如下:
wx.config({
  debug: false,
  appId: window.g_info.wx_appid, // 全局变量appId
  timestamp: data.data.timestamp, // 调用微信接口返回的
  nonceStr: data.data.nonceStr, // 调用微信接口返回的
  signature: data.data.signature, // 调用微信接口返回的
  jsApiList: ['openLocation', 'getLocation'], // 这里需要任意填写api,不能为空
  openTagList: [
    'wx-open-launch-app',
    'wx-open-launch-weapp'
  ]
})

注意点

  • 对于Vue等视图框架,为了避免template标签冲突的问题,可使用<script type="text/wxtag-template"></script>进行代替,来包裹插槽模版和样式。
  • 页面中与布局和定位相关的样式,如position: fixed; top -100;等,尽量不要写在插槽模版的节点中,请声明在标签或其父节点上;
  • 对于有CSP要求的页面,需要添加白名单frame-src https://*.qq.com webcompt:,才能在页面中正常使用开放标签。
// Vue里操作代码如下,如果需要写样式,最好是外部包一个div进行样式编写,内部的内容宽高100%即可,调试样式可使用微信开发者工具的网页模式:

.quick-btn {
  // 这里写样式
  width: 3.43rem;
  height: 0.96rem;
  display: flex;
  img {
    width: 100%;
    display: block;
  }
}

<div class="quick-btn">
  <img src="https://qiniu-image.qtshe.com/20220317quick-apply.png" alt="" />
</div>


示例效果


为了方便运营同学,做了个工具给他们使用。


2023年4.11号新版本后的改版方案:

首先做一个落地页:https://b.qtshe.com/1DF43E

代码如下:

import toast from 'toast'
export default {
  created() {
    this.init()
  },
  methods: {
    // 获取微信scheme地址,并且主动跳转一次
    init() {
      this.$axios.post(`https://xxx/你们的接口地址/user/device/scheme`, this.$route.query).then(res => {
        if (res.success) {
          window.location.href = res.data
        } else {
          toast(res.msg)
        }
      }).catch(() => {
        toast('服务器错误,请稍后重试')
      })
    }
  }
}


原理:通过地址栏配置需要跳转的参数,h5页面拿到参数后通过接口转换为weixin://xxxx 开头的scheme协议地址,并且主动location.href一次。这样能保证用户每次打开都是新的scheme地址,针对一天50w数量上限的问题,可尝试同一个用户在固定时间内相同的参数,返回相同的scheme地址。

以上限制只存在于除微信外的外部浏览器,微信容器里没有以上的限制


2023年12月18日后方案:

官方公告如下:

https://developers.weixin.qq.com/community/develop/doc/00024e32cbc36055c0c0a34b066401 ,没有外部浏览器、微信环境的限制,可以被多人打开。

使用方式通过明文拼接:

weixin://dl/business/?appid=*APPID*&path=*PATH*&query=*QUERY*&env_version=*ENV_VERSION*

示例:

// query需要encode编码,ENV_VERSION为控制打开开发版、体验版、线上版本
weixin://dl/business/?appid=wxa7b0b022472e55e6&path=pages/partdetails/partdetails&query=partJobId%3D123456


通过明文 URL Scheme 拉起的小程序(页面)必须要提前在「小程序管理后台 -> 设置 -> 隐私与安全 -> 明文 scheme 拉起此小程序」中进行声明;

  • 小程序:配置能够通过明文 scheme 进入的小程序页面

这一点很烦很烦,希望能支持下 默认可打开所有的,不然每次都得去配置。


最后一次编辑于  08-07  
点赞 25
收藏
评论

25 个评论

  • 一遇泓
    一遇泓
    2021-04-29

    老哥,太厉害了啊,同一个scheme  url,我用安卓系统,无论是浏览器还是h5页面,死活打不开小程序,在苹果下直接就可以打开。一直纳闷,没人说问题所在,直到老哥你这句“需要注意的是,query必传”,然后就随便传了个“a=1”,果然就可以了。。。。多谢老哥!!

    2021-04-29
    赞同 2
    回复
  • chris
    chris
    05-10

    大佬啊,这个不能在公众平台测试号上实现嘛?还有"腾讯公益"上的SCHEME URL该怎么申请您知道吗?困扰几天了...谢谢

    05-10
    赞同 1
    回复 1
    • TNT
      TNT
      05-10
      1. 不能,只能访问正式的,2: 也不能。腾讯公益的你需要联系对方的开发者要到链接
      05-10
      回复
  • Gary
    Gary
    2023-12-13

    请问楼主,我看文档说的需要绑定服务号,我没有这种微信服务号。我只想在我自己写的个人网页里能跳转到别人的小程序,这种需求可以实现吗,别人的小程序也不会提供技术支持。

    2023-12-13
    赞同 1
    回复 2
    • TNT
      TNT
      2023-12-13
      不能的,这种需要使用小程序了。
      2023-12-13
      回复
    • TNT
      TNT
      08-07
      现在支持了
      08-07
      回复
  • RealizeInnerSelf丶
    RealizeInnerSelf丶
    2021-08-30

    感谢分享,给你点赞~

    2021-08-30
    赞同 1
    回复
  • Steven Zhang💤
    Steven Zhang💤
    2021-06-04

    请问大佬 微信外部浏览器打开小程序 jumpWxa下的query参数 这样传的话 hid=123, 已经在对应的页面的onLoad方法中通过options.hid做了处理,还需要针对这个跳转做特殊处理么?

    2021-06-04
    赞同 1
    回复 2
    • 朽年
      朽年
      2023-07-24回复TNT
      我再onLoad方法中options是空对象,咋回事呀
      2023-07-24
      回复
    • TNT
      TNT
      2023-07-24回复朽年
      你在app.js的onLaunch、onShow获取吧
      2023-07-24
      回复
  • Hhha
    Hhha
    02-02

    我是做app分享,图文分享到朋友圈一个h5链接,点击链接想打开小程序对应的页面,用了window.location.href跳转明文URLScheme,这个方法在微信环境下h5跳转不到小程序,在外部浏览器可以。怎么实现我需要的功能啊,大佬,球球惹

    02-02
    赞同
    回复 2
    • Hhha
      Hhha
      02-02
      小程序  app  h5 都是一体的  同一个项目部署的
      02-02
      回复
    • TNT
      TNT
      02-19回复Hhha
      scheme链接发一个,我们的scheme链接是可以在微信环境内打开微信小程序的。
      02-19
      回复
  • smile、
    smile、
    2023-12-14

    请问楼主,我们有个需求是很多不同的用户从其它平台app跳转到我们公共的一个H5页面(外部网页),然后我们需要在这个网页唤起用户填写的不同appid的微信小程序,目前除了使用云开发静态网页托管的方式,请问还有什么方式吗,我看了云开发这个是需要收费的。

    2023-12-14
    赞同
    回复 2
    • TNT
      TNT
      2023-12-15
      可以尝试下,让用户传appId进来,然后你本地或者服务端接收appId和数据库里的每个小程序appId对应的secret匹配。匹配到了就生成。
      2023-12-15
      回复
    • TNT
      TNT
      09-04
      现在使用明文scheme形式 没有这些限制了
      09-04
      回复
  • 片刻
    片刻
    2023-10-19

    请问大佬具体如何添加白名单frame-src https://*.qq.com webcompt:

    2023-10-19
    赞同
    回复 1
  • 谢衣之徒
    谢衣之徒
    2023-07-25

    请问能在支付小程序的webview环境里打开微信小程序吗?

    2023-07-25
    赞同
    回复 2
    • TNT
      TNT
      2023-07-26
      可以的喔,不建议这么做。之前我实现过,走的支付宝未开放的功能。
      2023-07-26
      回复
    • TNT
      TNT
      2023-12-20
      2023-12-20
      回复
  • the Cheng under the Qun~
    the Cheng under the Qun~
    2023-01-03

    大佬 请教一下 微信浏览器打开的h5页面能不能唤起第三方的小程序?

    第三方小程序也不会提供任何支持

    2023-01-03
    赞同
    回复 2
    • TNT
      TNT
      2023-01-04
      如果第三方不提供的话 我们是不能打开的,而官方有方法打开,开白。
      2023-01-04
      回复
    • the Cheng under the Qun~
      the Cheng under the Qun~
      2023-01-04回复TNT
      多谢大佬 我研究下
      2023-01-04
      回复

正在加载...

登录 后发表内容