zoukankan      html  css  js  c++  java
  • 小程序云开发-借助云开发实现小程序消息订阅功能丨实战

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

    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.填写消息订阅内容时一定要注意订阅消息参数值内容限制说明,不然云函数会报错。

  • 相关阅读:
    promise请求数据(all方法)
    右键的点击事件
    微信小程序的接口调用封装
    微信小程序HTTP接口请求封装
    微信小程序得路由跳转
    管理系统得操作与解决思路
    HTTP协议
    动态语言概述
    AsynclAwait
    三种跨域解决方案
  • 原文地址:https://www.cnblogs.com/husfBK/p/12910588.html
Copyright © 2011-2022 走看看