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

Flutter集成Firebase Cloud Messaging时Application.kt配置致崩溃

分析与修复FCM集成中的崩溃问题

看来你在给Flutter应用集成FCM时踩了几个配置坑,导致配置Application.kt后应用崩溃。我帮你梳理下关键问题和修复方案:

1. Android Manifest 里的元数据格式错误

你Manifest中关于通知渠道的meta-data写法完全混乱了,这会直接导致XML解析失败:

<!-- 错误写法 -->
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="default_notification_channel_id”>Channel ID"/>

改成正确的格式:

<!-- 修复后 -->
<meta-data 
    android:name="com.google.firebase.messaging.default_notification_channel_id" 
    android:value="default_notification_channel_id"/>

多余的">Channel ID"是无效内容,直接删掉即可。

2. Flutter嵌入版本不兼容(v2嵌入 vs 旧API)

你的Manifest里设置了flutterEmbedding="2"(这是当前Flutter默认的v2嵌入模式),但你写的Application.kt用的是v1嵌入的旧APIio.flutter.app.FlutterApplication,两者不兼容才会崩溃。

更新Application.kt适配v2嵌入:

package com.example.tamataapp

import io.flutter.embedding.android.FlutterApplication
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingBackgroundService

class Application : FlutterApplication() {
    override fun onCreate() {
        super.onCreate()
        // 配置FCM后台消息的插件注册
        FlutterFirebaseMessagingBackgroundService.setPluginRegistrant { registry ->
            GeneratedPluginRegistrant.registerWith(registry)
        }
    }
}

v2嵌入下不需要实现PluginRegistrantCallback,改用FlutterFirebaseMessagingBackgroundService来注册后台插件。

3. 不存在的自定义消息服务导致崩溃

你Manifest里声明了一个MyFirebaseMessagingService,但并没有提供这个类的代码:

<service android:name=".java.MyFirebaseMessagingService" android:exported="false">
</service>

系统找不到这个类会直接抛出ClassNotFoundException,解决方式二选一:

  • 如果不需要自定义消息处理,直接删除这个<service>标签
  • 如果需要自定义,创建app/src/main/java/com/example/tamataapp/MyFirebaseMessagingService.kt类并继承FirebaseMessagingService

4. MainActivity中的冗余代码

v2嵌入模式下,FlutterActivity已经自动处理了插件注册,你MainActivity里的GeneratedPluginRegistrant.registerWith(this)是多余的,删掉即可:

package com.example.tamataapp

import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity

class MainActivity : FlutterActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 移除多余的插件注册代码
        // getWindow().addFlags(LayoutParams.FLAG_SECURE)
    }
}

按以上步骤修改后,重新构建应用应该就能正常运行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:13:12