微信小程序需在manifest.json的mp-weixin节点下显式配置requiredPrivateInfos为["getLocation"]或["getFuzzyLocation"],且须与permission同级;App平台不认该字段,iOS/Android权限需分别配置;首次授权前必须用uni.getSetting检查状态,拒绝后需引导openSetting;隐私指引须在公众平台后台补全。

manifest.json 里漏配 requiredPrivateInfos 就必然失败
微信小程序环境下,uni.getLocation 或 uni.getFuzzyLocation 调用直接进 fail 回调,且错误信息常是 “the api need to be declared in the requiredPrivateInfos field”,这不是权限没申请,而是配置根本没声明接口白名单。
-
mp-weixin节点下必须显式写"requiredPrivateInfos": ["getLocation"](高精度)或["getFuzzyLocation"](模糊定位),缺一不可 -
permission和requiredPrivateInfos是并列同级字段,不是嵌套关系;很多人误把requiredPrivateInfos写在permission里面,导致无效 - HBuilderX 编译不会自动热更 manifest.json,改完必须「停止运行 → 重新编译」到微信开发者工具,否则配置不生效
uni.authorize 前没 uni.getSetting 检查会静默失败
用户首次打开时若未授权,直接调 uni.authorize 可能无反应或报错 auth deny —— 微信限制:对已拒绝过的 scope,再次 authorize 不再弹窗,只能引导手动设置。
- 务必先调
uni.getSetting拿res.authSetting['scope.userLocation']状态,不能跳过检查直接授权 - 如果返回
false,说明用户点过“拒绝”,此时应弹uni.showModal提示,并用uni.openSetting跳转设置页,而不是重试authorize - Android 6.0+ 和 iOS 都需此流程,App 平台同样适用,不能只做小程序适配
选 getLocation 还是 getFuzzyLocation?看产品需求,别硬刚
微信对 getLocation 接口审核极严,2026 年仍延续“场景强约束”策略:申请理由、截图、用途描述稍有模糊就拒。而 getFuzzyLocation 审核宽松,半小时内过审常见。
- 市区级定位(如“显示附近商圈”“切换当前城市”)完全够用,精度约 1–3 公里,耗电低、成功率高
-
getLocation真要上,得准备:清晰的高精度使用场景截图 + 文字说明(例如“充电桩精准导航需 5 米内误差”),否则大概率被拒两次以上 - 二者返回坐标系一致(GCJ-02),无需额外转换;但
getFuzzyLocation不返回海拔、速度等字段
iOS 和 Android 的 manifest 权限配置不能共用一套
manifest.json 里 app-plus 下的权限结构,iOS 和 Android 差异极大,混写会导致某平台定位完全不可用。
- Android 需在
distribute.android.permissions中写字符串数组:"<uses-permission android:name='\"android.permission.ACCESS_FINE_LOCATION\"/'>"</uses-permission> - iOS 必须在
distribute.ios下加NSLocationWhenInUseUsageDescription和UIBackgroundModes: ["location"],否则真机无回调 - App 平台不认
requiredPrivateInfos,那是小程序专属;反过来,小程序也不读distribute配置
最易被忽略的是:微信要求《用户隐私保护指引》必须在公众平台后台「服务内容声明」里补全,否则哪怕 manifest 和代码全对,getLocation 也会静默失败,且控制台不报具体原因。

















