import 'dart:convert'; import 'dart:developer'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; Future firebaseMessageBackgroundHandle(RemoteMessage message) async { log("BackGround Message :: ${message.messageId}"); } class NotificationService { FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); Future initInfo() async { await FirebaseMessaging.instance .setForegroundNotificationPresentationOptions( alert: true, badge: true, sound: true, ); var request = await FirebaseMessaging.instance.requestPermission( alert: true, announcement: false, badge: true, carPlay: false, criticalAlert: false, provisional: false, sound: true, ); if (request.authorizationStatus == AuthorizationStatus.authorized || request.authorizationStatus == AuthorizationStatus.provisional) { const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher'); var iosInitializationSettings = const DarwinInitializationSettings(); final InitializationSettings initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: iosInitializationSettings); await flutterLocalNotificationsPlugin.initialize(initializationSettings, onDidReceiveNotificationResponse: (payload) {}); setupInteractedMessage(); } } Future setupInteractedMessage() async { RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage(); if (initialMessage != null) { FirebaseMessaging.onBackgroundMessage( (message) => firebaseMessageBackgroundHandle(message)); } FirebaseMessaging.onMessage.listen((RemoteMessage message) { log("::::::::::::onMessage:::::::::::::::::"); if (message.notification != null) { log(message.notification.toString()); display(message); } }); FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { log("::::::::::::onMessageOpenedApp:::::::::::::::::"); if (message.notification != null) { log(message.notification.toString()); } }); log("::::::::::::Permission authorized:::::::::::::::::"); await FirebaseMessaging.instance.subscribeToTopic("customer"); } static Future? getToken() async { String? token = await FirebaseMessaging.instance.getToken(); return token; } void display(RemoteMessage message) async { log('Got a message whilst in the foreground!'); log('Message data: ${message.notification!.body.toString()}'); try { AndroidNotificationChannel channel = const AndroidNotificationChannel( '0', 'goRide-customer', description: 'Show QuickLAI Notification', importance: Importance.max, ); AndroidNotificationDetails notificationDetails = AndroidNotificationDetails(channel.id, channel.name, channelDescription: 'your channel Description', importance: Importance.high, priority: Priority.high, ticker: 'ticker'); const DarwinNotificationDetails darwinNotificationDetails = DarwinNotificationDetails( presentAlert: true, presentBadge: true, presentSound: true); NotificationDetails notificationDetailsBoth = NotificationDetails( android: notificationDetails, iOS: darwinNotificationDetails); await FlutterLocalNotificationsPlugin().show( 0, message.notification!.title, message.notification!.body, notificationDetailsBoth, payload: jsonEncode(message.data), ); } on Exception catch (e) { log(e.toString()); } } }