微信小程序授权失败再次授权
2020-11-01 本文已影响0人
hello_web_Front
微信小程序在进行用户授权的操作中,会先询问用户是否授权,这个授权的弹框只会弹出一次(如下图所示),一旦你点击拒绝授权,是不会再弹出是否授权的窗口的。
1603965201(1).png
如何解决呢?打开授权面板,用户自行勾选哪些授权。这样就可以正常的使用了。
这里使用showModel进行模拟授权的弹框,也就是如果首次用户拒绝授权,那么再次点击的时候弹出一个showModel,询问是否授权,如果点击确认就打开授权面板,如果取消则算了。再次点击的时候再次显示showModel即可。
IEW0Z)I@OGU5X}T`AO{($IF.png
代码思路:
首先通过wx.getSetting 获取授权获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限,具体又哪些参数自行打印成功之后的回调函数,(我这里用到的是位置)然后通过wx.authorize这个方法来判断用户有没有授权位置权限,如果没有的话,则调用wx-showModel 弹出框诱导用户前往设置面板,如果弹出的showModel用户点击也是取消按钮 ,那么无法获取位置,当他再次点击的时候继续弹出showModel
QQ图片20201101234331.png
具体的代码如下:
choosePostion() {
var _self = this;
wx.getSetting({
// 获取用户的已经和用户申请过的权限
success(res) {
console.log(res);
if (!res.authSetting["scope.userLocation"]) {
// 说明这里用户是拒绝授权的
wx.authorize({
scope: "scope.userLocation",
success() {
// 用户同意进行授权了
_self.getPosition();
},
// 用户点击的是拒绝授权 这个时候当你再次点击打开地图的按钮 是不会打开弹框的 更不回会打开地图的。
fail: async () => {
// 对微信的showModel进一步封装
const flag = await showModel("位置");
if (flag) {
wx.openSetting({
success() {
_self.getPosition();
},
});
}
},
});
} else {
_self.getPosition();
}
},
});
},