import 'dart:async';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class FirebaseService {
static FirebaseMessaging? _firebaseMessaging;
static FirebaseMessaging get firebaseMessaging => FirebaseService._firebaseMessaging ?? FirebaseMessaging.instance;
static Future<void> initializeFirebase() async {
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
FirebaseService._firebaseMessaging = FirebaseMessaging.instance;
await FirebaseService.initializeLocalNotifications();
await FCMProvider.onMessage();
await FirebaseService.onBackgroundMsg();
}
Future<String?> getDeviceToken() async => await FirebaseMessaging.instance.getToken();
static FlutterLocalNotificationsPlugin _localNotificationsPlugin = FlutterLocalNotificationsPlugin();
static Future<void> initializeLocalNotifications() async {
final InitializationSettings _initSettings = InitializationSettings(
android: AndroidInitializationSettings("icon_name"),
iOS: DarwinInitializationSettings()
);
await FirebaseService.localNotificationsPlugin.initialize(_initSettings, onDidReceiveNotificationResponse: FCMProvider.onTapNotification);
await FirebaseService.firebaseMessaging.setForegroundNotificationPresentationOptions(
alert: true,
badge: true,
sound: true,
);
}
static NotificationDetails platformChannelSpecifics = NotificationDetails(
android: AndroidNotificationDetails(
"high_importance_channel", "High Importance Notifications", priority: Priority.max, importance: Importance.max,
),
);
static Future<void> onMessage() async {
FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
if (Platform.isAndroid) {
await FirebaseService._localNotificationsPlugin.show(
0, message.notification!.title, message.notification!.body, FirebaseService.platformChannelSpecifics,
payload: message.data.toString(),
);
}
});
}
static Future<void> onBackgroundMsg() async {
FirebaseMessaging.onBackgroundMessage(FCMProvider.backgroundHandler);
}
}