微信官方为提升小程序模板消息能力的使用体验,对模板消息的下发条件进行了调整。原有的小程序模板消息接口于 2020 年 1 月 10 日下线,届时将无法使用旧的小程序模板消息接口发送模板消息,取而代之的是新的一次性订阅消息和长期订阅消息。
订阅消息给小程序开发者带来了更好的触达用户的能力,在具体实施过程中,开发者如何把模板消息换成新的订阅消息,是否需要购买服务器来实现服务器鉴权,怎样才能在用户订阅之后一段时间后,给用户发送长期或一次性订阅消息呢?
小程序·云开发最近支持了通过云调用免 access_token 发送订阅消息,还新增支持了在定时触发器中实现云调用,这些能力可以帮助开发者轻松玩转小程序订阅消息。
我们今天会利用小程序·云开发进行一个小程序中实现订阅开课提醒的实战,帮助大家了解如何基于小程序·云开发快速接入小程序订阅消息。
整体时序图
环境准备
注册小程序帐号[1] 开通云开发服务[2]
获取订阅消息模板 ID
在微信小程序管理后台中,新增一个订阅消息的模板,这里我们新增了一个开课提醒的模板。
引导用户订阅
微信小程序提供了wx.requestSubscribeMessage
接口来发起申请订阅权限界面。
在 "订阅开课提醒" 的按钮上绑定 tap 事件,事件处理器我们这里用的 onSubscribe
index.wxml
<button
class="btn"
data-item="{{ item }}"
bindtap="onSubscribe"
hover-class="btn-hover"
>
订阅开课提醒
</button>
在 onSubscribe
函数内,我们会调用微信 API wx.requestSubscribeMessage
申请发送订阅消息权限,当用户在弹窗同意订阅之后,我们会收到 success
回调,将订阅的课程信息调用云函数 subscribe
存入云开发数据库,云函数 subscribe
的实现在下文会讲。
index.js
onSubscribe: function(e) {
// 获取课程信息
const item = e.currentTarget.dataset.item;
// 调用微信 API 申请发送订阅消息
wx.requestSubscribeMessage({
// 传入订阅消息的模板id,模板 id 可在小程序管理后台申请
tmplIds: [lessonTmplId],
success(res) {
// 申请订阅成功
if (res.errMsg === 'requestSubscribeMessage:ok') {
// 这里将订阅的课程信息调用云函数存入云开发数据
wx.cloud
.callFunction({
name: 'subscribe',
data: {
data: item,
templateId: lessonTmplId,
},
})
.then(() => {
wx.showToast({
title: '订阅成功',
icon: 'success',
duration: 2000,
});
})
.catch(() => {
wx.showToast({
title: '订阅失败',
icon: 'success',
duration: 2000,
});
});
}
},
});
},
文章字数超出 50000 字,后半部分链接 《实战分享: 小程序云开发玩转订阅消息(二)》
哈罗,哥,我这里有个问题,用户授权了一次订阅消息后,后续需要每天定时给用户发消息,还需要用户每天去点击授权吗?只要用户授权点击了一次订阅消息(点击了总是保持),后续就可以无限制发送消息?
微信申请订阅权限 一次最多可申请用户订阅几条?如果超过数量的话会怎样?
目前我们这边经过测试得出,最高可订阅3条,超过3条申请订阅的对话框都不会显示出来。
能确认下是这么一个规则吗?
云函数 定时群发的效率高吗?