54 lines
1.9 KiB
Dart
54 lines
1.9 KiB
Dart
import 'package:firebase_core/firebase_core.dart';
|
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
import 'package:logger/logger.dart';
|
|
|
|
class FirebaseNotificationService {
|
|
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
|
|
final Logger _logger = Logger();
|
|
|
|
Future<void> initialize() async {
|
|
await Firebase.initializeApp();
|
|
_logger.i('Firebase initialized.');
|
|
|
|
NotificationSettings settings = await _firebaseMessaging.requestPermission();
|
|
_logger.i('FCM permission status: ${settings.authorizationStatus}');
|
|
|
|
// Foreground messages
|
|
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
|
|
_logger.i('🔔 Foreground Notification Received');
|
|
_logNotificationDetails(message);
|
|
});
|
|
|
|
// When app is opened from background via notification
|
|
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
|
|
_logger.i('📲 App opened via notification');
|
|
_handleNotificationTap(message);
|
|
});
|
|
|
|
// Background handler registration
|
|
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
|
|
}
|
|
|
|
void _handleNotificationTap(RemoteMessage message) {
|
|
_logger.i('Notification tapped with data: ${message.data}');
|
|
}
|
|
|
|
void _logNotificationDetails(RemoteMessage message) {
|
|
_logger.i('Notification ID: ${message.messageId}');
|
|
_logger.i('Title: ${message.notification?.title}');
|
|
_logger.i('Body: ${message.notification?.body}');
|
|
_logger.i('Data: ${message.data}');
|
|
}
|
|
}
|
|
|
|
// Background handler
|
|
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
|
|
await Firebase.initializeApp();
|
|
final Logger _logger = Logger();
|
|
_logger.i('🕓 Handling background notification...');
|
|
_logger.i('Notification ID: ${message.messageId}');
|
|
_logger.i('Title: ${message.notification?.title}');
|
|
_logger.i('Body: ${message.notification?.body}');
|
|
_logger.i('Data: ${message.data}');
|
|
}
|