零基础实战入门微信小程序「跳一跳」,小程序更强大了微信小程序开发

借助云开发实现小程序订阅消息(模板消息)推送功能

2019-12-23  本文已影响0人  编程小石头666

之前的通过formid发送模板消息推送,将在2020年1月10日下线,所以我们不得不使用订阅消息了。

我们先来看下订阅消息的官方简介。



接下来我们就来借助云开发,来快速实现小程序消息推送的功能。

一:获取模板 ID

这一步和我们之前的模板消息推送是一样的,也是先添加模板,然后拿到模板id



首先是开通订阅消息功能,很简单,如下图



由于长期性订阅消息,目前仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。仅就线下公共服务这一点,长期性订阅消息就和大部分开发者无缘了。
所以我们这里只能以使用一次性订阅消息为例。

如上图,我们从公共模板库里选择一个一次性订阅的模板。然后编辑模板如下图



下图就是我们添加好的模板,下图的模板id就是我们需要的。

二,请求用户授权

我们做订阅消息授权时,只能是用户点击或者支付完成后才可以调起来授权弹窗,官方是这么要求的:



我们这里用到了wx.requestSubscribeMessage这个方法,来获取用户的授权。

这里用户允许后,我们就可以给用户推送消息了,接下来我们来借助云开发的云函数来实现消息推送功能。

三,获取用户的opneid

先来看官方爸爸是怎么说的。



可以看出官方提供了两种方式,我们这里使用云调用。说白了就是在云函数里调用推送功能。

四,用云函数实现消息推送

我们只需要创建一个云函数如下,然后填入用户的openid,要跳转的小程序页面链接,模板内容,模板id即可。通常这些数据都应该传进来,简单起见,我就把这里的模板内容写成固定的。


注意:我在编写上面的代码时,推送内容的key必须和小程序模板里的key保持一致,否则就会报如下错误。

效果图


可以看到,我们成功的收到 上课提醒的模板消息,点击进去,就是我们具体的推送内容



其实我这是连续收到了4条消息,因为我点击了4次允许推送,所以就可以成功的推送4次。

到这里我们就完整的实现模板消息推送功能了,下面我把主要代码贴给大家,大家也可以私信我获取完整源码。

<button bindtap="shouquan" type='primary'>获取订阅消息授权</button>
<button bindtap="getOpenid">获取用户的openid并推送消息</button>
//编程小石头wechat:2501902696
Page({
  //获取授权的点击事件
  shouquan() {
    wx.requestSubscribeMessage({
      tmplIds: ['CFeSWarQLMPyPjwmiy6AV4eB-IZcipu48V8bFLkBzTU'], //这里填入我们生成的模板id
      success(res) {
        console.log('授权成功', res)
      },
      fail(res) {
        console.log('授权失败', res)
      }
    })
  },
  //获取用户的openid
  getOpenid() {
    wx.cloud.callFunction({
      name: "getopenid"
    }).then(res => {
      let openid = res.result.openid
      console.log("获取openid成功", openid)
      this.send(openid)
    }).catch(res => {
      console.log("获取openid失败", res)
    })
  },
  //发送模板消息到指定用户,推送之前要先获取用户的openid
  send(openid) {
    wx.cloud.callFunction({
      name: "sendMsg",
      data: {
        openid: openid
      }
    }).then(res => {
      console.log("推送消息成功", res)
    }).catch(res => {
      console.log("推送消息失败", res)
    })
  }
})
//编程小石头wechat:2501902696
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async(event, context) => {
  try {
    const result = await cloud.openapi.subscribeMessage.send({
      touser: event.openid, //要推送给那个用户
      page: 'pages/index/index', //要跳转到那个小程序页面
      data: {//推送的内容
        thing1: {
          value: '小程序入门课程'
        },
        thing6: {
          value: '杭州浙江大学'
        },
        thing7: {
          value: '第一章第一节'
        }
      },
      templateId: 'CFeSWarQLMPyPjwmiy6AV4eB-IZcipu48V8bFLkBzTU' //模板id
    })
    console.log(result)
    return result
  } catch (err) {
    console.log(err)
    return err
  }
}

后面我会分享更多小程序相关的知识出来,请持续关注。

上一篇 下一篇

猜你喜欢

热点阅读