uni-app小程序隐私弹窗必须走微信原生机制,manifest.json的app-plus.privacy无效;需在app.json或manifest.json的mp-weixin下配置"__usePrivacyCheck__": true,配合uni.getPrivacySetting判断needAuthorization,并在onLaunch中监听wx.onNeedPrivacyAuthorization后调用resolve({event: 'agree'})触发授权。

uni-app 微信小程序的隐私协议弹窗不能靠 manifest.json 的 app-plus.privacy 配置触发——这个字段只对 App 端生效,小程序必须走微信原生机制,否则弹窗永远不会出现。
app.json 必须声明 __usePrivacyCheck__
这是整个流程的启动开关,漏掉就完全不走隐私检查流程:
- 字段名严格为双下划线开头结尾:
"__usePrivacyCheck__": true,写成usePrivacyCheck、__useprivacycheck__或加注释都会失效 - 2023 年 10 月 17 日后微信默认启用,但保留该字段能兼容旧基础库(尤其测试环境)
- 必须放在小程序根目录的
app.json中,不是project.config.json或manifest.json - uni-app 编译时会把
mp-weixin节点内容合并进app.json,所以你也可以在manifest.json的mp-weixin下加:"__usePrivacyCheck__": true
uni.getPrivacySetting 返回 needAuthorization 一直是 false
这不是代码逻辑问题,而是前置条件没满足:
- 微信开发者工具「详情 → 项目设置 → 调试基础库」必须 ≥
3.0.0(低于2.32.3根本不支持该接口) -
uni.getPrivacySetting只在用户从未授权过、且小程序后台已提交并通过《用户隐私保护指引》审核后才可能返回true - 如果返回
{ needAuthorization: false, privacyContractName: "《小程序隐私保护指引》" },大概率是后台指引未发布或未审核通过 - 不要在
onLaunch里直接弹窗,先调用uni.getPrivacySetting,仅当res.needAuthorization === true时才设showPrivacy = true
wx.onNeedPrivacyAuthorization 监听失败或 resolve 不触发
这个监听挂不上,后续所有隐私 API(如 wx.login、uni.getLocation)都会卡住或报 fail privacy permission is not authorized:
- 监听必须在生命周期早期注册,推荐在
App.vue的onLaunch里一次性注册,不能每个页面都重复监听 - 回调第一个参数
resolve是函数,必须由你主动调用:resolve({ event: 'agree' })或resolve({ event: 'disagree' });传字符串、空对象、或异步调用都会失效 - 按钮必须带
open-type="agreePrivacyAuthorization",绑定事件用@agreeprivacyauthorization(全小写、无横线、无驼峰) - 避免多个页面共用一个弹窗组件时
resolve被覆盖,建议用全局变量暂存,例如:window.__privacyResolve = resolve,再在“同意”按钮点击时调用
最容易被忽略的是:小程序后台的《用户隐私保护指引》必须先提交并审核通过,否则微信底层根本不触发授权流程,所有前端配置都是空转。调试时看到 needAuthorization 恒为 false,第一反应不该改代码,而是去后台看指引状态。



















