评论

点击按钮订阅消息,拒绝则不执行后续操作

订阅消息实现逻辑

关于消息模版

消息模版分为一次性模版和永久模版,永久模版订阅一次,后续会永久推送,一次性模版订阅一次,只推送一次

实现必须订阅一次性模版

流程

代码

// 订阅消息
export const requestSubscribeMessage = (tmplId: string): Promise<boolean> => {

  // wx.getSetting({
  //   withSubscriptions: true,
  //   success (res) {
  //     console.log(res.subscriptionsSetting)
  //     // res.subscriptionsSetting = {
  //     //   mainSwitch: true, // 订阅消息总开关
  //     //   itemSettings: {   // 每一项开关
  //     //     SYS_MSG_TYPE_INTERACTIVE: 'accept', // 小游戏系统订阅消息
  //     //     SYS_MSG_TYPE_RANK: 'accept'
  //     //     zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // 普通一次性订阅消息
  //     //     ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban',
  //     //   }
  //     // }
  //   }
  // })

  // return false
  return new Promise((resolve) => {
    wx.requestSubscribeMessage({
      tmplIds: [tmplId],
      success: async (res) => {
        console.log('订阅', res)
        if (res[tmplId] === "reject") {
          // 打开弹框
          resolve(await openSetting())
        } else {
          // 接受
          resolve(true)
        }
      },
      // 未打开订阅消息授权
      fail: async (err) => {
       // 没有打开消息总开关
        if (err.errCode === 20004) {
          resolve(await openSetting())
        }
        // 其他错误
        resolve(false)
      }
    })
  })
}
  // 打开授权消息设置
 const openSetting = ():Promise<boolean> => {
   return new Promise((resolve) => {
    wx.showModal({
      title: '授权设置',
      content: '请到订阅消息设置中,打开消息接收权限~',
      confirmText: '前往设置',
      success: ({ confirm, cancel }) => {
        if (confirm) {
          wx.openSetting()
          resolve(false)
        } else {
          resolve(false)
        }
      },
    })
   })
  }

总结

如果点了拒绝,且总是保持以上选择,下一次不会弹出消息授权框,且是拒绝状态,以后就无法推送消息,需要手动调出设置界面。如果点了允许且总是保持以上选择,下一次也不会弹出订阅框,但是是允许状态,可以推送消息,所以不用额外处理

最后一次编辑于  04-12  
点赞 0
收藏
评论
登录 后发表内容