You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android设备离线重连后Firebase Cloud Messaging推送通知丢失求助

Android FCM v1离线后仅收到最后一条推送的解决方案

核心原因

FCM当前对通知消息(由FCM SDK自动展示的消息)的默认逻辑是:如果多条消息使用相同的tag、collapse_key,或者未指定唯一标识,离线时会被合并为最后一条,联网后仅推送合并后的消息。而GCM时期的缓存逻辑已被FCM调整,旧答案不再适用。

解决方案

1. 改用数据消息发送

放弃FCM的默认通知消息格式,全部发送数据消息(仅包含data字段,无notification字段)。FCM会为数据消息缓存所有离线消息(只要ttl设置合理),联网后全部推送给App,由App自行处理展示。
发送请求体示例:

{
  "message": {
    "token": "你的设备Token",
    "data": {
      "title": "自定义标题",
      "content": "自定义内容",
      "msg_id": "唯一消息ID" // 用于区分每条消息
    },
    "android": {
      "ttl": "86400s" // 设置消息存活时间,最长可设为4周
    }
  }
}

2. 避免使用重复的collapse_key

如果必须使用通知消息,确保每条消息的collapse_key设置为唯一值(比如用消息ID),或者完全不设置该字段。相同的collapse_key会触发FCM的消息合并逻辑,只保留最后一条。

3. 升级Firebase Messaging SDK

确保项目使用最新版本的FCM SDK,旧版本可能存在缓存逻辑的bug。在build.gradle中更新依赖:

implementation 'com.google.firebase:firebase-messaging:23.4.0' // 替换为当前最新版本

4. 自定义通知展示逻辑

在FirebaseMessagingService的onMessageReceived方法中,自行处理数据消息并创建通知,使用唯一的通知ID(比如消息ID)确保每条通知单独显示,避免系统合并:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Map<String, String> data = remoteMessage.getData();
    String title = data.get("title");
    String content = data.get("content");
    String msgId = data.get("msg_id");

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    String channelId = "default_channel";

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelId)
            .setSmallIcon(R.drawable.ic_notif)
            .setContentTitle(title)
            .setContentText(content)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setAutoCancel(true);

    // 用唯一的msgId作为通知ID,确保每条通知不被合并
    notificationManager.notify(Integer.parseInt(msgId), builder.build());
}

5. 检查设备通知设置

确保App的通知权限已开启,且未开启系统的「通知分组」「静默通知」等可能导致通知合并的设置。


内容的提问来源于stack exchange,提问作者calvin sugianto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:10:48