uni.getLocation报错或反复弹窗,主因是manifest.json缺失requiredPrivateInfos和permission配置、微信公众平台未完善《用户隐私保护指引》、或调用前未用uni.getSetting检查授权状态并分路径处理。

uni-app 微信小程序里 uni.getLocation 直接报错或反复弹窗,基本不是代码写错了,而是 manifest.json 缺配置、后台没填隐私指引、或者调用逻辑没兜住拒绝场景——这三处漏一个,位置就拿不到。
manifest.json 必须加 requiredPrivateInfos 和 permission
微信从 2023 年起强制要求声明隐私接口白名单,只配 permission 不行,requiredPrivateInfos 缺一不可。配置必须放在 "mp-weixin" 节点下,且和 appid 同级:
{
"mp-weixin": {
"appid": "你的AppID",
"requiredPrivateInfos": ["getLocation"],
"permission": {
"scope.userLocation": {
"desc": "用于为您推荐最近的充电桩和导航路线"
}
}
}
}
注意以下几点:
-
requiredPrivateInfos只写实际用到的接口,比如只调uni.getLocation就只填["getLocation"],混入"getPhoneNumber"会导致审核失败 -
desc字段要具体、真实、带业务场景,不能写“用于定位功能”这种空话,否则用户不点允许,审核也过不了 - 改完
manifest.json后,必须在 HBuilderX 中**停止运行 → 重新编译**,热更新不会生效
调用前必须用 uni.getSetting 检查状态
直接 uni.getLocation 是最常见错误。用户一旦拒绝过,再调就会静默失败(fail 回调触发但无明确错误码),而不是再次弹窗。
正确做法是先查状态,再分路径处理:
- 已授权 → 直接调
uni.getLocation - 未授权/拒绝过 → 先
uni.authorize,成功后再调getLocation -
authorize失败(用户点了拒绝)→ 弹uni.showModal引导去设置页,然后调uni.openSetting
别省略 isHighAccuracy: true 参数,它能提升定位精度(尤其室外),但需设备支持;坐标系优先选 gcj02,和高德/腾讯地图兼容性最好。
解析微信公众号文章,提取标题、作者、正文、图片等信息。用户发送链接(mp.weixin.qq.com)时触发,自动提取内容并可保存至飞书表格。
微信公众平台后台必须补全《用户隐私保护指引》
这个步骤很多人忽略,但它会直接导致 uni.getLocation 进 fail 回调,且控制台不报任何错误信息,调试时极难排查。
操作路径:
- 登录 微信公众平台
- 进入对应小程序 → 左侧菜单「账号设置」→「基本设置」→「服务内容声明」→「用户隐私保护指引」→「去完善」
- 勾选「地理位置」并填写与
manifest.json中一致的用途说明
没填这里,哪怕 manifest.json 和代码全对,uni.getLocation 也永远返回失败。
uni.getLocation 的 type 和坐标系选择
微信小程序默认返回的是 wgs84(GPS 原始坐标),但国内地图 SDK(高德、腾讯)要求使用 gcj02(火星坐标系)。直接传 wgs84 到地图组件上,位置会偏移几百米。
所以务必显式指定:
-
type: 'gcj02':适配高德、腾讯地图渲染,推荐首选 -
type: 'wgs84':仅当你需要对接国际地图(如 Mapbox)或做地理围栏计算时才用 - 避免不写
type参数,默认行为不稳定,不同基础库版本可能不同
另外,isHighAccuracy: true 在部分安卓机型(如小米)上依赖 WiFi 开关开启,若用户关了 WiFi,即使开了 GPS,也可能降级为基站定位,误差达 500 米以上——这点在弱网或室内场景必须有心理预期。


















