mpvue

微信小程序授权失败再次授权

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();
        }
      },
    });
  },
上一篇下一篇

猜你喜欢

热点阅读