Taro 小程序处理消息通知弹窗

发布时间 2023-07-20 11:38:39作者: qqcc1388

业务需求,在用户操作了下单按钮后会弹出提醒他开启消息通知,这个时候根据用户的选项引导用户去开启通知的逻辑如下:

// 是否设置过授权
openMsg() {
  var that = this;
  // 获取用户的当前设置,判断是否点击了“总是保持以上,不在询问”
  Taro.getSetting({
    withSubscriptions: true, // 是否获取用户订阅消息的订阅状态,默认false不返回
    success(res) {
      if (res.authSetting['scope.subscribeMessage']) { // 用户点击了“总是保持以上,不再询问”
        Taro.openSetting({ // 打开设置页
          success(re) {
            console.log(re.authSetting)
          }
        });
      } else { // 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
        that.applyMessage();
      }
    }
  })
}
// 发送消息
applyMessage() {
  return new Promise<void>((resolve, reject) => {
    if (!Taro.requestSubscribeMessage) {
      resolve()
      return
    }
    //弹窗通知提醒
    let ids = ['XipVLmN0N4frqj9fGRsMfmabcBdhfpzvkLqISMK2mrZ4z4', 'Qp2XZEyh2fbGSyWf5McccE4XNfTuEZxE876oTvkptLRHGY']
    Taro.requestSubscribeMessage({
      tmplIds: ids,
      success: (res) => {
        if (res[ids[0]] === 'accept' || res[ids[1]] === 'accept') {
          Taro.showToast({
            title: '订阅成功!',
            duration: 1000,
            success(data) {
              // 成功
              resolve()
            }
          })
        } else {
          Taro.showModal({
            content: '未授权发送通知,您将收不到通知!',
            confirmText: '重新授权',
            cancelText: '取消授权',
            success: (re) => {
              if (re.confirm) {
                reject()
                // this.request_order = false;
                this.applyMessage()
              } else {
                resolve()
              }
            }
          })
        }
      },
      fail: (err) => {
        Taro.showModal({
          content: '未授权发送通知,请到小程序设置界面开启订阅',
          confirmText: '去开启',
          cancelText: '暂不开启',
          success: (res) => {
            if (res.confirm) {
              reject()
              Taro.openSetting()
            } else {
              resolve()
            }
          }
        })
      }
    })
    // #endif
    resolve();
  })
}