背景分析:
1、微信公众平台需要先使用模板,不符合要求的就重新申请模板(提交了10余次才通过,要求很严格,按照要求修改即可)
2、前端需调起用户授权(考虑到用户体验的问题,用户没有授权时会调用起来用户授权弹框,当用户授权完成后则无需再弹框提示授权问题)
onShow() { let loginRes = this.checkLogin(); if (!loginRes) { return false; } else { this.is_authorization = uni.getStorageSync('is_authorization'); // 获取用户当前订阅消息的授权状态 } },
// 开启订阅消息设置窗口
openMsg() {
var that = this;
// 获取用户的当前设置,判断是否点击了“总是保持以上,不在询问”
wx.getSetting({
withSubscriptions: true, //是否获取用户订阅消息的订阅状态,默认false不返回
success(res) {
console.log("订阅消息的订阅状态",res);
if(that.is_authorization){
uni.showToast({
title: "您已订阅商机消息提醒,无需重复订阅!",
icon: "none"
});
}else{
if (res.subscriptionsSetting['bjshmNY6Z4R-EM_vunOfa0-YbbbpqDA0huiNy7FQytI'] == "reject") { //用户点击了“总是保持以上,不再询问”
wx.showModal({
title: '温馨提示',
content: "检测到您没有开启订阅消息的权限,是否去设置?",
success: function(modal) {
if (modal.confirm) { // 点击肯定
wx.openSetting({
withSubscriptions: true
});
that.is_authorization = true;
uni.setStorageSync('is_authorization',true);
}else{
uni.showToast({
title:"您已拒绝订阅消息授权,无法预约领取",
icon:"error"
});
that.is_authorization = false;
}
}
})
} else { // 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
// var templateid = that.setting.templateid.map(item => item.tempid);
let tmpid = ['bjshmNY6Z4R-EM_vunOfa0-YbbbpqDA0huiNy7FQytI'];
uni.requestSubscribeMessage({
tmplIds: tmpid,
success(res) {
if (res[tmpid[0]] == "accept") {
uni.showToast({
title: "订阅成功",
icon: "none"
});
that.is_authorization = true;
uni.setStorageSync('is_authorization',true);
}else{
uni.showToast({
title:"您拒绝订阅消息授权,无法预约领取",
icon:"none"
});
that.is_authorization = false;
}
},
fail: (res) => {
wx.showModal({
title: '温馨提示',
content: "检测到您没有开启订阅消息的权限,是否去设置?",
success: function(modal) {
if (modal.confirm) { // 点击肯定
wx.openSetting({
withSubscriptions: true
});
that.is_authorization = true;
uni.setStorageSync('is_authorization',true);
}else{
uni.showToast({
title:"您已拒绝订阅消息授权,无法预约领取",
icon:"error"
});
that.is_authorization = false;
}
}
})
}
})
}
}
}
})
},
注意:由于无法获取红框部分的参数,所以无法判断用户是否已经授权,所以我就使用了一个参数来判断 is_authorization 只要用户点击允许,这个变量就为true并且立马存session,有且只有当该变量为true时才表示用户已经授权了,也就不用再次要求弹框授权 否则就视为没有授权。(吐槽:当用户没有勾选【总是】选项时就没有itemSetting这个参数,也就无法判断是否授权了。官方这么明显的bug为啥一直存在,一点也不考虑用户体验的么,醉都醉了,既然推出这个玩意就整得稍微好点不行么,开发人员一直在爬坑!!!yue了)
3、后台使用链接 https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=“xxxxx”;; 一定是这个链接,否则会一直报错40081没有授权!
并且一定要有page 参数: 对应的值是前端页面的首页链接“pages/index/index”
否则发送的商机信息是没有进入小程序入口的
正常如下: