2019 年 10 月 12 日,微信团队在微信开放社区发布一则公告:小程序模板消息能力调整通知。即微信小程序即将要下线消息模板通知功能,采用订阅消息服务通知。至于订阅消息和消息模板功能在推送消息通知上有什么区别,可以点击这里查看官方公告

小程序订阅消息和模板消息最大的差别,个人认为是主动订阅消息和被动接收消息。小程序订阅消息需要用户主动订阅,而且默认情况下是非静默式触发。模板消息则是在用户点击或者提交表单的情况下产生推送凭证,默认情况下是可以静默式收集凭证。

模板消息是通过推送凭证 formid 进行服务消息通知推送。formid 是有时效性的,从产生凭证开始,七天内有效。订阅消息则是通过对订阅模板触发记录推送,每订阅一次就只能推送一次,没有时效性,不受时间限制,受订阅次数限制。

订阅消息需要通过微信小程序提供的 API 触发订阅机制。API 示例如下:

wx.requestSubscribeMessage({
  tmplIds: [''], // 订阅消息模板 ID 列表
  success (res) { }
})

API 参数如下:

属性 类型默认值必填说明
tmplIds Array 需要订阅的消息模板的id的集合(注意:iOS客户端7.0.6版本、Android客户端7.0.7版本之后的一次性订阅/长期订阅才支持多个模板消息,iOS客户端7.0.5版本、Android客户端7.0.6版本之前的一次订阅只支持一个模板消息)消息模板id在[微信公众平台(mp.weixin.qq.com)-功能-订阅消息]中配置
success function 接口调用成功的回调函数
fail function 接口调用失败的回调函数
complete function 接口调用结束的回调函数(调用成功、失败都会执行)

订阅成功后,回调的参数主要有两个:errMsg 和 TEMPLATE_ID 。errMsg:接口调用成功时errMsg值为'requestSubscribeMessage:ok'。TEMPLATE_ID:[TEMPLATE_ID]是动态的键,即模板id,值包括'accept''reject''ban''accept'表示用户同意订阅该条id对应的模板消息,’reject’表示用户拒绝订阅该条id对应的模板消息,’ban’表示已被后台封禁。例如 { errMsg: "requestSubscribeMessage:ok", zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: "accept"} 表示用户同意订阅zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE这条消息。

订阅成功的回调参数有个坑:获取用户对某个订阅消息模板状态相对麻烦。因为 TEMPLATE_ID 是一个动态的键,因此,无法通过 res.TEMPLATE_ID 获取订阅消息模板的状态是 ‘accept’、’reject’、’ban’ 中的哪一个。如何获取这个状态,这就每个开发者通过自己的方法进行尝试了。

注意:wx.requestSubscribeMessage 只能使用在 bindtap 动作里。否则会提示:requestSubscribeMessage:fail can only be invoked by user TAP gesture

本文出处:WordPress 小程序技术博客