关注

小程序订阅消息(用户通过弹窗订阅)服务号消息通知/消息推送

微信服务号消息推送,前端开发部分教学,代码在最后

(一)获取/设置模板 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

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--