微信小程序消息订阅

一入前端深似海 第一次接触小程序 感受到了崩溃 太可怕了
用户第一次点击授权按钮会弹出微信授权弹出框,这个时候点击允许,就算手动关闭右上角消息订阅设置,下次再进来点击订阅按钮也不会弹出任何窗口!!!!我一直以为我是我代码问题 原来不是我的问题
在这里插入图片描述

如果用户手动关闭了右上角的消息订阅,这时候点击的会报错20004,可以在fail里面先调用wx.showModal弹出框 然后在里面调用wx.openSetting就会弹出以下页面消息订阅开关页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
三目运算符进来会闪一下更改文案

<view class="{{takeStatus ? '' : 'item-btn'}}" bindtap="{{takeStatus ? '' : 'subscription'}}">
	{{takeStatus ? '已订阅' : '订阅'}}
</view>

所以我们用下面这种写法

 <view wx:if="{{takeStatus}}">已订阅</view>
 <view wx:else class="item-btn" bindtap="subscription">订阅</view>
// 页面的初始数据
data: {
  takeStatus:false,
},
onShow:function(){
    wx.getSetting({
      withSubscriptions:true,
        success: (res) => {
        //获取当前消息订阅开关状态
          getApp().globalData.takeStatus = res.subscriptionsSetting['mainSwitch']
      },
      complete: (res) =>{
        this.setData({ takeStatus: getApp().globalData.takeStatus });
      }
  });
  console.log(this.data.takeStatus)
},
// 点击事件  
subscription:function(){
    // 查看用户授权是否授权
    console.log(this.data.takeStatus)
    if (this.data.takeStatus) {
      console.log('已授权')
    } else {
      console.log('未授权')
      wx.requestSubscribeMessage({
        tmplIds: ['ID写死'],
        success (res) {
          console.log(res)
          //res.tmplIds 到时候换成返回值中的tmplIds
          //reject已授权 accept用户手动关闭了授权
              if(res.tmplIds == 'accept'){
                getApp().globalData.takeStatus = true
              }else{
                getApp().globalData.takeStatus = false
              }
        },
        complete: (res) => {
          if(res.errMsg == 'requestSubscribeMessage:ok'){
              this.setData({ takeStatus: getApp().globalData.takeStatus });
          }
        },
        fail:(res) =>{
          console.log('调用授权弹出框报错')
          console.log(res)
          // 这个时候我们弹出openSetting
          wx.showModal({
            title: '提示', //提示的标题,
            content: '点击右上角打开授权设置', //提示的内容,
            showCancel: true, //是否显示取消按钮,
            cancelText: '取消', //取消按钮的文字,默认为取消,最多 4 个字符,
            cancelColor: '#000000', //取消按钮的文字颜色,
            confirmText: '确定', //确定按钮的文字,默认为取消,最多 4 个字符,
            confirmColor: '#3CC51F', //确定按钮的文字颜色,
            success: res =>{
              console.log('showModal----------res')
              console.log(res)
              if (res.confirm){
                wx.openSetting({
                  success:(res) =>{
                    console.log('openSetting成功')
                    console.log(res)
                    if(res.errMsg == 'openSetting:ok'){
                      getApp().globalData.takeStatus = true
                    }else{
                      getApp().globalData.takeStatus = false
                    }
                  },
                  fail: (e) => {
                    console.log('openSetting报错');
                    console.log(e)
                  },
                  complete: (res) => {
                    console.log('openSetting')
                    console.log(res)
                    if(res.errMsg == 'openSetting:ok'){
                      this.setData({ takeStatus: getApp().globalData.takeStatus });
                    }
                  
                  },
                })
              }else{
                console.log('用户点击取消')
                wx.showToast({
                  title: '需要右上角打开授权设置',
                  icon: 'none',
                  duration: 2000,
                })
              }
            }
          })
       
        }
      })
    }
  }

tmplIds
在这里插入图片描述
app.js

 globalData: {
    takeStatus:null,//订阅通知全局变量
  },

另一种方式点击
只针对新用户弹出此窗口 每个用户只有一次弹出机会!!!(反正我这个页面也就出来一次)

<view bindtap="ifAccredit">
   提交
</view>
ifAccredit:function(o){
    wx.requestSubscribeMessage({
      tmplIds: ['sodjpaojfojsiwqurpoiweurpmjvcposdjpouwpoe'],
      success:(res) => {
        console.log('成功进入微信订阅')
        console.log(res)
            if(res.sodjpaojfojsiwqurpoiweurpmjvcposdjpouwpoe == 'accept'){
              getApp().globalData.takeStatus = true
            }else{
              getApp().globalData.takeStatus = false
            }
      },
      complete: (res) =>{
        console.log('每次我都会进来')
        console.log(res)
        // 保存用户信息函数(里面有跳转)
        this.tsong(o)
      },
    })
  },
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值