小程序云开发-借助云开发实现小程序消息订阅功能丨实战
博客小程序中有文章留言评论和评论回复功能,但是当有用户评论了文章或者回复了评论时,管理员及用户并不知道,不能及时作出回复。所以消息订阅功能上线了,用户只需订阅消息,就可以在合适的时机收到消息通知。 博客小程序一共有两个消息订阅,分别是文章评论回复通知和留言评论提醒。
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.填写消息订阅内容时一定要注意订阅消息参数值内容限制说明,不然云函数会报错。