微信小程序订阅消息开发笔记

更新时间:2019-12-18 分类:小程序 浏览量:3126

WordPress 小程序订阅消息设置

2019 年 10 月 12 日,微信团队在微信开放社区发布一则公告:小程序模板消息能力调整通知。即微信小程序即将要下线消息模板通知功能,采用订阅消息服务通知。至于订阅消息和消息模板功能在推送消息通知上有什么区别,可以点击这里查看官方公告。在此公告出来之前,我本来已经基本上完成了 WordPress 版小程序消息模板推送插件,准备即将推出插件之际,却收到了这么一则公告,真的是相当无语了。之前开发的插件就等于是浪费时间了,当然,离消息模板正式下线也还有一二个月的时候,所以,我也提供给了使用丸子小程序资讯版的朋友们下载插件,并集成了推送消息服务功能。

尽管此前开发的小程序推送凭证收集的 WordPress 插件没有多大的用处了,但是,还是可以作为订阅消息功能插件开发作参考。于是,花费了一些时间重新整理和开发了小程序订阅 WordPress 插件,提供给了丸子小程序社区版用户使用。现在,也正式更新丸子小程序资讯版用户使用。

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

模板消息是通过推送凭证 formid 进行服务消息通知推送。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' 中的哪一个。如何获取这个状态,这就每个开发者通过自己的方法进行尝试了。

以上就是微信小程序订阅消息的开发笔记,丸子系列小程序(社区版/资讯版)已经正式上线了订阅消息功能,支持文章评论回复通知,审核结果通知,文章更新提醒。由丸子团队开发的 WordPress 插件已经上线丸子插件中心下载,点击这里查看详情。此外,丸子团队开发的开源版插件 Mini Program API 也已经完成了订阅消息功能,目前正在测试过程中,后续将同步更新微信小程序开源版订阅消息功能。

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