백그라운드 앱에 테스트 메시지 보내기

FCM을 시작하기 위해 앱이 백그라운드 상태일 때 알림 작성기에서 개발 기기로 테스트 알림 메시지를 전송하는 가장 단순한 사용 사례부터 살펴보겠습니다. 이 페이지에서는 설정에서 검증까지 이 작업을 수행하는 모든 단계를 설명하며 FCM용 Fultter 앱을 설정했으면 일부 단계가 이미 완료된 상태일 수 있습니다.

FCM 플러그인 설치

  1. 아직 설치하지 않았으면 Flutter에 Firebase SDK를 설치하고 초기화합니다.

  2. Flutter 프로젝트의 루트에서 다음 명령어를 실행하여 플러그인을 설치합니다.

    flutter pub add firebase_messaging
    
  3. 완료되면 Flutter 애플리케이션을 다시 빌드합니다.

    flutter run
    

등록 토큰 액세스

특정 기기로 메시지를 보내려면 기기의 등록 토큰을 알아야 합니다. 알림 콘솔의 필드에 토큰을 입력해야 이 튜토리얼을 마칠 수 있으므로 토큰을 검색한 후 복사하거나 안전하게 저장해야 합니다.

앱 인스턴스의 현재 등록 토큰을 가져오려면 getToken()을 호출합니다. 알림 권한이 부여되지 않은 경우 이 메서드는 사용자에게 알림 권한을 요청합니다. 그렇지 않은 경우 토큰을 반환하거나 오류가 있으면 예정을 거부합니다.

final fcmToken = await FirebaseMessaging.instance.getToken();

테스트 알림 메시지 전송

  1. 대상 기기에 앱을 설치하고 실행합니다. Apple 기기에서는 원격 알림을 수신할 수 있는 권한 요청을 수락해야 합니다.

  2. 앱을 기기에서 백그라운드 상태로 만듭니다.

  3. Firebase Console에서 메시지 페이지를 엽니다.

  4. 첫 번째 메시지인 경우 첫 번째 캠페인 만들기를 선택합니다.

    1. Firebase 알림 메시지를 선택하고 만들기를 선택합니다.
  5. 그렇지 않으면 캠페인 탭에서 새 캠페인을 선택한 후 알림을 선택합니다.

  6. 메시지 본문을 입력합니다. 다른 모든 필드는 선택사항입니다.

  7. 오른쪽 창에서 테스트 메시지 전송을 선택합니다.

  8. FCM 등록 토큰 추가 필드에 이 가이드의 앞선 섹션에서 가져온 등록 토큰을 입력합니다.

  9. 테스트를 선택합니다.

테스트를 선택하면 타겟팅된 클라이언트 기기(앱은 백그라운드 상태임)에서 알림을 수신해야 합니다.

앱으로 전송된 메시지의 통계를 파악하려면 Apple 및 Android 기기에서 열린 전송 메시지 수와 Android 앱의 '노출수'(사용자에게 표시된 알림) 데이터가 기록된 FCM 보고 대시보드를 확인합니다.

상호작용 처리

사용자가 알림을 탭하면 Android 및 iOS의 기본 동작은 애플리케이션을 여는 것입니다. 애플리케이션이 종료된 상태라면 시작되고, 백그라운드에 있다면 포그라운드로 전환됩니다.

알림의 콘텐츠에 따라 애플리케이션이 열릴 때 사용자의 상호작용을 처리하려고 할 수 있습니다. 예를 들어 새 채팅 메시지가 알림을 통해 전송되고 사용자가 이를 선택하면 애플리케이션이 열릴 때 특정 대화를 열려고 할 수 있습니다.

firebase-messaging 패키지는 이 상호작용을 처리하는 두 가지 방법을 제공합니다.

  1. getInitialMessage(): 애플리케이션이 종료된 상태에서 열리면 이 메서드는 RemoteMessage가 포함된 Future를 반환합니다. 소비되면 RemoteMessage가 삭제됩니다.
  2. onMessageOpenedApp: 애플리케이션이 백그라운드 상태에서 열릴 때 RemoteMessage를 게시하는 Stream입니다.

사용자에게 원활한 환경을 보장하려면 두 시나리오를 모두 처리해야 합니다. 아래 코드 예시는 이를 처리하는 방법을 개략적으로 설명합니다.

class Application extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _Application();
}

class _Application extends State<Application> {
  // In this example, suppose that all messages contain a data field with the key 'type'.
  Future<void> setupInteractedMessage() async {
    // Get any messages which caused the application to open from
    // a terminated state.
    RemoteMessage? initialMessage =
        await FirebaseMessaging.instance.getInitialMessage();

    // If the message also contains a data property with a "type" of "chat",
    // navigate to a chat screen
    if (initialMessage != null) {
      _handleMessage(initialMessage);
    }

    // Also handle any interaction when the app is in the background via a
    // Stream listener
    FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
  }

  void _handleMessage(RemoteMessage message) {
    if (message.data['type'] == 'chat') {
      Navigator.pushNamed(context, '/chat',
        arguments: ChatArguments(message),
      );
    }
  }

  @override
  void initState() {
    super.initState();

    // Run code required to handle interacted messages in an async function
    // as initState() must not be async
    setupInteractedMessage();
  }

  @override
  Widget build(BuildContext context) {
    return Text("...");
  }
}

상호작용을 처리하는 방법은 애플리케이션 설정에 따라 다릅니다. 위의 예시는 StatefulWidget을 사용하는 기본 예시를 보여줍니다.

다음 단계

포그라운드 앱에 메시지 전송

백그라운드 앱에 알림 메시지를 보내는 데 성공했으면 Flutter 앱에서 메시지 수신을 참조하여 포그라운드 앱에 전송하는 방법을 알아보세요.

알림 메시지 이외의 고급 기능

앱에 다른 고급 동작을 추가하려면 서버 구현이 필요합니다.

그런 다음 앱 클라이언트에서 다음을 수행합니다.