微信小程序开发之订阅消息
微信小程序开发中我们常常可能会遇到这样的需求,客户执行某一操作后,需要在未来某一时刻给予客户反馈通知,比方在少量餐厅点餐后发送的取餐提示,某些打卡应用的打卡提示,等等。这些都必需在小程序外部给到客户有效的通知,所以实现此功能的方式只有一种——订阅消息。
订阅消息 主要分为两步:订阅 和 发布。
一、订阅
小程序要发送消息,首先它得知道发送给谁,而后就是该什么时候发送。因而,订阅 是必需要有的操作,就好比公众号,你若想要某个公众号能在每次发布文章时你能收到推送,就必需关注该公众号才行。
但是,和公众号不同的是,小程序只能实现 一次性消息订阅 而非永久,也就是说你订阅后消息只需发送后该订阅就失效了,以后若想要再次收到消息通知就必需再次订阅。
订阅消息代码大致如下:
wx.requestSubscribeMessage({ tmplIds: [''], // 需要订阅的消息模板的id的集合 success (res) { } // 接口调用成功的回调函数})
那么tmplIds
数组中的消息模板id在哪获取呢?
首先我们得先自己去增加配置消息模板,可以在 [微信公众平台(http://mp.weixin.qq.com)-功能-订阅消息] 中配置,配置好消息模板后就可获取其模板ID。
更多订阅消息的相关细节可以直接前往 微信官方文档·小程序(https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html) 查看。
二、发布
订阅消息之后,小程序还需要根据订阅时提供的相关信息(客户ID等)来发布消息。
上面提到的订阅操作是客户操作,表现在前台,也就是小程序端,而发布操作则表现在后台,也就是服务端,这时我们可以直接使用云开发来实现。
1. 定义云函数
我们可以定义个发布消息的云函数,代码大致如下:
const cloud = require('wx-server-sdk') // 必需先安装wx-server-sdkcloud.init({ env: cloud.DYNAMIC_CURRENT_ENV // 云环境ID})exports.main = async (event, context) => { try { const result = await cloud.openapi.subscribeMessage.send({ touser: 'OPENID', // 接收者(客户)的 openid page: 'pages/index/index', // 点击模板卡片后的小程序跳转页面 lang: 'zh_CN', // 语言类型 data: {}, // 模板内容 templateId: 'TEMPLATE_ID', // 所需下发的订阅模板id miniprogramState: 'developer' // 跳转小程序类型,默认是正式版 }) return result } catch (err) { return err }}
具体参数配置可以直接前往微信官方文档·小程序(https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html) 查看。
有几个地方可能需要注意:
① 上述代码是云函数中的云调用,需要用到wx-server-sdk
可以通过npm install --save wx-server-sdk@latest
进行安装,注意必需安装在当前云函数所在文件目录下。例如:
wx-server-sdk安装在其中
更多云调用相关内容详见→微信官方文档·小程序(https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/openapi/openapi.html#%E4%BA%91%E8%B0%83%E7%94%A8)
② 需在 config.json
中配置 subscribeMessage.send API
的权限
{ "permissions": { "openapi": [ "templateMessage.send" ] }}
当然,config.json
文件也必需放在当前云函数所在文件目录下。
③ 有关subscribeMessage.send API
参数data
的具体配置
这是我最近开发的一款小程序用到的消息模板
就以我开发的 目标管理助手 小程序为例,消息模板我用了4个字段,分别为上图的thing1、thing2、date3、thing4
,所以对应的参数data
如下:
cloud.openapi.subscribeMessage.send({ data: { thing1: { value: '坚持一个月上班不迟到' }, thing2: { value: '你的好友已确认见证' }, date3: { value: '2020-01-17 12:30:00' }, thing4: { value: '请尽快解决哦' } }, // 其余参数...});
当然,上面的字段值文字只是示例,可以根据需要自由填写。
2. 调用云函数
定义好云函数之后当然还得调用云函数才行,就像我们公告一个函数后得去执行它才能生效一样。
调用云函数的方式有两种:手动调用 和 自动调用。
① 手动调用
手动调用 顾名思义就是需要客户手动触发云函数执行,假如把上面发送消息的云函数命名为sendMessage
,那么部署好后我们即可以直接在客户订阅消息成功后调用它了:
wx.requestSubscribeMessage({ tmplIds: [''], // 需要订阅的消息模板的id的集合 success (res) { // 接口调用成功的回调函数 wx.cloud.callFunction({ // 调用云函数 // 云函数名称 name: 'sendMessage', // 传给云函数的参数 data: { openid: '' // 客户openid }, success: function(res) { console.log(res) } }) }})
而后云函数即可以获取到传过来的参数openid
:
// ...exports.main = async (event, context) => { try { const result = await cloud.openapi.subscribeMessage.send({ touser: event.openid, // 接收者(客户)的 openid // 其余参数... }) return result } catch (err) { return err }}
云函数接收两个参数:event
和context
,而调用云函数时所传递的参数都保存在event
对象中。
另外,event
对象还自带一个userInfo
属性,而userInfo
属性下保存有小程序的appId
和客户的openId
,因而你也可以直接通过event.userInfo.openId
的方式获取客户的openId
:
const result = await cloud.openapi.subscribeMessage.send({ touser: event.userInfo.openId, // 接收者(客户)的 openid // 其余参数...})
② 自动调用
自动调用 顾名思义就是可以由程序自动调用而无需客户手动触发,这就需要用到云函数中的 定时触发器 了,通过它可以让云函数按照某个特定的周期不断自动执行。
a) 在config.json
中增加triggers
字段
{ // triggers 字段是触发器数组,目前仅支持一个触发器,即数组只能填写一个,不可增加多个 "triggers": [ { // name: 触发器的名字 "name": "myTrigger", // type: 触发器类型,目前仅支持 timer (即 定时触发器) "type": "timer", // config: 触发器配置,在定时触发器下,config 格式为 cron 表达式 "config": "0 0 2 1 * * *" } ]}
此处代表在每月的1日的凌晨2点自动触发云函数,也就是发布订阅消息。
b) 右击config.json
选择“上传触发器”
右键选择上传触发器
更多定时触发器相关内容详见→微信官方文档·小程序(https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/triggers.html)
重点总结
① 微信小程序中的订阅消息只能实现一次性订阅,而且必需通过客户手动触发订阅;
② 消息发布是通过调用云函数实现的,有手动调用和自动调用两种方式;
③ 云函数和定时触发器都必需上传之后才能使用。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 微信小程序开发之订阅消息