Android应用首次运行申请Firebase推送权限及用户退订方案问询
关于Android端首次运行申请Firebase推送权限及支持退订的实现方案
可行性结论
完全可以实现。你之前了解的「推送通知权限属于普通非危险类权限无需主动申请」是Android 12L(API 32)及更低版本的规则,Android 13(API 33)开始Google新增了POST_NOTIFICATIONS运行时危险权限,必须用户授权后应用才能展示推送通知,适配不同系统版本即可实现你的需求。
具体实现方案
1. 首次启动权限申请逻辑
- 先判断当前设备的系统版本:
- API < 33:无需主动申请系统权限,应用默认拥有通知展示权限,仅支持用户在系统设置页手动关闭
- API >= 33:首次启动时先弹出自定义引导弹窗,说明推送的实际价值(比如接收账号消息、活动提醒等),用户同意后再调用系统权限申请弹窗索要
POST_NOTIFICATIONS权限,避免直接弹出系统申请框被用户拒绝后无法再次申请
- 如果用户首次拒绝了系统权限申请,可后续在合适的业务场景(比如用户进入消息中心页时)再次弹出引导,提示用户前往系统设置页开启通知权限
2. 推送退订功能实现
有两种成熟实现方案,可根据业务需求选择:
- 客户端本地过滤:客户端本地维护一个「接收推送」的配置标记,用户选择退订后,本地接收到Firebase推送时直接过滤不展示,不会弹出通知。优点是实现简单无需后端配合,缺点是退订后应用仍会收到推送数据,只是不展示给用户
- FCM订阅/后端标记控制:
- 用户同意接收推送时,调用Firebase SDK的
FirebaseMessaging.getInstance().subscribeToTopic("全量用户推送"),或者通知后端给当前用户的FCM Token打上可接收推送的标记 - 用户选择退订时,调用
FirebaseMessaging.getInstance().unsubscribeFromTopic("全量用户推送"),或者通知后端给对应用户的FCM Token标记为不可推送 - 该方案退订后后端不会再向用户下发推送,不会占用用户设备资源,是更推荐的实现方式
- 用户同意接收推送时,调用Firebase SDK的
- 你可以在应用的设置页新增一个接收推送通知的开关,用户切换开关时同步执行上述逻辑即可
3. 特殊场景兼容
- 如果用户清除应用数据或者卸载重装,权限状态和订阅状态都会重置,下次启动可以重新走权限申请和订阅逻辑
- 可以定时同步本地订阅状态和Firebase/后端的状态,避免出现两端状态不一致导致用户收不到推送或者退订后仍收到推送的问题
内容的提问来源于stack exchange,提问作者Grinton
相关产品推荐
相关产品推荐

