import 'dart:developer'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:hub/app_state.dart'; import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/shared/utils/log_util.dart'; import 'notification_service.dart'; Future handleMessage(RemoteMessage message) async { NotificationService.show( title: message.notification!.title!, body: message.notification!.body!, payload: Map.from(message.data)); } class FirebaseMessagingService { // Singleton instance static final FirebaseMessagingService _instance = FirebaseMessagingService._internal(); // Factory constructor factory FirebaseMessagingService() => _instance; // Private constructor FirebaseMessagingService._internal(); final _firebaseMessaging = FirebaseMessaging.instance; Future initNotifications() async { await _firebaseMessaging.requestPermission(); _refreshToken(); _firebaseMessaging.setAutoInitEnabled(false); _firebaseMessaging.pluginConstants; FirebaseMessaging.onBackgroundMessage(handleMessage); FirebaseMessaging.onMessage.listen((RemoteMessage message) { handleMessage(message); }); FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { log('A Message was opened: $message'); }); FirebaseMessaging.instance .getInitialMessage() .then((RemoteMessage? message) { if (message != null) { log('A Message was opened: $message'); } }); } Future updateDeviceToken() async { try { final String? deviceToken = await _firebaseMessaging.getToken(); if (deviceToken != null) { AppState().token = deviceToken; final ApiCallResponse? response = await PhpGroup.updToken.call( token: AppState().token, devid: AppState().devUUID, useruuid: AppState().userUUID); if (PhpGroup.updToken.error((response?.jsonBody ?? '')) == false) { log('Token Atualizado com Sucesso!'); } else { log('Falha ao Atualizar Token: ${response?.jsonBody}'); } } else { log('Falha ao Pegar Token do Firebase'); } } catch (e, s) { LogUtil.requestAPIFailed("updToken.php", "", "Atualizar Token", e, s); } } void _refreshToken() { _firebaseMessaging.onTokenRefresh.listen((token) => updateDeviceToken); } }