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

Flutter后台FCM通知重复:如何禁用系统默认通知

解决Firebase Messaging后台通知重复问题

我在使用FlutterLocalNotificationsPlugin处理Firebase Messaging后台消息时,收到了两条通知——一条来自FlutterLocalNotificationsPlugin,另一条是系统默认通知。因为需要自定义通知样式,必须使用FlutterLocalNotificationsPlugin,请问如何禁用系统默认通知?

Flutter主函数代码

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  await init();
  FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
  await setupFlutterNotifications();
  runApp(const MyApp());
}

@pragma('vm:entry-point')
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
  await setupFlutterNotifications();
  print('Application background message: $message');
  final title = message.notification!.title;
  final body = message.notification!.body;
  await notificationService.notification(message);
}

通知服务代码

Future<void> notification(RemoteMessage message) async {
    RemoteNotification? notification = message.notification!;
    flutterLocalNotificationsPlugin.show(
      notification.hashCode,
      notification.title,
      notification.body,
      const NotificationDetails(
        android: AndroidNotificationDetails(
          'channel id',
          'your channel name',
          channelDescription: 'your channel description',
          icon: 'launch_background',
        ),
      ),
    );
  }

通知重复示例

解决方案

我使用laravel-notification-channels/fcm发送FCM通知,已找到解决方案:注释掉FCM的setNotification方法,示例代码如下:

public function toFcm($notifiable)
    {
        return FcmMessage::create()
            ->setData([
                'title' => json_encode($this->newMessage['title']),
                'body' => json_encode($this->newMessage['body']),
            ])
            // ->setNotification(\NotificationChannels\Fcm\Resources\Notification::create()
            //     ->setTitle($this->newMessage['title'])
            //     ->setBody($this->newMessage['body'])
            //     // ->setImage($this->newMessage['user']['image'])
            // )
            ->setAndroid(
                AndroidConfig::create()
                    ->setFcmOptions(AndroidFcmOptions::create()->setAnalyticsLabel('analytics'))
                    ->setPriority(AndroidMessagePriority::HIGH())
                    // ->setNotification(AndroidNotification::create()->setChannelId('high_importance_channel'))
            )->setApns(
                ApnsConfig::create()
                    ->setFcmOptions(ApnsFcmOptions::create()->setAnalyticsLabel('analytics_ios'))
            );
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:55:26