87 lines
2.4 KiB
Dart
87 lines
2.4 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/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();
|
|
|
|
_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<void> 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);
|
|
}
|
|
}
|