NoActive FCM 推送解冻 - Firebase Cloud Messaging 消息接收方案
FCM 推送背景
FCM(Firebase Cloud Messaging)是 Google 提供的跨平台推送服务。Android 上,应用即使被冻结,FCM 推送也可以通过 Google Play Services 进程传递。
但问题是:推送到达后,如果接收推送的应用进程已被冻结,应用无法处理这条推送消息,通知不会弹出。
NoActive 的 FCM 解决方案
NoActive 提供两种 FCM 解冻方案,确保重要消息能及时送达。
方案一:FCM 全局解冻
开启 AdvanceConfig.json 中的 receiveFCM: true。
开启后,所有应用在收到 FCM 推送时都会被自动解冻,处理完毕后重新冻结。
优点:配置简单,一处开启全家生效。
缺点:所有应用(包括不重要的)收到 FCM 都会解冻,可能带来不必要的唤醒。
方案二:单独配置 FCM 解冻应用
关闭 receiveFCM(全局解冻关),然后通过 fcmAppSet 指定需要 FCM 解冻的应用。
配置示例:
{
"receiveFCM": false,
"fcmAppSet": "com.example.app1,com.example.app2"
}
这只有指定的应用在收到 FCM 时才会被解冻,其他应用不受影响。
优点:精细控制,只让重要应用在 FCM 推送时解冻。
缺点:需要逐个配置应用。
推送到达率的局限
FCM 设计原理限制
FCM 推送的到达率取决于:
- 设备的网络状态
- Google Play Services 的运行状态
- 推送本身的优先级(普通推送 vs 高优先级推送)
NoActive 作为应用层模块,无法绕过 FCM 的底层限制。以下场景可能导致推送延迟或丢失:
| 场景 | 影响 |
|---|---|
| 设备无网络 | 推送无法送达 |
| 数据节省模式 | 低优先级推送被延迟 |
| 电池优化 | FCM 被 Doze 限制 |
| 应用无 FCM 支持 | 推送通道不存在 |
NoActive 免责声明
NoActive 不保证 FCM 推送到达率。即使配置正确,推送延迟或丢失仍然可能发生。
与网络解冻的关系
网络解冻和 FCM 推送解冻是两个不同的方案:
| 对比 | 网络解冻 | FCM 推送解冻 |
|---|---|---|
| 触发条件 | 应用需要维持网络连接 | 收到 FCM 推送 |
| 耗电 | 较高(维持连接) | 较低(按需解冻) |
| 可靠性 | 取决于网络质量 | 取决于 FCM 服务质量 |
| 适用应用 | 消息类核心应用 | 所有支持 FCM 的应用 |
对于核心 IM 应用,建议白名单 > 网络解冻 > FCM 解冻。
配置文件位置
AdvanceConfig.json 位于 /data/system/NoActive_8位随机字符/config/ 目录下。修改需要 Root 权限。
→ 进入 配置文件分组 了解完整配置结构