微信小程序定位模块或者访问权限拒绝一般要如何处理

微信授权拒绝之后无法再次调用起授权弹框,所以可以通过调用设置权限按钮来打开权限信息

问题如下所示:

在这里插入图片描述

解决办法

具体思路:

**wx.getSetting()**查看授权情况
**wx.openSetting()**调用设置界面让用户打开权限
**wx.getLocation()**获取位置信息

代码实现:

1、微信小程序getLocation获取地理位置授权,首先需要在app.json中添加配置:

  "permission": {
      "scope.userLocation": {
        "desc": "你的位置信息将用于小程序定位,以便更好的体验功能"
      }
  },

2、wxml代码:

<view class="container">
  <view class="map-point-select" bindtap="mapSetting">获取地址信息</view>
</view>

3、js代码:

// index.js
// 获取应用实例
const app = getApp()

Page({
  data: {},
  onLoad() {},
  mapSetting: function () {
    let that = this;
    // 获取用户当前设置
    wx.getSetting({
      success: (res) => {
        // 微信授权拒绝之后无法再次调用起授权弹框,所以可以通过调用设置权限按钮来打开权限信息
        if (res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true) {
          wx.showModal({
            title: '',
            content: '我们需要获取你的地理位置,请确认授权',
            success: function (res) {
              if (res.cancel) {
                wx.showToast({
                  title: '您已拒绝授权',
                  icon: 'none'
                })
              } else if (res.confirm) {
                // 调起客户端小程序设置界面,返回用户设置的操作结果
                wx.openSetting({
                  success: function (dataAu) {
                    if (dataAu.authSetting["scope.userLocation"] == true) {
                      that.getLocation(dataAu);
                    } else {
                      wx.showToast({
                        title: '授权失败',
                        icon: 'none'
                      })
                    }
                  }
                })
              }
            }
          })
        }
        // 初始化进入,未授权
        else if (res.authSetting['scope.userLocation'] == undefined) {
          that.getLocation(res);
        }
        // 已授权
        else if (res.authSetting['scope.userLocation']) {
          that.getLocation(res);
        }
      }
    });
  },

  /**
   * 获取地理信息
   */
  getLocation: function (userLocation) {
    let that = this;
    wx.getLocation({
      // gcj02:返回国测局坐标,即经纬度加密后的坐标。
      type: "gcj02",
      success: function (res) {
        let latitude = res.latitude;
        let longitude = res.longitude;

        console.log(res);
      },
      fail: function (res) {
        if (res.errMsg === 'getLocation:fail:auth denied') {
          wx.showToast({
            title: '您已拒绝授权',
            icon: 'none'
          })
          return
        } 
        // 使用可选链简化代码并避免在访问不存在的属性时出现错误
        if (!userLocation?.authSetting?.['scope.userLocation']) {
          that.mapSetting();
        } else if (userLocation.authSetting?.['scope.userLocation']) {
          wx.showModal({
            title: '',
            content: '请在系统设置中打开定位服务',
            showCancel: false,
            success: result => {
            }
          })
        } else {
          wx.showToast({
            title: '授权失败',
            icon: 'none'
          })
        }
      }
    });
  },
})

4、如果设备未开启位置信息服务,授权成功后在wx.getLocation()方法中也会获取失败,需要在fail方法中提示用户开启手机位置信息。文章来源地址https://uudwc.com/A/xG50R

原文地址:https://blog.csdn.net/weixin_45076969/article/details/131171982

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年10月02日 16:09
Windows 系统下:SSH 远程连接 Linux 服务器的完整指南
下一篇 2023年10月02日 17:39