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
相关产品推荐
相关产品推荐

