Flutter集成FCM接收消息时Android应用崩溃求助
Flutter集成FCM后接收消息崩溃问题
在Flutter应用中使用FCM插件后,向Android模拟器发送云消息时,无论应用处于前台还是后台,接收消息后都会立即崩溃。
复现步骤
- 在Android模拟器上运行Flutter应用
- 进入Firebase控制台的Cloud Messaging模块
- 向Android应用发送新通知
- Android模拟器接收消息后应用崩溃
相关代码
主入口代码
import'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'homepage.dart'; import 'notificationservices.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); await Notification_Services.NotiSettings(); runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: const HomePage(), ); } }
HomePage代码
import 'package:flutter/material.dart'; import 'notificationservices.dart'; class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { @override void initState() { super.initState(); Notification_Services.NotiSettings(); } @override Widget build(BuildContext context) { return Scaffold( body: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text("Data"), ], ), ); } }
Notification_Services类代码
import 'dart:developer'; import 'package:firebase_messaging/firebase_messaging.dart'; Future<void> BackgroundHandler(RemoteMessage message )async{ log("Remote Message =${message.notification!.title}"); } class Notification_Services { //initialization of firebase messaging static Future<void> NotiSettings() async { NotificationSettings Settings = await FirebaseMessaging.instance.requestPermission(); if (Settings.authorizationStatus == AuthorizationStatus.authorized) { log("Initialied Successfully"); FirebaseMessaging.onBackgroundMessage(BackgroundHandler); FirebaseMessaging.onMessage.listen((message) { log("Remote Message =${message.notification!.title}"); }); } } }
调试控制台报错信息
Process: com.example.googlee, PID: 18130 E/AndroidRuntime(18130): java.lang.RuntimeException: Unable to create service com.example.googlee.java.MyFirebaseMessagingService: java.lang.ClassNotFoundException: Didn't find class "com.example.googlee.java.MyFirebaseMessagingService" on path: DexPathList[[zip file
解决方案
1. 移除AndroidManifest.xml中无效的Service配置
报错核心是系统找不到com.example.googlee.java.MyFirebaseMessagingService类,说明你在android/app/src/main/AndroidManifest.xml中配置了该自定义FCM服务,但未实际创建对应类。打开该文件,删除类似以下的配置代码:
<service android:name="com.example.googlee.java.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
Flutter的firebase_messaging插件已默认实现后台消息处理逻辑,无需手动添加自定义Service。
2. 删除重复的初始化代码
main函数中已经调用过Notification_Services.NotiSettings(),但HomePage的initState里又重复执行了一次,可能引发重复监听异常。修改HomePage的initState:
@override void initState() { super.initState(); // 删除此行重复调用 // Notification_Services.NotiSettings(); }
3. 清理并重建项目
执行以下命令清理缓存并重新构建应用:
flutter clean flutter pub get flutter run
4. 确保依赖版本兼容
检查pubspec.yaml中firebase_core和firebase_messaging的版本,使用兼容的稳定版,例如:
dependencies: flutter: sdk: flutter firebase_core: ^2.24.2 firebase_messaging: ^14.7.11
执行flutter pub get更新依赖。
内容的提问来源于stack exchange,提问作者Amjad khan
相关产品推荐
相关产品推荐

