Flutter应用接收FCM通知后立即闪退,修改权限未解决求助
问题诊断
从错误日志可以定位到核心崩溃原因:Android系统尝试启动你注册的com.example.try2.java.MyFirebaseMessagingService服务时,找不到对应类,触发ClassNotFoundException导致应用闪退。
另外你提供的Dart代码存在隐藏风险:widget的属性默认是final修饰,直接修改widget.title的赋值操作不符合Flutter规范,容易触发不可预期的异常。
解决方案
- 修正Android侧配置错误
打开android/app/src/main/AndroidManifest.xml文件,查找MyFirebaseMessagingService相关的<service>注册代码:- 如果你没有自定义原生层消息处理的需求,直接删除这段自定义服务的注册代码即可,flutterfire的FCM插件默认自带消息处理服务,不需要手动注册自定义服务。
- 如果你确实需要自定义原生侧的消息处理逻辑,核对你创建的
MyFirebaseMessagingService类的存放路径和类名:确保类存放在android/app/src/main/java/com/example/try2/java/目录下,类名拼写完全一致,没有大小写错误。
- 修正Dart侧代码隐患
将通知标题存储逻辑改为使用State内部私有变量,修改后的代码如下:class _MyHomePageState extends State<MyHomePage> { // 用State内部变量存储标题,不要修改widget的final属性 String _notificationTitle = 'Firebase message'; @override void initState() { super.initState(); FirebaseMessaging.instance.subscribeToTopic('message'); FirebaseMessaging.instance.getToken().then((value) { print(value); }); FirebaseMessaging.onMessage.listen((event) { print(event.notification?.title); // 增加非空判断避免空指针 if (event.notification?.title != null) { _notificationTitle = event.notification!.title!; setState(() {}); } }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(_notificationTitle), ), body: Center( child: Text(_notificationTitle), ), ); } } - 清理缓存重新编译
执行以下命令清理旧的编译缓存后重新运行项目:flutter clean flutter pub get
内容的提问来源于stack exchange,提问作者許子霆
相关产品推荐
相关产品推荐

