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

news/2025/9/23 9:42:02/文章来源:https://www.cnblogs.com/yfceshi/p/19106614

问题描述

在开发微信小程序使用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.mzph.cn/news/912087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电流探头的测试原理

电流探头是一种用于测量电路中电流的设备,其工作原理主要基于电磁感应定律(法拉第电磁感应定律)和安培环路定律。它通过检测电流产生的磁场来间接测量电流的大小。以下是其核心原理和分类的详细说明: 一、核心原理…

ps专门做兼职的网站天津自动seo

简述 QNetworkInterface类负责提供主机的IP地址和网络接口的列表。 QNetworkInterface表示了当前程序正在运行时与主机绑定的一个网络接口。每个网络接口可能包含0个或多个IP地址,每个IP地址都可选择性地与一个子网掩码和/或一个广播地址相关联。这样的列表可以通过…

第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025)

第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025) 2025 4th International Conference on Cloud Computing, Big Data Application and Software Engineering 第四届云计算、大数据应用与软件工程国际学…

织梦网站名称工程建设开工网站信息

我们平时很多场合需要演示讲解时,少不了使用PPT。尤其目前白领层人士,项目总结、产品介绍、调研报告…无时无刻不被PPT包围,又无时无刻不被PPT设计所困恼。诚然设计好看实用的PPT需要高质量素材资源和坚实的文字功底。但在处理美化PPT时&…

网站建设与网页设计专业沧州英文模板建站

目录 原子性 一致性 持久性 隔离性 事务隔离级别 并发执行可能存在问题 脏读问题 不可重复读 幻读 难点解析 原子性 事务最核心的就是原子性 以前人们认为原子不可再分,用原子性来表示一个事务不可分割 update account set balancebalance-500 where nam…

奥运网站模板祁阳网页设计

当你在国外需要帮助的时候,这些礼貌用语真的是能够帮到你的哦 1.Would/Could you help me? 你可帮助我吗? 相信有些人想请求帮助的时候,一开口就用Can you,这个用在朋友或者熟人上面当然是没有问题的,但是如果是向…

房产门户网站平台搭建财经最新消息今天

使用Vue3的组合API封装的可复用的功能函数 自定义hook的作用类似于vue2中的mixin技术 自定义Hook的优势: 很清楚复用功能代码的来源, 更清楚易懂 案例: 收集用户鼠标点击的页面坐标 hooks/useMousePosition.ts文件代码: import { ref, onMounted, onUnmounted …

设计师网站pin专业教育网站建设

使用 async/await 是必须避免的陷阱 如果我们使用过 nodejs,那么我们可能已经在 javaSoript 中使用了异步操作。异步任务是一个独立于 JavaSoript 引擎的主线程执行的操作。从本质上讲,这就是应用程序功能没有阻塞的 UI 的原因。 nodejs 的单线程性质&a…

关于建设学校网站策划书的范本江苏外协机械加工网

反编译小程序出现异常: SyntaxError: Unexpected token ‘}’ 网上很多都说使用最新版本的反编译 wxappUnpacker-master 包可以进行解析,但是大神已经停止了更新wxappUnpacker-master 包; 查找了网上大部分的wxappUnpacker-master 包&#…

Neo4j常用的语句记录

1. 核心概念:节点、关系、属性 在开始学习语句之前,先理解三个核心概念:节点:表示实体(如人、电影、产品)。用圆括号表示:()。(p:Person):一个带有标签 Person 的节点,变量名为 p。关系:表示节点之间的连接。…

wordpress数据库导入放心网站推广优化咨询

时序分解 | MATLAB实现CEEMDANSE自适应经验模态分解样本熵计算 目录 时序分解 | MATLAB实现CEEMDANSE自适应经验模态分解样本熵计算效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现CEEMDANSE自适应经验模态分解样本熵计算 包括频谱图 附赠案例数据 可直接运行 …

Model Context Protocol (MCP) 完整协议流程详解

1. 概述 Model Context Protocol (MCP) 是一种标准化协议,允许应用程序向AI助手提供上下文信息,包括工具、资源和提示等。该协议基于JSON-RPC 2.0规范,支持双向通信。 2. MCP连接建立流程 2.1 初始连接 sequenceDia…

Java中 String、StringBuilder 和 StringBuffer 的区别? - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

常用的 HTTP 请求方法和区别

常用的 HTTP 请求方法最核心和常用的方法有以下几个:GET用途:请求指定的资源。只用于获取数据,不应产生任何“副作用”(如修改数据)。特点:请求的参数直接附加在 URL 后面(查询字符串 Query String),有长度限…

什么叫网站优化怎么用vs做网站开发

背景 美团点评作为全球最大的生活服务平台,承接超过千万的POI,服务于数量庞大的活跃用户。在海量数据的前提下,定位运营业务、准确找到需要数据的位置,并快速提供正确、一致、易读的数据就变得异常困难,这些困难主要体…

网站左侧导航栏设计交换链接是什么意思

目录 什么是渗透测试 渗透测试的重要性 渗透测试的前置技能 开始入门学习路线 什么是渗透测试 渗透测试,通常被视为模拟黑客的一种安全评估行为,其目的在于全面挖掘目标网站或主机的潜在安全漏洞。与真实的黑客攻击不同,渗透测试旨在发现…

个人建网站做站长手机做免费个人网站

目录 前言1. mysql.connector2. pymysql 前言 连接Mysql一般有几种方法,主要讲解mysql.connector以及pymysql的连接 后续如果用到其他库还会持续总结! 对于数据库中的表格,本人设计如下:(为了配合下面的操作) 1. mysql.connector mysql.connector 是一…

网站cms模板那些网站可以做行测题

随着城市建设的不断发展和交通运输的快速增长,渣土车作为建筑行业中不可或缺的运输工具,承担着大量的渣土运输任务。然而,由于渣土车在运输过程中存在超速、违规变道、碾压行人等交通安全问题,给道路交通和行人安全带来了严重的隐…

网站容易出现的问题什么叫网站前台

一、session 1、客户端发送请求,服务器将登录信息存储在 Session 中,Session 依赖于 Cookie(cookie指的就是在浏览器里面存储的一种数据,仅仅是浏览器实现的一种数据存储功能。Cookie实际上是一小段的文本信息。)&…