FCM(Firebase Cloud Messaging)

미미제이·2024년 12월 18일

기타

목록 보기
3/3

포그라운드 상태 vs 백그라운드 상태
Flutter에서 FCM(Firebase Cloud Messaging)과 같은 푸시 알림에서 "포그라운드(foreground) 상태"와 "백그라운드(background) 상태"는 앱의 실행 상태를 가리킵니다. 각각의 상태는 앱이 사용자와 얼마나 상호작용 가능한지, 그리고 푸시 알림을 처리하는 방식에 영향을 미칩니다.


1. 포그라운드 상태 (Foreground)

  • 의미

    • 앱이 현재 화면에 표시되고 있으며, 사용자가 앱과 직접 상호작용하고 있는 상태.
    • 앱이 활성화된 상태로, onResume 또는 onStart 상태에 해당합니다.
    • 앱이 열려있고, UI가 보이는 상태에서 알림을 수신했을 때의 처리를 다룹니다.
  • 특징

    • 기본적으로 푸시 알림은 시스템 트레이(알림 센터)에 표시되지 않습니다.
    • 대신, FCM 메시지가 앱 내에서 바로 처리됩니다.
    • 개발자는 포그라운드 상태에서도 알림을 표시하려면 사용자 정의 UI를 구현하거나 수동으로 알림을 띄워야 합니다.
  • 예시 (Flutter FCM 포그라운드 처리)

FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  print('포그라운드에서 메시지를 받았습니다: ${message.notification?.title}');
  // 필요한 경우 로컬 알림 표시
});

2. 백그라운드 상태 (Background)

  • 의미

    • 앱이 실행 중이지만, 현재 화면에 보이지 않는 상태.
    • 앱이 최소화되었거나, 다른 앱이 실행 중인 경우.
    • Flutter에서는 onPause 상태에 해당하며, 사용자는 앱과 직접 상호작용하지 않습니다.
  • 특징

    • 기본적으로 푸시 알림이 시스템 트레이(알림 센터)에 표시됩니다.
    • 알림을 탭하면 앱이 다시 활성화(포그라운드 상태)되며, 해당 알림의 데이터를 처리할 수 있습니다.
  • 예시 (Flutter FCM 백그라운드 처리)
    백그라운드 상태에서는 알림을 자동으로 처리하고, 사용자가 알림을 탭할 때 앱이 실행됩니다. 개발자는 메시지를 처리하려면 onBackgroundMessage를 사용해야 합니다.

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  print('백그라운드에서 메시지를 받았습니다: ${message.notification?.title}');
  // 백그라운드에서 데이터 처리
}

void main() {
  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
  runApp(MyApp());
}

3. 종료 상태 (Terminated)

  • 의미

    • 앱이 완전히 종료된 상태.
    • Flutter 앱이 메모리에서 제거되었거나, 앱이 실행 중이지 않은 경우.
  • 특징

    • 사용자가 알림을 탭하면 앱이 다시 시작되며, getInitialMessage로 초기 메시지를 처리할 수 있습니다.
  • 예시 (Flutter FCM 종료 상태 처리)

FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage? message) {
  if (message != null) {
    print('앱 종료 상태에서 메시지를 받았습니다: ${message.notification?.title}');
  }
});

요약 비교

상태설명처리 방식
포그라운드앱이 열려 있고 사용자와 상호작용 중onMessage로 메시지 처리. 직접 UI 알림을 띄우는 추가 작업 필요.
백그라운드앱이 최소화되거나 다른 앱이 실행 중알림은 시스템 트레이에 자동 표시. onBackgroundMessage로 데이터 처리 가능.
종료 상태앱이 메모리에서 완전히 종료된 상태앱이 다시 시작되면 getInitialMessage로 초기 메시지를 처리.

이렇게 각 상태를 이해하고 적절히 구현하면, 사용자 경험을 더 풍부하게 만들 수 있습니다. 😊

profile
기록하는 미미

0개의 댓글