initialize method

Future<void> initialize()

Initialize FCM: request permission, get token, save it, listen for refresh.

Implementation

Future<void> initialize() async {
  // Request iOS notification permission
  final settings = await _messaging.requestPermission(
    alert: true,
    badge: true,
    sound: true,
  );

  if (settings.authorizationStatus == AuthorizationStatus.denied) {
    dev.log('Push notification permission denied', name: 'FcmService');
    return;
  }

  // Get APNs token first (iOS requirement for FCM)
  final apnsToken = await _messaging.getAPNSToken();
  if (apnsToken == null) {
    dev.log('APNs token not available yet', name: 'FcmService');
    // On simulator or if APNs is not ready, skip FCM registration
    return;
  }

  // Get FCM token and save
  final token = await _messaging.getToken();
  if (token != null) {
    await _saveToken(token);
  }

  // Listen for token refresh
  _messaging.onTokenRefresh.listen(_saveToken);
}