flutter-freaccess-hub/lib/backend/notifications/firebase_messaging_service....

86 lines
2.5 KiB
Dart

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/helpers/secure_storage_helper.dart';
import 'package:hub/shared/helpers/sqlite_storage_helper.dart';
import 'package:hub/shared/utils/log_util.dart';
import 'notification_service.dart';
Future<void> handleMessage(RemoteMessage message) async {
NotificationService.show(
title: message.notification!.title!,
body: message.notification!.body!,
payload: Map<String, String>.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<void> initNotifications() async {
await _firebaseMessaging.requestPermission();
_firebaseMessaging.onTokenRefresh.listen((token) => updateDeviceToken);
_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');
// }
// });
}
static Future<String> getToken() async =>
await FirebaseMessaging.instance.getToken() ?? '';
Future<void> updateDeviceToken() async {
try {
final String? deviceToken = await _firebaseMessaging.getToken();
if (deviceToken != null) {
SecureStorageHelper().token = deviceToken;
final ApiCallResponse? response;
response = await PhpGroup.updToken.call();
if (response.jsonBody['error'] == 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);
}
}
}