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

Flutter Android端Firebase后台本地通知:如何隐藏原始推送?

Android后台Firebase原始推送重复显示的解决办法

问题根源

当Firebase推送消息包含notification字段时,Android系统会自动触发系统级通知——哪怕你已经在后台消息处理器里自定义了本地通知,这就导致了两条通知同时出现。

解决办法

方法一:修改服务器端消息格式

把消息里的notification字段换成data字段,只发送纯数据消息。这样系统不会自动弹出通知,所有通知展示逻辑完全由你的代码控制。

原消息示例:

{
  "notification": {
    "title": "系统默认标题",
    "body": "系统默认内容"
  },
  "to": "设备令牌"
}

修改后:

{
  "data": {
    "title": "自定义标题",
    "body": "自定义内容",
    // 其他业务字段
  },
  "to": "设备令牌"
}

方法二:客户端拦截系统自动通知

如果没法改服务器消息,就在Android端自定义Firebase消息服务,拦截系统的自动通知逻辑:

  1. 在Android项目里新建一个消息服务类(以Java为例):
// 路径:android/app/src/main/java/你的包名/CustomFirebaseMsgService.java
package com.your.app.package;

import android.content.Intent;
import com.google.firebase.messaging.FirebaseMessagingService;

public class CustomFirebaseMsgService extends FirebaseMessagingService {
    @Override
    public void handleIntent(Intent intent) {
        // 移除触发系统通知的关键参数
        intent.removeExtra("google.sent_time");
        intent.removeExtra("google.ttl");
        intent.removeExtra("google.delivered_priority");
        // 调用父类方法继续处理消息(此时系统不会自动弹通知)
        super.handleIntent(intent);
    }
}
  1. 在AndroidManifest.xml里替换默认的Firebase消息服务:
<service
    android:name=".CustomFirebaseMsgService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

额外提醒

  • 确保你的_firebaseMessagingBackgroundHandler能正确解析data字段里的内容,不管消息格式是哪种都能生成自定义通知。
  • 测试时要杀掉应用进程,模拟真正的后台状态,避免前台测试的干扰。

内容的提问来源于stack exchange,提问作者Praharsh Bhatt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:50:26