微信服务号消息推送,前端开发部分教学,代码在最后
(一)获取/设置模板 ID
在微信公众平台手动配置获取模板 ID:
(二)获取下发权限
一次性订阅消息、长期订阅消息,详见接口 wx.requestSubscribeMessage
注意:
- 一次性模板 id 和永久模板 id 不可同时使用。
- 低版本基础库2.4.4~2.8.3 已支持订阅消息接口调用,仅支持传入一个一次性 tmplId / 永久 tmplId。
- 2.8.2 版本开始,用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。
- 2.10.0 版本开始,开发版和体验版小程序将禁止使用模板消息 formId。
- 一次授权调用里,每个tmplId对应的模板标题不能存在相同的,若出现相同的,只保留一个。
- 2.10.0 版本开始,支持订阅语音消息提醒,详情
设备订阅消息,详见接口 wx.requestSubscribeDeviceMessage
(三)调用接口下发订阅消息
一次性订阅消息、长期订阅消息,详见服务端接口 subscribeMessage.send,次数限制:开通支付能力的小程序下发上限是3kw/日,没开通的是1kw/日。
设备订阅消息,详见服务端接口 hardwareDevice.send
消息订阅功能实现
在实现消息订阅功能之前,我们需要了解一些关键步骤:
请求用户订阅:首先需要向用户发起订阅请求。
处理订阅状态:根据用户的选择,处理订阅状态的变化。
发送模板消息:当订阅成功后,根据需要发送相应的模板消息。
注意事项
- 用户勾选 “总是保持以上选择,不再询问” 之后,下次订阅调用 wx.requestSubscribeMessage 不会弹窗,保持之前的选择,修改选择需要打开小程序设置进行修改。
- 真机和微信开发工具有差异
-
tmplIds接收的集合,一次性订阅和长期订阅两个类型的不能同时触发
-
一定需要由用户触发,也就是一定要有按钮操作触发,不能直接调用
-
注意前后端环境要一致(容易被忽略)
-
查看你的手机的设置—通知,是否允许你的应用接收推送
-
一次性订阅消息类型的时效是7天
-
每次弹框, 只能配置最多 3 个订阅消息
-
开发环境在模拟器上可以手动清除授权,但是部署到体验版和正式版是无法手动清除授权的
-
小程序右上角三个点--设置--订阅消息 可以修改是都接收订阅消息,也可以查询到哪些允许和拒绝
原生开发代码:
getAuth() {
return new Promise((resolve, reject) => {
const tmplId = "写自己的模板id";
wx.getSetting({ // 获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限
withSubscriptions: true,
success: (res) => {
if (res.subscriptionsSetting.mainSwitch) {
if (res.subscriptionsSetting.itemSettings != null) {
const moIdState1 = res.subscriptionsSetting.itemSettings[tmplId];
if (!moIdState1 || moIdState1 !== "accept") {
this._subscribeMessage(tmplId, resolve, reject);
} else {
// 已订阅
resolve({ status: "already_subscribed" });
}
} else {
this._subscribeMessage(tmplId, resolve, reject);
}
} else { // 引导用户去设置里面开启订阅功能
wx.showModal({
title: "提示",
content: "请先去小程序设置里面打开订阅通知!",
showCancel: false,
complete: () => {
reject(new Error("mainSwitch is off"));
},
});
}
},
fail: (error) => {
reject(error);
},
});
});
},
_subscribeMessage(tmplId, resolve, reject) {
wx.requestSubscribeMessage({
tmplIds: [tmplId],
success(res) {
// console.log("订阅消息 成功 ", res);
resolve(res);
},
fail(er) {
// console.log("订阅消息 失败 ", er);
reject(er);
},
});
},
uniapp:
_subscribeMessage() {
uni.requestSubscribeMessage({
tmplIds: this.sendMsgId,
success: (resMsg) => {
console.log("提交订单消息推送", resMsg)
if (this.sendMsgId && this.sendMsgId.length) {
this.sendMsgId.forEach((item, index) => {
if (resMsg[item] === 'accept') {
// 用户同意订阅该模板
console.log('提交订单用户同意订阅该模板', item);
}
if (resMsg[item] === 'reject') {
// 用户拒绝订阅该模板
console.log('提交订单用户拒绝订阅该模板', item);
}
})
}
},
fail: (err) => {
console.error('订阅消息失败', err);
}
});
},
转载自CSDN-专业IT技术社区
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/XYX8958/article/details/149049673