一入前端深似海 第一次接触小程序 感受到了崩溃 太可怕了
用户第一次点击授权按钮会弹出微信授权弹出框,这个时候点击允许,就算手动关闭右上角消息订阅设置,下次再进来点击订阅按钮也不会弹出任何窗口!!!!我一直以为我是我代码问题 原来不是我的问题
如果用户手动关闭了右上角的消息订阅,这时候点击的会报错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)
},
})
},