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
相关产品推荐
相关产品推荐

