小程序云开发-借助云开发实现小程序消息订阅功能丨实战

博客小程序中有文章留言评论和评论回复功能,但是当有用户评论了文章或者回复了评论时,管理员及用户并不知道,不能及时作出回复。所以消息订阅功能上线了,用户只需订阅消息,就可以在合适的时机收到消息通知。 博客小程序一共有两个消息订阅,分别是文章评论回复通知和留言评论提醒。

 

 

1.页面设计

消息订阅页面设计的比较简单,就是一个list列表,每行的左边显示消息名称,右边显示一个checkbox。

 

 

2.登录微信公众平台,选择消息订阅类型获取模板ID

 

 

 

 

3.消息订阅权限配置

新建消息订阅云函数文件夹,并在config.json 中配置 subscribeMessage.send API 的权限。

 

 

4.调起消息订阅界面

使用wx.requestSubscribeMessage API调起消息订阅界面

    wx.requestSubscribeMessage({
      // 传入订阅消息的模板id,模板 id 可在小程序管理后台申请
      tmplIds: [lessonTmplId],
      success(res) {
        console.log(res)
        // 申请订阅成功
        if (res["ei8TI54LSrC0kMMl5yQ3A-h61bjGB4iZIH56A2-dIns"] == "accept") {
         // 数据库保存或者更新用户订阅信息
        } else {
          wx.showToast({
            title: '订阅失败',
            icon: 'none',
            duration: 2000,
          });
         // 数据库删除用户订阅信息
        }
      },
      fail(err) {
        console.log("err=" + err)
      }
    });

调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。

 

 

6.云函数发送订阅消息

当用户点击提交评论按钮时,触发发送订阅消息事件,调用 subscribeMessage.send API。

小程序端前台触发代码如下

isChinese(temp) {
  var re = /[^\u4e00-\u9fa5]/;
  if (re.test(temp)) return false;
  return true;
},
sendAddCommentMessage(nickName, inputData, article_id, create_date) {
    var flag = this.isChinese(nickName);
    var nick = '';
    if (flag){
      nick = nickName
    }else{
      nick = '虚拟名字'
    }
    var data = {
      name3: {
        value: nick // 这里本来是取留言者的nickName,但是如果nickName中包含特殊字符的话就会报错(例如:★那一抹笑^穿透阳光★),所以无奈之下只能取一个虚拟名字
      },
      thing1: {
        value: inputData
      },
      date2: {
        value: create_date
      }
    }
	// 调用消息订阅云函数
    wx.cloud.callFunction({
      name: 'openapi',
      data: {
        action: 'sendAddCommentMessage',
		// 跳转到指定的文章
        page: "pages/articleDetail/articleDetail?article_id=" + article_id,
        data: data,
        templateId: lessonTmplId,
      },
      success: function(res) {
        console.log("留言消息订阅发送成功----")
      },
      fail: err => {
        console.log("留言消息订阅发送失败----")
      },
      complete: res => {}
    })
  },

这里有个小坑,留言评论提醒订阅消息有个字段取的是评论者的昵称,使用的是订阅消息参数值name字段,但是微信用户的昵称含有特殊字符,例如:‘★那一抹笑^穿透阳光★’,订阅消息参数值内容限制说明明确指出name字段不能含有特殊字符,所以当用户的昵称带有特殊字符的时候云函数就会报错,所以此时需要判断一下用户的昵称是否还有特殊字符,如果有,就特殊处理一下,保证其消息能正常发送。

 

 

云函数调用 subscribeMessage.send API代码如下

async function sendAddCommentMessage(event) {
  try {
    // 发送订阅消息
    let result = await cloud.openapi.subscribeMessage.send({
      touser: '',//管理员的openid
      page: event.page,
      lang: 'zh_CN',
      data: event.data,
      templateId: 'ei8TI54LSrC0kMMl5yQ3A-h61bjGB4iZIH56A2-dIns',
    });
    return result;
  } catch (e) {
    console.log('消息订阅之新增评论:'+e)
    return e;
  }
}

7.管理员在微信接收消息提醒

  • 当有用户评论时,微信服务通知就会收到消息。

 

 

  • 点开微信服务通知查看

 

 

  • 点击留言评论提醒服务通知,可以跳转到具体的文章详情页面。

 

 

8.云开发消息订阅总结

1. 由于长期性订阅消息,目前仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,所以像留言评论提醒和文章评论回复通知都是属于一次性订阅类型,订阅一次就只会收到一次消息提醒。

2.当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,用户再次点击订阅时,不会出现订阅消息界面,但是会默认累加一次订阅次数。

3.填写消息订阅内容时一定要注意订阅消息参数值内容限制说明,不然云函数会报错。

 

posted @ 2020-05-18 14:56  风随心动*  阅读(618)  评论(0编辑  收藏  举报