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

Flutter应用接收FCM通知后立即闪退,修改权限未解决求助

问题诊断

从错误日志可以定位到核心崩溃原因:Android系统尝试启动你注册的com.example.try2.java.MyFirebaseMessagingService服务时,找不到对应类,触发ClassNotFoundException导致应用闪退。
另外你提供的Dart代码存在隐藏风险:widget的属性默认是final修饰,直接修改widget.title的赋值操作不符合Flutter规范,容易触发不可预期的异常。

解决方案
  • 修正Android侧配置错误
    打开android/app/src/main/AndroidManifest.xml文件,查找MyFirebaseMessagingService相关的<service>注册代码:
    1. 如果你没有自定义原生层消息处理的需求,直接删除这段自定义服务的注册代码即可,flutterfire的FCM插件默认自带消息处理服务,不需要手动注册自定义服务。
    2. 如果你确实需要自定义原生侧的消息处理逻辑,核对你创建的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,提问作者許子霆

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 16:54:03