当前位置: 首页 > news >正文

克服getLocation获取当前的地理位置,报错:getLocation:fail auth deny及方法封装

问题描述

在开发微信小程序使用wx.getLocation或uni.getLocation获取当前的地理位置、速度的API时,会弹出如下的授权框,如果用户点了允许,那么就会获取到API提供的latitude纬度、longitude经度、speed速度等,但是点了拒绝就会报错:{errMsg: “getLocation:fail auth deny”},下面就将出错的问题以及开启手动授权的方法给大家介绍一下。
在这里插入图片描述

问题一:

如果出现下面的报错,这就说明没有在小程序配置项中设置requiredPrivateInfos。

{
errMsg: "getLocation:fail the api need to be declared in the requiredPrivateInfos field in app.json/ext.json"
}

解决办法:

如果是uniapp开发就需要到更目录下的manifest.json源码视图下配置,如果是微信小程序原生开发,需要到app.json中进行设置,如下:

"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
}
},
"requiredPrivateInfos": ["chooseLocation", "getLocation"]

将获取地理位置API的接口getLocation放置到requiredPrivateInfos属性中,详细的配置,可以参考这篇文章:https://blog.csdn.net/qq_18798149/article/details/150474651。

问题二:

如果出现下面的报错:

{
errMsg: "getLocation:fail auth deny"
}

这是在一开始概述时候说的,弹出获取位置授权框的时候,你点了拒绝,所有小程序就无法获取当前用户的位置信息,有同学可以使用了uni.getLocation的API什么错误都不显示,千万不要忘了fail回调,错误会在fail中,如下所示:

uni.getLocation({
type: 'gcj02',
success: (res) =>
{
console.log(res);
},
fail: (err) =>
{
console.log(err)
}
})

解决办法:
使用我下面封装的方法,让用户手动开启权限,这个方法是通用性的,因为在微信小程序开发中,会用到很多的权限需要用户进行授权,再去获取别的API授权的时候,也可以使用该方法,更多的权限范围可以看这个文档:https://uniapp.dcloud.net.cn/api/other/authorize.html

export const showAuthorize = ({ scope = 'scope.userLocation', text = '您的位置信息'
} = {
}) =>
{
return new Promise((resolve, reject) =>
{
uni.getSetting({
success: (setting) =>
{
if (!setting.authSetting[scope]) {
uni.showModal({
title: '提示',
content: `为了提供更好的服务,请允许小程序获取${text
}`,
confirmText: '去授权',
success: (modal) =>
{
if (modal.confirm) {
uni.openSetting({
success: (open) =>
{
if (open.authSetting[scope]) {
uni.showToast({
icon: 'none',
title: '授权成功'
});
resolve('授权成功');
} else {
uni.showToast({
icon: 'none',
title: '授权失败'
});
reject('授权失败');
}
}
});
} else {
reject('授权失败');
}
}
});
}
}
});
});
};

说明:
showAuthorize 方法接收一个对象;

  • scope:授权范围,可以授权常见的如:scope.userLocation、scope.address、scope.writePhotosAlbum
  • text:授权描述,如:‘保存到相册的权限’、‘您的位置信息’等

使用:

const getLocation = () =>
{
uni.getLocation({
type: 'gcj02',
success: (res) =>
{
console.log(res);
},
fail: async (err) =>
{
console.log(err);
try {
let res = await showAuthorize({
text: '您的位置信息'
});
getLocation();
} catch (err) {
console.log(err);
}
}
});
};

总结:

微信小程序需要用户授权的API还是挺多的,将手动授权的方法进行封装,后期再用的时候,直接调用接口,如果你对该方法封装有更好的建议,欢迎留言讨论。

http://www.rkmt.cn/news/10064.html

相关文章:

  • 电流探头的测试原理
  • p1-1002
  • Java中 String、StringBuilder 和 StringBuffer 的区别? - 指南
  • 解析 Authenticode 部分代码。
  • 实用指南:力扣2132. 用邮票贴满网格图
  • ONCHAINID源码分析(二)
  • 鸿蒙应用开发从入门到实战(十二):ArkUI组件ButtonToggle
  • 从视觉、文案到交互:三步彻底去除产品AI味
  • 剑指offer-32、把数组排成最⼩的数
  • python微博舆情分析系统 情感分析 爬虫 机器学习 新浪微博 信息采集 大数据工艺(源码)✅
  • C# 中的 ReferenceEquals 方法 - 教程
  • 【一周AI资讯】Claude自动抓取网页;美团发布生活Agent;阿里通义发布双模型 - 详解
  • 读人形机器人20财富再分配
  • Java 与人工智能的深度融合:从数据到推理服务
  • 基于 Vite7 与 Vue3 的 WebOS 后台系统架构实践
  • pycharm环境配置
  • 为什么 TCP 是3次握手4次挥手?
  • java中的浮点数计算
  • XYCTF2025复现(WEB)
  • 发布/订阅(Publish/Subscribe)与交换机(Exchange)
  • 线性结构之链表
  • lc1033-移动石子直到连续
  • 同构系统与异构系统深度对比分析
  • # Redis内存管理与过期策略深度解析
  • 北京 意大利学签 北京意大利签证中心 贵宾 vip vfs
  • 第1周
  • 多商家在线客服系统 - 客服用户表设计方案
  • 使用python读取windows注册表
  • 当日总结
  • 3123004481