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

Flutter Android自定义FirebaseMessagingService实现方案咨询

Flutter Android端自定义FirebaseMessagingService实现示例

1. 配置AndroidManifest.xml

在android/app/src/main/AndroidManifest.xml中注册你自定义的Messaging服务,替换默认的Firebase消息处理服务,原有其他Firebase相关配置不需要修改:

<service
    android:name=".MyCustomFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

2. 实现自定义Kotlin服务类

在android/app/src/main/kotlin/[你的应用包名路径]下新建MyCustomFirebaseMessagingService.kt文件,核心是继承FlutterFirebaseMessagingService而非原生的FirebaseMessagingService,保证Flutter端默认消息接收逻辑正常运行:

import io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage

class MyCustomFirebaseMessagingService : FlutterFirebaseMessagingService() {
    // 收到推送消息时触发,前台、后台状态均可回调
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        // 必须先调用父类方法,保证Flutter端能正常收到通知和data数据
        super.onMessageReceived(remoteMessage)
        
        // 以下为你的自定义Kotlin逻辑
        val notificationTitle = remoteMessage.notification?.title ?: ""
        val notificationBody = remoteMessage.notification?.body ?: ""
        val messageData = remoteMessage.data
        
        // 示例:执行自定义业务逻辑,比如数据存储、事件统计、本地任务触发等
        runCustomTask(notificationTitle, notificationBody, messageData)
    }

    // FCM token更新时触发
    override fun onNewToken(token: String) {
        // 同样先调用父类方法,保证Flutter端能获取到最新token
        super.onNewToken(token)
        // 自定义逻辑:比如将最新token上传到你的业务服务器
        uploadNewToken(token)
    }

    private fun runCustomTask(title: String, body: String, data: Map<String, String>) {
        // 你的业务逻辑实现
    }

    private fun uploadNewToken(token: String) {
        // token上传逻辑实现
    }
}

3. 关键注意事项

  • 禁止直接继承原生FirebaseMessagingService,必须继承FlutterFirebaseMessagingService,否则会覆盖FlutterFire的默认处理逻辑,导致Flutter应用无法正常接收推送
  • 所有重写的方法必须优先执行super.xxx()父类逻辑,再编写自定义代码,避免Flutter端丢失消息数据
  • 如果你发的是通知类推送,应用完全杀死的状态下系统会直接展示通知,不会触发onMessageReceived,只有用户点击通知打开应用时才会把数据回传给Flutter;如果需要杀死状态下也能执行自定义逻辑,需要发送数据类推送,同时根据Android系统版本申请对应的后台运行权限
  • Flutter端原有firebase_messaging的监听逻辑不需要修改,notification、data字段都可以正常获取

内容的提问来源于stack exchange,提问作者Neal Soni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 01:06:04