From 2420cb46e724288dd1e62dcfa6d7333b2e115dcd Mon Sep 17 00:00:00 2001 From: Beast Date: Fri, 3 Jul 2026 10:52:16 +0800 Subject: [PATCH] feat: properly handle fcm error --- .../lib/providers/remote_config_provider.dart | 26 ++++++++++++------- .../services/firebase_messaging_service.dart | 11 ++++++-- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/mobile-app/lib/providers/remote_config_provider.dart b/mobile-app/lib/providers/remote_config_provider.dart index 06706c79..452a64f9 100644 --- a/mobile-app/lib/providers/remote_config_provider.dart +++ b/mobile-app/lib/providers/remote_config_provider.dart @@ -6,6 +6,7 @@ import 'package:quantus_sdk/quantus_sdk.dart'; import 'package:resonance_network_wallet/firebase_options.dart'; import 'package:resonance_network_wallet/services/remote_config_service.dart'; import 'package:resonance_network_wallet/services/firebase_messaging_service.dart'; +import 'package:resonance_network_wallet/services/telemetry_service.dart'; import 'package:resonance_network_wallet/shared/utils/print.dart'; final remoteConfigServiceProvider = Provider((ref) { @@ -60,16 +61,21 @@ class RemoteConfigNotifier extends StateNotifier { if (_isEnablingRemoteNotifications) return; _isEnablingRemoteNotifications = true; - // If Firebase wasn't initialized at startup (because cached flags were false), - // do it now. - if (Firebase.apps.isEmpty) { - await Firebase.initializeApp(options: DefaultFirebaseOptions.getOptionsForEnvironment()); - } - - final fcmService = ref.read(firebaseMessagingServiceProvider); - await fcmService.init(); // This requests notification permission. - fcmService.setupNotificationTapHandlers(); + try { + // If Firebase wasn't initialized at startup (because cached flags were false), + // do it now. + if (Firebase.apps.isEmpty) { + await Firebase.initializeApp(options: DefaultFirebaseOptions.getOptionsForEnvironment()); + } - _isEnablingRemoteNotifications = false; + final fcmService = ref.read(firebaseMessagingServiceProvider); + await fcmService.init(); // This requests notification permission. + fcmService.setupNotificationTapHandlers(); + } catch (e, st) { + quantusDebugPrint('Failed to enable remote notifications: $e'); + TelemetryService().sendError('fcm_enable_remote_notifications_failed', error: e, stackTrace: st); + } finally { + _isEnablingRemoteNotifications = false; + } } } diff --git a/mobile-app/lib/services/firebase_messaging_service.dart b/mobile-app/lib/services/firebase_messaging_service.dart index 76eb8bfc..23e650ab 100644 --- a/mobile-app/lib/services/firebase_messaging_service.dart +++ b/mobile-app/lib/services/firebase_messaging_service.dart @@ -35,8 +35,15 @@ class FirebaseMessagingService { /// Returns the cached FCM device token, fetching from Firebase if not yet available. Future getDeviceToken() async { - _cachedToken ??= await _messaging.getToken(); - quantusDebugPrint('FCM token: $_cachedToken'); + if (_cachedToken != null) return _cachedToken; + + try { + _cachedToken = await _messaging.getToken(); + quantusDebugPrint('FCM token: $_cachedToken'); + } catch (e, st) { + quantusDebugPrint('Failed to get FCM device token: $e'); + TelemetryService().sendError('fcm_get_device_token_failed', error: e, stackTrace: st); + } return _cachedToken; }