如何实现小程序订阅消息推送

最近更新时间:2024-03-14 15:13:31

我的收藏

使用场景

订阅消息是为了召回用户以及推送消息提醒,例如外卖小程序的订单派送消息、电商小程序的支付提醒、物流消息、媒体类小程序的实时热点、话题推送等场景,在日常生活中订阅率都是比较高的。

方案思路

基于微信平台限制,需要用户主动单击授权之后才能获取下发消息权限,所以首先要让用户主动触发订阅,当用户在小程序内单击特定按钮后会弹出申请订阅弹窗,同意后小程序可在后续任意时间给该用户推送服务通知。
发送订阅消息需要用户先进行授权。
授权一次可发送一条服务通知,可以重复授权,每一次授权都会单独保存为一条记录。
推送时间不受限制。
用户自主选择接受,下发的权利掌握在用户手上。
推送消息动作可以利用微搭平台已集成小程序 APIs,在控制台或者应用内可以新建 APIs(微搭 API 开放服务介绍),调用 APIs 发送订阅消息方法,即可以使用对应的小程序服务接口。



小程序 APIs 方法列表。




案例实践

1. 前往 微信公众平台 申请消息订阅模板订阅消息分为一次性订阅长期订阅,如果没有合适的模板,可以申请添加新模板,审核通过后可使用,模板添加成功后,获取模板 ID



模板参数展示:



2. 编辑器场景搭建,在编辑器中新建组件和自定义变量、方法。



3. 自定义Js方法 sendMsgOuth() 获取订阅消息授权,调起订阅弹窗,涉及小程序API wx.requestSubscribeMessage
export default function ({ event, data }) {
try {
wx.requestSubscribeMessage({
tmplIds: ['6zwS1fsv19V7vqhbnq9EAVLFAs6ykWbCmzlW4HoJpC4'],//订阅消息模板ID
success(res) {
console.log(res)
},
fail(res) {
console.log(res)
}
})
}catch (e) {
console.log(e)
}
}
订阅授权弹窗真机效果:



说明:
触发用户订阅,微信小程序提供的 API 是:wx.requestSubscribeMessage,触发条件必须是用户点击行为(bindtap 事件)或发起支付回调后才能调起订阅消息界面。当用户在小程序内点击特定按钮后会弹出申请订阅弹窗,同意后小程序可在后续任意时间给该用户推送服务通知。
发送订阅消息需要用户先进行授权。
授权一次可发送一条服务通知,可以重复授权,每一次授权都会单独保存为一条记录。
推送时间不受限制。
用户自主选择接受,下发的权利掌握在用户手上。
4. 推送消息按钮组件绑定点用数据源方法事件。
选择小程序开放能力 APIs 方法发送订阅消息。



APIs 方法发送订阅消息相关展示。



APIs 方法发送订阅消息入参结构请参见小程序官方文档 订阅消息|发送订阅消息
根据此次实践消息模板 ID,参数模板内容 data 数据格式如下:
{
"date1": {
"value": $w.DateText($w.Now(), 'YYYY-MM-DD HH:mm')
},
"character_string3": {
"value": "192.168.x.x"
},
"thing4": {
"value": "文档更新"
} ,
"thing7": {
"value": "新增文档3篇"
},
"thing6": {
"value": "weda自动触发"
}
}
说明:
data 数据内容可根据模板和实际场景进行相应调整,更多说明请参见 小程序|订阅消息
假设在应用中传递了消息内容相关变量 var1 , var2 , var3 , var4 , var5,则 data 数据格式如下:
{
"date1": {
"value": var1
},
"character_string3": {
"value": var2
},
"thing4": {
"value": var3
} ,
"thing7": {
"value": var4
},
"thing6": {
"value": var5
}
}
当前用户 openid 可以通过微搭内置方法 $w.auth.currentUser.openId 进行获取,订阅消息返回结果赋值自定义变量 sendMsgResult,在组件上进行展示。




真机效果

绑定小程序,发布当前应用。



效果预览:
获取用户订阅消息授权,推送消息。



订阅消息服务通知。




注意事项

调起客户端小程序订阅消息界面 wx.requestSubscribeMessage 一次调用最多可订阅 3 条消息,即 tmplIds 最多为 3 个(iOS 客户端 7.0.6 版本、Android 客户端 7.0.7 之后版本支持)。
一次性模板 ID 和永久模板 ID 不可同时使用。
一次授权调用里,每个 tmplId 对应的模板标题不能存在相同的,若出现相同的,只保留一个。
用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。
当用户勾选了“总是保持以上选择”时,那么将再也不会唤起这个弹窗。同时,如果选择“拒绝”,那么以后每次调用这个 API 的时候,都会自动拒绝;如果选择“允许”,则每次都会自动允许授权。