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

Flutter集成Firebase Cloud Messaging接收消息时应用崩溃问题

Flutter Firebase通知崩溃:找不到MyFirebaseMessagingService类

我开发的带消息功能的Flutter应用在集成Firebase通知后,从Firebase控制台发送测试消息时,应用收到广播后直接崩溃,无法在CLI中打印消息。尝试在main函数中用try-catch捕获异常,但没有效果。

主函数代码

void main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
    try {
        var fcm = FirebaseMessaging.instance;

        await fcm.requestPermission();
        await fcm.setAutoInitEnabled(true);

        await fcm.getToken().then((token) {
            if (token != null) {
                if (kDebugMode) {
                    print('this is the token $token');
                }
                saveToken(token);
            }
        });

        FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
    } catch (e) {
        print('The error that is occurred is $e');
    }
    runApp(MyApp());
}

Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
    if (kDebugMode) {
        if (message.data.isNotEmpty) {
            print('${message.notification?.title}/${message.notification?.body}');
        }
    }
}

崩溃堆栈信息

I/FLTFireMsgService( 6234): FlutterFirebaseMessagingBackgroundService started!
D/EGL_emulation( 6234): eglMakeCurrent: 0xabb0dce0: ver 2 0 (tinfo 0x8ea97e50)
D/FLTFireMsgReceiver( 6234): broadcast received for message
D/AndroidRuntime( 6234): Shutting down VM
E/AndroidRuntime( 6234): FATAL EXCEPTION: main
E/AndroidRuntime( 6234): Process: co.kushalreddy.flash_chat, PID: 6234
E/AndroidRuntime( 6234): java.lang.RuntimeException: Unable to instantiate service co.kushalreddy.flash_chat.java.MyFirebaseMessagingService: java.lang.ClassNotFoundException: Didn't find class "co.kushalreddy.flash_chat.java.MyFirebaseMessagingService" on path: DexPathList[[zip file "/data/app/co.kushalreddy.flash_chat-R7UFRZNLFOzZC3mzUCJIYw==/base.apk"],nativeLibraryDirectories=[/data/app/co.kushalreddy.flash_chat-R7UFRZNLFOzZC3mzUCJIYw==/lib/x86, /data/app/co.kushalreddy.flash_chat-R7UFRZNLFOzZC3mzUCJIYw==/base.apk!/lib/x86, /system/lib, /vendor/lib]]
E/AndroidRuntime( 6234):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:3324)
E/AndroidRuntime( 6234):     at android.app.ActivityThread.-wrap4(Unknown Source:0)
E/AndroidRuntime( 6234):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677)
E/AndroidRuntime( 6234):     at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime( 6234):     at android.os.Looper.loop(Looper.java:164)
E/AndroidRuntime( 6234):     at android.app.ActivityThread.main(ActivityThread.java:6494)
E/AndroidRuntime( 6234):     at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 6234):     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
E/AndroidRuntime( 6234):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
E/AndroidRuntime( 6234): Caused by: java.lang.ClassNotFoundException: Didn't find class "co.kushalreddy.flash_chat.java.MyFirebaseMessagingService" on path: DexPathList[[zip file "/data/app/co.kushalreddy.flash_chat-R7UFRZNLFOzZC3mzUCJIYw==/base.apk"],nativeLibraryDirectories=[/data/app/co.kushalreddy.flash_chat-R7UFRZNLFOzZC3mzUCJIYw==/lib/x86, /data/app/co.kushalreddy.flash_chat-R7UFRZNLFOzZC3mzUCJIYw==/base.apk!/lib/x86, /system/lib, /vendor/lib]]
E/AndroidRuntime( 6234):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
E/AndroidRuntime( 6234):     at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
E/AndroidRuntime( 6234):     at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
E/AndroidRuntime( 6234):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:3321)
E/AndroidRuntime( 6234):    ... 8 more
I/zygote  ( 6234): Do partial code cache collection, code=119KB, 
data=79KB
I/zygote  ( 6234): After code cache collection, code=119KB, data=79KB
I/zygote  ( 6234): Increasing code cache capacity to 512KB
W/CloudMessagingReceiver( 6234): Message ack failed: 
java.util.concurrent.TimeoutException: Timed out waiting for Task
E/WakeLock( 6234): 
*gcore*:wake:com.google.firebase.iid.WakeLockHolder ** IS FORCE- 
RELEASED ON TIMEOUT **
Lost connection to device.

问题根源

从堆栈日志可明确,崩溃原因是Android系统找不到co.kushalreddy.flash_chat.java.MyFirebaseMessagingService类,通常是AndroidManifest.xml中注册了该服务,但项目中不存在对应文件或路径错误导致。

解决方案

1. 检查并清理AndroidManifest.xml配置

打开android/app/src/main/AndroidManifest.xml,查找是否存在以下服务注册代码:

<service
    android:name="co.kushalreddy.flash_chat.java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
  • 若你没有自定义Firebase消息处理的需求,直接删除这段代码即可。FlutterFire的FCM插件已内置后台处理逻辑,你在Dart代码中设置的FirebaseMessaging.onBackgroundMessage回调可正常工作,无需额外Java服务。

2. 若需自定义Java服务,补全对应类文件

如果确实需要自定义消息处理逻辑,需在android/app/src/main/java/co/kushalreddy/flash_chat/java/目录下创建MyFirebaseMessagingService.java文件,示例内容:

package co.kushalreddy.flash_chat.java;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // 在这里添加自定义消息处理逻辑
        super.onMessageReceived(remoteMessage);
    }
}

3. 清理并重建项目

执行以下命令清理缓存并重新构建项目,确保配置生效:

flutter clean
flutter pub get
cd android && ./gradlew clean
cd .. && flutter run

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:40:55