From 05fa9438a11b6a72cb4c1bf6a20a77f1fe94cbf8 Mon Sep 17 00:00:00 2001 From: lizandrogd <77708265+lizandrogd@users.noreply.github.com> Date: Mon, 19 Jun 2023 01:24:14 -0500 Subject: [PATCH] update notificacion web --- lib/main.dart | 11 +++--- lib/src/services/firebase_messaging.dart | 41 +++++++++++++++++++++++ lib/src/services/local_notifications.dart | 16 ++++++--- web/firebase-messaging-sw.js | 19 +++++++++++ web/index.html | 35 +++++++++++-------- 5 files changed, 99 insertions(+), 23 deletions(-) create mode 100644 lib/src/services/firebase_messaging.dart create mode 100644 web/firebase-messaging-sw.js diff --git a/lib/main.dart b/lib/main.dart index 184cfb5..07211b5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -26,7 +26,9 @@ import 'firebase_options.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); - + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ).then((value) => Get.put(AuthenticationRepository())); await initNotifications(); await initializeDateFormatting('es_MX', null); @@ -35,12 +37,13 @@ void main() async { DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); - await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform, - ).then((value) => Get.put(AuthenticationRepository())); + + + runApp(const MyApp()); } + class MyApp extends StatelessWidget { const MyApp({super.key}); diff --git a/lib/src/services/firebase_messaging.dart b/lib/src/services/firebase_messaging.dart new file mode 100644 index 0000000..a590b62 --- /dev/null +++ b/lib/src/services/firebase_messaging.dart @@ -0,0 +1,41 @@ +import 'package:firebase_messaging/firebase_messaging.dart'; + +class FirebaseMessagingService { + FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance; + + Future initializeFirebaseMessaging() async { + // Solicitar permisos de notificación si es necesario (opcional) + NotificationSettings settings = await _firebaseMessaging.requestPermission( + alert: true, + badge: true, + sound: true, + ); + + // Verificar si los permisos de notificación están habilitados + if (settings.authorizationStatus == AuthorizationStatus.authorized || + settings.authorizationStatus == AuthorizationStatus.provisional) { + // Obtener el token de registro para la instancia de la aplicación + String? token = await _firebaseMessaging.getToken(); + print('Token FCM: $token'); + + // Escuchar los mensajes entrantes en la aplicación + FirebaseMessaging.onMessage.listen((RemoteMessage message) { + print('Mensaje FCM recibido: ${message.notification?.title} - ${message.notification?.body}'); + // Aquí puedes mostrar la notificación o procesar los datos recibidos según tus necesidades + }); + + // Manejar la notificación cuando se toca y la aplicación está en primer plano (opcional) + FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { + print('Mensaje FCM abierto desde la aplicación en primer plano: ${message.notification?.title} - ${message.notification?.body}'); + // Aquí puedes redirigir al usuario a una pantalla específica o realizar acciones según los datos recibidos + }); + + // Manejar la notificación cuando se toca y la aplicación está cerrada (opcional) + RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage(); + if (initialMessage != null) { + print('Mensaje FCM abierto desde la aplicación cerrada: ${initialMessage.notification?.title} - ${initialMessage.notification?.body}'); + // Aquí puedes redirigir al usuario a una pantalla específica o realizar acciones según los datos recibidos + } + } + } +} diff --git a/lib/src/services/local_notifications.dart b/lib/src/services/local_notifications.dart index 7ad1bdc..ee0d3a9 100644 --- a/lib/src/services/local_notifications.dart +++ b/lib/src/services/local_notifications.dart @@ -1,26 +1,32 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart'; +import 'package:prosappco/src/services/firebase_messaging.dart'; + final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = - FlutterLocalNotificationsPlugin(); +FlutterLocalNotificationsPlugin(); Future initNotifications() async { const AndroidInitializationSettings initializationSettingsAndroid = - AndroidInitializationSettings('@mipmap/ic_launcher'); + AndroidInitializationSettings('@mipmap/ic_launcher'); const InitializationSettings initializationSettings = InitializationSettings( android: initializationSettingsAndroid, ); await flutterLocalNotificationsPlugin.initialize(initializationSettings); + + // Inicializar Firebase Messaging + FirebaseMessagingService firebaseMessagingService = FirebaseMessagingService(); + await firebaseMessagingService.initializeFirebaseMessaging(); } Future showNotification(String title, String body) async { const AndroidNotificationDetails androidNotificationDetails = - AndroidNotificationDetails('your channel id', 'your channel name', - importance: Importance.max, priority: Priority.high); + AndroidNotificationDetails('solicitud_servicio', 'Solicitud de Servicio', + importance: Importance.max, priority: Priority.high); const NotificationDetails notificationDetails = - NotificationDetails(android: androidNotificationDetails); + NotificationDetails(android: androidNotificationDetails); await flutterLocalNotificationsPlugin.show( 1, title, body, notificationDetails); diff --git a/web/firebase-messaging-sw.js b/web/firebase-messaging-sw.js new file mode 100644 index 0000000..5aaa7c4 --- /dev/null +++ b/web/firebase-messaging-sw.js @@ -0,0 +1,19 @@ +importScripts("https://www.gstatic.com/firebasejs/8.10.0/firebase-app.js"); +importScripts("https://www.gstatic.com/firebasejs/8.10.0/firebase-messaging.js"); + +firebase.initializeApp({ +apiKey: "AIzaSyCNpUV_4cMEL9QZx7NESXK7QAlRjRGwx_Y", + authDomain: "prosapp-5747a.firebaseapp.com", + databaseURL: "https://prosapp-5747a-default-rtdb.firebaseio.com", + projectId: "prosapp-5747a", + storageBucket: "prosapp-5747a.appspot.com", + messagingSenderId: "245204384533", + appId: "1:245204384533:web:1b8f0b4c1d9ae21d9f871c", +}); + +const messaging = firebase.messaging(); + +// Optional: +messaging.onBackgroundMessage((message) => { + console.log("onBackgroundMessage", message); +}); \ No newline at end of file diff --git a/web/index.html b/web/index.html index aaf5ed4..1aa37d6 100644 --- a/web/index.html +++ b/web/index.html @@ -40,20 +40,27 @@ - + + if ('serviceWorker' in navigator) { + // Service workers are supported. Use them. + navigator.serviceWorker.register('/firebase-messaging-sw.js'); + } + }); + + +