/* import 'dart:io' show Platform; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; abstract class IFirebaseService { Future get token; Future backgroundMessageHandler(Map message); Future messageHandler(Map message); Future onLaunch(Map message); Future onResume(Map message); void subscribeForPromotions(); void unsubscribeFromPromotions(); } //https://medium.com/@SebastianEngel/easy-push-notifications-with-flutter-and-firebase-cloud-messaging-d96084f5954f class FirebaseService implements IFirebaseService { FirebaseMessaging _firebaseMessaging; FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin; FirebaseService() {. _firebaseMessaging = FirebaseMessaging(); //https://github.com/FirebaseExtended/flutterfire/issues/1695 _firebaseMessaging.configure( onMessage: messageHandler, onBackgroundMessage: Platform.isAndroid ? myBackgroundMessageHandler : null, onLaunch: onLaunch, onResume: onResume, ); //monitor firebase token changes //https://firebase.google.com/docs/cloud-messaging/android/client#sample-register ///The registration token may change when: // //The app deletes Instance ID //The app is restored on a new device //The user uninstalls/reinstall the app //The user clears app data. /// //for the first release we don't care about token refreshes /*Stream fcmStream = _firebaseMessaging.onTokenRefresh; fcmStream.listen((token) { });*/ //ios specific settings //taken from https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_messaging/example/lib/main.dart _firebaseMessaging.requestNotificationPermissions( const IosNotificationSettings( sound: true, badge: true, alert: true, provisional: true)); _firebaseMessaging.onIosSettingsRegistered .listen((IosNotificationSettings settings) { print("Settings registered: $settings"); }); var initializationSettingsAndroid = AndroidInitializationSettings('app_icon'); var initializationSettingsIOS = IOSInitializationSettings(onDidReceiveLocalNotification: onDidReceiveLocalNotification); var initializationSettings = InitializationSettings( initializationSettingsAndroid, initializationSettingsIOS); flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: selectNotification); } Future onDidReceiveLocalNotification(int id, String title, String body, String payload) async{ var androidPlatformChannelSpecifics = AndroidNotificationDetails( 'new_message_channel_id', 'Neue Nachricht', 'Channel für neue Nachrichten', importance: Importance.Max, priority: Priority.High, ticker: 'ticker'); var iOSPlatformChannelSpecifics = IOSNotificationDetails(); var platformChannelSpecifics = NotificationDetails( androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics); await flutterLocalNotificationsPlugin.show( 0, title, body, platformChannelSpecifics); } @override Future backgroundMessageHandler(Map message) async { await myBackgroundMessageHandler(message); } @override Future messageHandler(Map message) async { print("onMessage: $message"); // initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project var androidPlatformChannelSpecifics = AndroidNotificationDetails( 'new_message_channel_id', 'Neue Nachricht', 'Channel für neue Nachrichten', importance: Importance.Max, priority: Priority.High, ticker: 'ticker'); var iOSPlatformChannelSpecifics = IOSNotificationDetails(); var platformChannelSpecifics = NotificationDetails( androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics); if(Platform.isAndroid) { await flutterLocalNotificationsPlugin.show( 0, message["notification"]["title"], message["notification"]["body"], platformChannelSpecifics); }else if(Platform.isIOS){ await flutterLocalNotificationsPlugin.show( 0, message["aps"]["alert"]["title"], message["aps"]["alert"]["body"], platformChannelSpecifics); } } Future selectNotification(String payload) async { if (payload != null) { debugPrint('notification payload: ' + payload); } } @override Future onLaunch(Map message) async { print("onLaunch: $message"); } @override Future onResume(Map message) async { print("onResume: $message"); } @override Future get token => _firebaseMessaging.getToken(); @override void subscribeForPromotions() { _firebaseMessaging.subscribeToTopic("promotions"); } @override void unsubscribeFromPromotions() { _firebaseMessaging.unsubscribeFromTopic("promotions"); } } Future myBackgroundMessageHandler(Map message) { debugPrint("BACKGROUND MESSAGE RECEIVED"); print("BACKGROUND MESSAGE RECEIVED"); return Future.value(() => true); /*if (message.containsKey('data')) { // Handle data message final dynamic data = message['data']; } if (message.containsKey('notification')) { // Handle notification message final dynamic notification = message['notification']; }*/ // Or do other work. } */