收藏
回答

一次性订阅消息,用户选择拒绝并且默认选项后,是不能继续弹出请求授权窗口吗?

如题,一次性订阅消息,用户选择拒绝并且默认选项后,是不能继续弹出请求授权窗口吗?

回答关注问题邀请回答
收藏

3 个回答

  • 耿霄
    耿霄
    2020-01-09

    不会在弹了,控制权在微信侧

    2020-01-09
    有用
    回复
  • 老张
    老张
    2020-01-09

    此时需要wx.openSetting()

    2020-01-09
    有用
    回复 3
    • 无求(东莞子午线航空)
      无求(东莞子午线航空)
      2020-01-09
      openSeetting里面选项只提供了这几种,没有订阅消息的
      2020-01-09
      回复
    • L-Man
      L-Man
      2021-08-27
      你前面有getSetting.openSetting的时候就能出来,
      我这个人比较喜欢直接上代码
      // 消息订阅:1、触发【服务状态、欠费】
        messageReader() {
          let that = this;
          //需要订阅的消息模板,在微信公众平台手动配置获取模板ID
          let messageA = xxxxxxxxxxxx;; // 1
          let messageB = xxxxxxxxxxxx;; // 2
          // 如果总是拒绝(subscriptionsSetting,2.10.1库才支持)
          if (that.versionCompare('2.10.1')) {
            wx.getSetting({
              withSubscriptions: true, // 是否同时获取用户订阅消息的订阅状态,默认不获取
              success: (res) => {
                if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings &&
                    res.subscriptionsSetting.itemSettings[messageA] == "reject") {
                  console.log(res, '检测到没开订阅A')
                  //打开设置去设置
                  that.openConfirm('检测到您没打开推送权限,是否去设置打开?')
                  return;
                }
                if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings &&
                  res.subscriptionsSetting.itemSettings[messageB] == "reject") {
                  console.log(res, '检测到没开订阅B')
                  //打开设置去设置
                  that.openConfirm('检测到您没打开推送权限,是否去设置打开?')
                  return;
                }
                console.log(res, '检测到都开了订阅')
                wx.requestSubscribeMessage({
                  tmplIds: [messageA, messageB],
                  success: (res1)=> {
                    console.log(res1, '用户允许1')
                    if (res1[messageA] == 'accept' && res1[messageB] == 'accept') {
                      //用户允许
                      console.log(res1, '用户允许')
                      wx.redirectTo({
                        url: '/pages/unipay/index',
                      })
                    }
                  },
                  fail: (err1)=> { console.log(err1, '失败1') }
                })
              }
            })
          } else if (that.versionCompare('2.4.4')) {
            console.log('2.4.4')
            wx.requestSubscribeMessage({
              tmplIds: [messageA, messageB],
              success: (res2)=> {
                console.log(res2, '订阅成功~1')
                if (res2[message] == 'accept') {
                  console.log(res2, '订阅成功~2')
                  if (res1[messageA] == 'accept' && res1[messageB] == 'accept') {
                    //用户允许
                    console.log(res1, '用户允许')
                    wx.redirectTo({
                      url: '/pages/unipay/index',
                    })
                  }
                }
              },
              fail: (err2)=> { console.log(err2, '失败2') }
            })
          }
        },
        // 消息订阅:2、基础库版本比较
        versionCompare(v) {
          let that = this
          const version = wx.getSystemInfoSync().SDKVersion
          if (that.compareVersion(version, v) >= 0) {
            return true
          } else {
            return false
          }
        },
        // 消息订阅:3、版本比较
        compareVersion(v1, v2) {
          v1 = v1.split('.')
          v2 = v2.split('.')
          var len = Math.max(v1.length, v2.length)
          while (v1.length < len) {
            v1.push('0')
          }
          while (v2.length < len) {
            v2.push('0')
          }
          for (var i = 0; i < len; i++) {
            var num1 = parseInt(v1[i])
            var num2 = parseInt(v2[i])
            if (num1 > num2) {
              return 1
            } else if (num1 < num2) {
              return -1
            }
          }
          return 0
        },
        // 消息订阅:4、配置权限
        openConfirm(message) {
          wx.showModal({
            content: message,
            confirmText: "好的",
            cancelText: "取消",
            success: (res) => {
              //点击“确认”时打开设置页面
              if (res.confirm) {
                wx.openSetting({
                  success: (res) => {
                    // console.log(res.authSetting)
                    // console.log('打开订阅')
                  },
                  fail: (error) => {
                    console.log(error)
                  }
                })
              } else {
                // console.log('用户点击取消')
              }
            }
          });
        },
      2021-08-27
      回复
    • 老张
      老张
      2021-08-27回复无求(东莞子午线航空)
      你找错wx.openSetting了。
      https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.openSetting.html
      2021-08-27
      回复
  • 正周
    正周
    2020-01-09

    是啊

    2020-01-09
    有用
    回复
登录 后发表内容
问题标签