小程序每次都会弹出订阅消息推送

小程序wx.requestSubscribeMessage用户勾选了‘总是保持以上选择',就不会再弹出了,是有效果的。但是退出程序后不久再进入小程序,还是会弹出,请问这个该怎么解决?


  //订阅请求
  getMessage() {
    wx.requestSubscribeMessage({
      tmplIds: ['IU5vxEctjDs8UDmeFHSRNKSOX1QSczzI10dls_pz3Jc', '8fESIg7ASWnnFv8hMMeZf5GecfNWpI4DZ7jF81M3fxo'],
    })
  },

img

回答引用chatgpt:
当用户勾选了“总是保持以上选择”后,小程序将获得用户授权,并且再次请求该权限时不再弹出授权窗口。但是,当用户退出小程序后,微信会自动清除所有的授权状态,包括“总是保持以上选择”的状态。

因此,用户下一次进入小程序时,仍然需要重新授权。

要解决这个问题,可以在小程序启动时检查用户是否已经授权了所需的订阅消息权限。如果用户已经授权,就不需要再次请求授权;如果用户没有授权,则需要弹出授权窗口,让用户进行授权。

可以使用 wx.getSetting 方法来获取用户的授权状态,代码示例如下:


wx.getSetting({
  withSubscriptions: true,
  success(res) {
    // 判断用户是否授权了订阅消息权限
    if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings) {
      const itemSettings = res.subscriptionsSetting.itemSettings
      if (itemSettings[TEMPLATE_ID].subscribe == 'accept') {
        // 用户已经授权,不需要再次请求授权
        return
      }
    }
    
    // 用户没有授权,需要请求授权
    wx.requestSubscribeMessage({
      tmplIds: [TEMPLATE_ID],
      success(res) {
        // 处理用户授权的结果
      }
    })
  }
})

其中,withSubscriptions 参数需要设置为 true,以获取用户的订阅消息权限状态。TEMPLATE_ID 是需要订阅的消息模板 ID。在成功获取到用户的订阅消息权限状态后,可以根据用户的授权状态决定是否请求授权。