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

Flutter应用FCM测试通知可接收但控制台推送通知无法接收

解决方案

1. 修正Firebase初始化顺序

main 函数中必须先完成Firebase初始化,再注册后台消息回调,修改后的代码如下:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 优先执行Firebase初始化
  await Firebase.initializeApp();
  // 初始化完成后再注册后台消息回调
  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
  await loadImages();
  await GetStorage.init();
  NotificationService.firebaseMessageInit();
  runApp(MyApp());
}

2. 修复构建配置重复声明问题

project/build.gradle 中重复声明了Android Gradle插件版本,会导致构建异常,删除重复声明即可:

dependencies {
    classpath 'com.android.tools.build:gradle:4.1.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath 'com.google.gms:google-services:4.3.8'
    // 删除重复的 classpath 'com.android.tools.build:gradle:3.2.1' 声明
}

3. 补充Android通知渠道配置

Android 8.0及以上系统要求所有推送通知必须绑定通知渠道,否则无法正常弹出通知。你需要在 NotificationService.firebaseMessageInit() 方法中添加通知渠道创建逻辑:

// 放在NotificationService.firebaseMessageInit()方法内执行
if (Platform.isAndroid) {
  const AndroidNotificationChannel channel = AndroidNotificationChannel(
    'high_importance_channel', // 自定义渠道ID,后续需保持一致
    '高优先级通知', // 用户可见的渠道名称
    description: '用于接收应用推送的重要通知', // 渠道描述
    importance: Importance.max,
  );
  final FlutterLocalNotificationsPlugin notificationsPlugin = FlutterLocalNotificationsPlugin();
  await notificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()
    ?.createNotificationChannel(channel);
}

同时在 AndroidManifest.xml 的 <application> 标签内添加FCM默认通知渠道配置,值和上面定义的渠道ID保持一致:

<meta-data
    android:name="com.google.firebase.messaging.default_notification_channel_id"
    android:value="high_importance_channel" />

4. 调整FCM消息处理逻辑

FCM的消息分为两类,回调触发规则不同:

  • 仅通知类型消息:应用在后台时会由系统直接弹出通知,不会触发 onBackgroundMessage 回调,只有点击通知时才会触发 onMessageOpenedApp 回调
  • 通知+数据混合类型消息:应用在后台时系统会弹出通知,同时会触发 onBackgroundMessage 回调

你通过token发送的测试消息属于数据类型,所以可以正常触发回调,而FCM控制台默认发送的是仅通知类型消息,所以不会触发后台回调。你可以在控制台推送页面的「其他选项」中添加任意自定义数据,消息就会变为混合类型,即可正常触发后台回调。

另外应用处于前台时,FCM默认不会自动弹出通知,你当前仅在 onMessage 回调中打印了日志,没有主动调用本地通知API弹框,会误以为没有收到消息,需要补充主动弹通知的逻辑。

内容的提问来源于stack exchange,提问作者Mehmet NURAYDIN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 05:24:03