uni.getLocation调用失败主因是manifest.json配置不全:微信小程序需配置mp-weixin.requiredPrivateInfos=["getLocation"]和permission.scope.userLocation.desc(不可为空或占位),iOS需NSLocationWhenInUseUsageDescription,type必须指定'gcj02'以保障坐标系一致,res.address恒为undefined,逆地理编码须调用高德Web服务API。
uni.getLocation 调用失败?先看 manifest.json 有没有这两项
真机上 uni.getlocation 静默失败、fail 回调不触发、控制台无报错——八成是 manifest.json 没配全。微信小程序强制校验权限声明,漏一项就彻底走不通。
-
mp-weixin.permission.scope.userLocation.desc必须存在且不能是空格或纯占位符,比如写成"用于查找附近门店";写成"获取位置"可能过不了审核 -
mp-weixin.requiredPrivateInfos是 2023 年起新增的白名单,必须显式包含["getLocation"],HBuilderX 可视化配置不会自动加它,iOS 真机不加必报errCode: -1, errMsg: getLocation:fail privacy permission is not authorized
type 参数不指定或乱选,坐标系就不可控
微信返回的经纬度默认是 GCJ02(火星坐标),但 type 参数直接影响结果稳定性和后续地图匹配效果。别信“不填也行”。
-
type: 'gcj02':最稳妥,高德/腾讯 SDK 解析地址时默认按此处理,安卓/iOS 行为一致 -
type: 'wgs84':理论上返回 GPS 原始坐标,但实测小米、华为等机型仍返回 GCJ02,不可依赖 - 不传
type:文档未定义行为,部分安卓返回 GCJ02,iOS 可能返回 WGS84,逆解析时地址偏移明显
别碰 res.address,它永远是 undefined
uni.getLocation 成功回调里的 res.address 字段是摆设,微信压根不填。想拿到省市区、街道、adcode,必须走逆地理编码 API。
- 前端直连高德 Web 服务 API 最快:
https://restapi.amap.com/v3/geocode/regeo?location=${longitude},${latitude}&key=your-key&extensions=base,注意 location 是“经,纬”顺序,和res.longitude、res.latitude一致 - key 必须在高德开放平台开通「Web 服务」并绑定域名(H5)或小程序 AppID(微信小程序),只开 JS API 不行
- 后端代理更安全:避免 key 泄露、统一做缓存和限流、能处理
infocode: 10007(key 错误)等错误码
逆解析不是“请求一次就完事”,得防住网络和配额问题
真实场景里,用户可能在电梯里、地下车库、弱网环境,一次请求大概率超时或失败。高德免费版日调用量 1 万次,QPS 仅 2,没兜底会直接卡死 UI。
- 前端封装时务必加
setTimeout包裹 Promise,比如 8 秒超时,避免uni.getLocation成功后界面假死 - 逆解析失败要降级:显示“当前位置”+经纬度(如“北纬39.90°,东经116.39°”),而不是空白或 loading 转圈
- adcode(6 位行政区划码)必须由后端映射业务城市 ID,前端拿不到权威归属关系,百度 API 的
city_code经常为空,别信
district 和 city 是字符串,不是结构化对象,需要自己按需截取或 fallback。


















