按照配置文件写法,将 pushRegisterMode 写成了 manual ,oppo手机还是一打开就会申请通知权限,其他手机不会。造成oppo那边审核不通过
欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
针对你提到的 OPPO 手机配置了 pushRegisterMode: "manual" 但一打开应用仍会申请通知权限,导致 OPPO 审核不通过的问题,核心原因和解决方案如下:
核心原因分析
pushRegisterMode: "manual" 这个配置项主要是针对 iOS 平台的。在 uni-app 中,它用于控制 iOS 端是否在应用启动时自动注册 Push 通知并弹出授权框。
对于 Android 平台,特别是集成了 uniPush 模块后,通知权限的弹出行为主要受以下因素影响:
POST_NOTIFICATIONS 权限。如果应用没有适配,可能会在启动时自动弹出权限请求。 targetSdkVersion 设置为了 33 或更高,就必须遵循 Android 13 的新权限规定。 解决方案
你需要对 Android 平台进行专门的适配,而不是依赖 iOS 的配置项。
配置隐私政策弹窗(必须)
这是解决合规问题的根本。你需要在应用启动时,先展示一个用户隐私协议弹窗,在用户点击“同意”之前,不进行任何可能涉及隐私的初始化操作(包括获取 Push ClientId、获取设备信息等)。
请严格按照官方文档配置:Android平台隐私与政策提示框
延迟调用获取 ClientId 的 API
确保不要在 App.vue 的 onLaunch 或首页的 onLoad 中立即调用 uni.getPushClientId() 或 plus.push.getClientInfo()。必须在用户同意隐私政策之后,再调用这些 API 来初始化推送服务。
使用 Android 原生权限配置(推荐)
在 manifest.json 文件的源码视图(Source View)中,为 Android 平台配置 pushRegisterMode。这与 iOS 的配置路径不同。
修改 manifest.json 源码视图,在 "app-plus" -> "distribute" -> "android" 下添加配置:
{
"app-plus": {
"distribute": {
"android": {
"pushRegisterMode": "manual"
}
}
}
}
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
请注意:
- 这个配置项在 HBuilderX 4.87+ 版本中,官方人员已确认 Android 平台也支持。
- 配置后,需要重新提交云端打包才能生效,自定义基座也需要重新制作。
- 配置为
"manual"后,你必须在代码中主动调用uni.getPushClientId(),系统才会弹出通知权限申请框。
检查 targetSdkVersion
确保你的 manifest.json 中配置的 targetSdkVersion 符合要求。如果设置为 33 或以上,必须适配 POST_NOTIFICATIONS 权限的动态申请。
总结
OPPO 审核不通过,是因为应用在隐私协议同意前就触发了系统通知权限的弹窗。请按以下顺序操作:
manifest.json 源码视图中,为 Android 平台配置 "pushRegisterMode": "manual"。 uni.getPushClientId() 的调用移到用户同意隐私政策之后。 如果上述步骤完成后问题依旧,建议在 uni-app 官方技术交流群 中进行咨询,并提供你的 manifest.json 完整截图(特别是模块配置和权限页签),以便进行更深入的分析。