Firebase推送场景下「App在后台」是什么意思?是否等同于App被杀死?
Firebase 推送通知相关问题解答
1. 「App在后台」的明确定义
推送语境下的「App在后台」完全不等于App被关闭/杀死,具体指以下状态:
- App进程存活,没有被用户主动清理、也没有被系统回收
- App当前没有处于前台展示状态,比如用户按Home键退回桌面、切换到其他App使用
该状态下Firebase的通知类消息会直接通过系统通知栏展示,不会触发App内部的推送接收回调。而App被上滑清理、被系统杀掉属于「进程已终止」状态,是完全独立的另一种场景,不属于常规所说的后台状态。
2. 后台服务的存在性与第三方库激活说明
- 后台服务是系统提供的、允许App在无前台界面时执行后台任务的组件,默认情况下如果你没有主动声明相关权限、配置服务组件,App不会自带后台服务
- 引入的第三方库(包括推送、统计、定位类SDK)确实可以自动注册激活后台服务,无需你主动编写代码,可通过以下方式排查:
- Android端:查看打包后合并的
AndroidManifest.xml文件,搜索<service标签即可列出所有注册的后台服务 - iOS端:查看Xcode的「Signing & Capabilities」标签下的Background Modes配置,同时检查引入的第三方库是否包含后台任务注册逻辑
- Android端:查看打包后合并的
3. App被关闭后仍能接收推送的实现方案
首先明确基础前提:Firebase推送分为「通知消息」「数据消息」「通知+数据混合消息」三类,要实现进程终止后仍能收到推送,优先使用通知类或混合类消息,纯数据消息在进程终止后大部分场景无法正常接收。
基础通用配置
- 集成官方最新稳定版的Firebase Cloud Messaging(FCM) SDK,避免旧版本存在的已知送达缺陷
- 不要主动拦截FCM默认的广播/通知接收逻辑,也不要全局关闭推送权限
上滑清理应用场景适配
- Android端:
- 不要给用户提供「主动结束进程」「关闭所有服务」类的功能入口
- 针对国内定制ROM(小米、华为、OPPO、vivo等),需额外申请「自启动权限」「后台活动权限」,同时接入对应厂商的系统推送通道做多通道兼容,国内ROM大多会在上滑清理时杀掉非白名单App的所有进程,单独的FCM通道在进程被杀后无法生效
- 不要给FCM相关服务配置
android:stopWithTask="true"属性,避免用户清理任务时直接终止FCM服务
- iOS端:
- 在Xcode中开启「Push Notifications」能力,同时开启Background Modes下的「Remote notifications」选项
- 确保APNs证书配置正确,iOS本身在App被上滑清理后,仍可通过APNs通道正常接收推送,无需额外配置后台服务
设备重启后接收推送适配
- Android端:声明
RECEIVE_BOOT_COMPLETED广播权限,注册开机广播接收器,收到开机广播后重新初始化FCM SDK即可恢复推送服务 - iOS端:无需额外配置,系统重启后会自动恢复APNs推送通道能力,只要用户没有手动关闭App的推送权限即可正常接收
内容的提问来源于stack exchange,提问作者user1034912
相关产品推荐
相关产品推荐

