uni.getPushClientId()
uni.subscribePush()
plus.push.getClientInfo()
Ask小助手 - Ask社区AI助手
欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
在 Android 端,uni-app 默认不会在启动时自动弹出通知授权弹窗,除非你在代码中主动调用了以下任一 API:
uni.getPushClientId() uni.subscribePush() plus.push.getClientInfo() 你已经确认:
targetSdkVersion >= 33 app.vue 或首页中没有提前调用上述 API 但仍出现“启动即弹窗”的情况,请重点排查以下几点:
部分第三方推送 SDK(如极光推送)会在初始化时自动申请通知权限,即使你没有主动调用相关 API。
建议临时移除相关原生插件或 SDK,重新打包测试是否还会弹窗。
虽然你未主动调用 API,但如果 manifest.json 中配置了如下内容,也可能触发自动授权:
"app-plus": {
"distribute": {
"android": {
"pushRegisterMode": "auto"
}
}
}
✅ 改为
"manual"即可禁止自动弹窗,改为手动触发。
在你希望触发授权的时机(如点击“开启通知”按钮)调用以下代码:
// Android 手动申请通知权限(targetSdkVersion >= 33)
plus.android.requestPermissions(['android.permission.POST_NOTIFICATIONS'], (result) => {
if (result.granted.length > 0) {
console.log('通知权限已授权');
} else {
console.log('通知权限被拒绝');
}
});
如你使用的是 VIVO 手机,系统会在非应用市场安装的应用首次启动时强制弹出通知授权弹窗,这不是你代码触发的,属于系统行为,可忽略。
| 场景 | 是否可控 | 建议 |
|---|---|---|
主动调用 getPushClientId 等 API |
✅ 可控 | 改为手动调用 |
| 第三方 SDK 自动初始化 | ❌ 不可控 | 检查并移除或延迟初始化 |
| manifest.json 配置为 auto | ✅ 可控 | 改为 "manual" |
| VIVO 系统弹窗 | ❌ 不可控 | 忽略,非应用问题 |
如需进一步控制权限申请时机,建议使用 plus.android.requestPermissions 手动申请,避免 SDK 自动行为。