微信小程序,用户订阅消息,判断订阅消息是否已经订阅

微信订阅消息的基础知识:

微信订阅消息分为一次性订阅和长期订阅

1、一次性订阅就是要用户点击一次触发订阅,服务端才能发送一次信息。点击多少次就能发送多少次。

2、长期订阅。服务端可以无限,但是教育、交通、医疗等行业才有长期订阅。

用户对小程序订阅权限的开关有两个开关,设置操作如下

点击小程序右上角的三个点,在弹出窗中找到设置。

点通知管理,可以看到【接收通知】这里是一个通知的总开关,下面是小程序相关具体提醒的开关

进点去可以看到【消息提醒】的开关。

微信小程序代码实现订阅

下面主要是实现一次性订阅消息的代码:

wxml文件

    <button type="primary" bindtap="subscribeMessage">订阅提醒</button>

获取模版id

订阅消息发送消息时需要用到模板id.

开发者需要登录小程序管理后台 ,在「功能-订阅消息-公共模版库-一次性订阅」中查询可以申请的模板,审核通过后可使用。

模版有对应类目要求,符合类目要求的小程序可在公共模版库优先看到新版模版。

类目需要搜合适的模板

勾选需要的字段

提交

这里注意一下模板是和目录相关联的,如果选择不到可能是因为类目没有添加备忘录,要去增加一下。

js文件

加入订阅消息代码:wx.requestSubscribeMessage(Object object)

  //授权订阅提醒
  subscribeMessage(){
    console.info('订阅消息!!!');
    let tmplId ='LGpkXsxxxxPFE02z6Oxxxxv_eez0xxxxego';
    wx.requestSubscribeMessage({
      tmplIds: [tmplId],
      success (res) {
        if(res[tmplId]=='accept'){//如果点击允许
          wx.showToast({
            title: '订阅成功',
          })
        }
      }
    })
  }

 效果点击出现订阅效果

判断订阅消息是否已经订阅

let id = 'LGpkXsQ396mr-xxxxxxxxxx6Ovd5w4v_eez0pYoQego'
    wx.getSetting({
      withSubscriptions: true,
      success(res) {
        debugger
        console.log(res)
        if (res.subscriptionsSetting.mainSwitch) { // 用户打开了订阅消息总开关
          if (res.subscriptionsSetting.itemSettings) { // 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权
            let moIdState = res.subscriptionsSetting.itemSettings[id]; // 用户同意的消息模板id
            if (moIdState === 'accept') {
              wx.requestSubscribeMessage({
                tmplIds: ['LGpkXsQ396mr-xxxxxxxxxx6Ovd5w4v_eez0pYoQego'],
                success(res) {
                  wx.showToast({
                    title: '不会再拉起推送消息的授权,订阅成功',
                  })
                },
              })
            } else if (moIdState === 'reject') {
              console.log('拒绝了消息推送');
              wx.showToast({
                title: '拒绝了消息推送',
              });
              wx.openSetting({
                withSubscriptions: true,
              });
            } else if (moIdState === 'ban') {
              wx.showToast({
                title: '已被后台封禁',
              })
            }
          } else {
              wx.requestSubscribeMessage({
                tmplIds: ['LGpkXsQ396mr-xxxxxxxxxx6Ovd5w4v_eez0pYoQego'],
                success(res) {
                  wx.showToast({
                    title: '订阅成功',
                  })
                },
              })
          }
        } else {
          wx.openSetting({
            withSubscriptions: true,
          })
        }
      }
    })

到这里微信前端发起的一次性订阅就完成了。后端服务只要发送消息推送就微信用户就可以收到订阅消息,后端代码实现可以 【微信小程序,用户订阅消息,后端服务发送订阅消息-CSDN博客】

结尾:样例小程序二维码,我自己做的一个免费好用的【随机选择决定转盘工具】小程序,欢迎扫码体验呦!

谢谢阅读!~~

### 关于微信小程序一次性订阅消息始终存在的解决方案 在微信小程序中,`wx.requestSubscribeMessage`用于请求用户订阅特定类型的模板消息。当用户选择“总是保持以上选择,不再询问”,这表示用户的授权设置被保存下来,在后续操作中不会再次弹出授权框[^2]。 对于希望实现持续的消息推送而不仅仅是单次的一次性订阅,一种策略是在应用的不同交互节点上重复提供订阅机会。每当用户执行某些动作时(比如点击按钮),程序会尝试引导其完成新的订阅流程。这种方法能够逐步积累多个独立的一次性订阅权限,间接达到接近长期推送的效果[^3]。 然而,值得注意的是,“总是保持”的选项是由操作系统层面控制的,开发者无法直接修改这一设定。因此,如果目标是改变已经选择了该选项后的行为模式,则可能需要通过更新业务逻辑来适应这种情况——即设计应用程序使得即使在这种情况下也能有效地向用户提供所需的服务或通知[^1]。 为了更好地处理这个问题,建议考虑以下几点: - **优化用户体验**:确保每次提示订阅的时间点都是合理的,并且解释清楚为什么需要这个权限以及它会给用户带来什么好处。 - **利用其他渠道补充信息传递**:除了依赖微信内置的通知机制外,还可以探索其他的沟通方式如邮件、短信等作为辅助手段。 ```javascript // 示例代码展示如何在一个事件处理器内调用 wx.requestSubscribeMessage 方法 function onButtonClick() { wx.requestSubscribeMessage({ tmplIds: ['your_template_id'], success(res) { console.log('User agreed to subscribe:', res); }, fail(err) { console.error('Failed to request subscription', err); } }); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

neter.asia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值