Flutter Firebase Messaging问题求助:Release模式消息延迟5分钟,Debug模式无消息
编译警告无关问题
你看到的deprecated API和unchecked operations警告是firebase_messaging插件内部代码导致的,属于插件维护层面的问题,不会影响消息接收功能,无需处理。
Debug模式完全收不到消息的解决步骤
添加Debug签名指纹到Firebase控制台
Firebase需要匹配应用的签名指纹才能推送消息,Debug和Release模式使用不同的签名证书。在Firebase控制台的项目设置中,添加你的Debug版本SHA-1指纹(可通过keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android命令获取)。注册前台消息监听
你的代码只配置了后台消息处理,但前台接收消息需要额外注册onMessage监听。在main函数中添加:FirebaseMessaging.onMessage.listen((RemoteMessage message) { print('[前台消息] 数据:${message.data}'); if (message.notification != null) { print('[前台通知] 标题:${message.notification?.title},内容:${message.notification?.body}'); } });优先使用物理设备测试
部分Android模拟器对FCM消息的支持存在兼容性问题,建议用物理设备测试Debug模式。检查网络连接
确保测试设备未处于代理、防火墙环境下,能正常访问Firebase服务。
Release模式消息延迟的解决步骤
创建Android通知通道
Android 8.0+要求所有通知必须属于某个通知通道,未配置通道的后台消息会被系统延迟推送。添加以下代码并依赖flutter_local_notifications插件:void _createNotificationChannel() { if (Platform.isAndroid) { const AndroidNotificationChannel channel = AndroidNotificationChannel( 'fcm_high_channel', 'FCM高优先级通知通道', description: '用于接收FCM紧急通知', importance: Importance.high, ); FlutterLocalNotificationsPlugin().resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()?.createNotificationChannel(channel); } }在
main函数中调用_createNotificationChannel()。关闭应用电池优化
Android系统的电池优化会休眠后台应用,导致消息延迟。在设备设置中找到你的应用,关闭电池优化选项。设置消息高优先级
在Firebase控制台发送消息时,将消息优先级设置为高,系统会优先处理这类消息,减少延迟。
通用检查项
验证Firebase配置文件
确保google-services.json(Android)已放置在android/app目录,且与Firebase控制台的项目配置完全匹配。确认FCM Token获取正常
添加代码获取并打印设备Token,验证设备是否成功注册到FCM:String? fcmToken = await FirebaseMessaging.instance.getToken(); print('FCM Token: $fcmToken');可以直接用这个Token在Firebase控制台发送测试消息,排查是否是控制台推送配置问题。
后台消息处理函数规范
确保_firebaseMessagingBackgroundHandler是顶级函数(不在任何类或方法内部),你的代码当前写法是符合要求的。
内容的提问来源于stack exchange,提问作者Fabian M

