diff --git a/packages/wyatt_cloud_messaging_bloc_firebase/lib/src/data/data_sources/cloud_messaging_firebase_data_source.dart b/packages/wyatt_cloud_messaging_bloc_firebase/lib/src/data/data_sources/cloud_messaging_firebase_data_source.dart index 57261d8c..86aa9cf6 100644 --- a/packages/wyatt_cloud_messaging_bloc_firebase/lib/src/data/data_sources/cloud_messaging_firebase_data_source.dart +++ b/packages/wyatt_cloud_messaging_bloc_firebase/lib/src/data/data_sources/cloud_messaging_firebase_data_source.dart @@ -6,6 +6,8 @@ import 'package:firebase_messaging/firebase_messaging.dart' import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:wyatt_cloud_messaging_bloc_base/wyatt_cloud_messaging_bloc.dart'; +typedef CloudMessagingStreamController = StreamController; + class CloudMessagingFirebaseDataSource extends CloudMessagingRemoteDataSource { final FirebaseMessaging _firebaseMessagingInstance = FirebaseMessaging.instance; @@ -18,8 +20,36 @@ class CloudMessagingFirebaseDataSource extends CloudMessagingRemoteDataSource { } @override - Future> onNotificationBackground() { - throw UnimplementedError(); + Future> onNotificationBackground() async { + final backgroundStreamController = CloudMessagingStreamController(); + + Future getLastBackgroundNotification() async { + final lastNotification = + await _firebaseMessagingInstance.getInitialMessage(); + if (lastNotification != null) { + backgroundStreamController.add( + RemoteNotification( + title: lastNotification.notification?.title, + body: lastNotification.notification?.body, + data: lastNotification.data, + ), + ); + } + + FirebaseMessaging.onMessageOpenedApp.listen((notification) { + backgroundStreamController.add( + RemoteNotification( + title: notification.notification?.title, + body: notification.notification?.body, + data: notification.data, + ), + ); + }); + } + + unawaited(getLastBackgroundNotification()); + + return backgroundStreamController.stream; } @override @@ -47,8 +77,8 @@ class CloudMessagingFirebaseDataSource extends CloudMessagingRemoteDataSource { iOS: DarwinInitializationSettings(), ); - final StreamController foregroundStream = - StreamController(); + final CloudMessagingStreamController foregroundStream = + CloudMessagingStreamController(); await _localNotificationInstance.initialize( initializationSettings,