C++ 클라이언트 앱에서 메시지 수신

간단한 다운스트림 메시지를 수신하려면 각 클라이언트 앱이 firebase::messaging::Listener API의 메서드를 구현해야 합니다.

FCM 초기화

FCM을 사용하여 등록 토큰에 액세스하거나 메시지를 수신하려면 먼저 FCM을 초기화해야 합니다.

FCM을 초기화하려면 ::firebase::messaging::Initialize를 호출하고 ::firebase::App 객체 및 ::firebase::messaging::Listener 클래스 구현을 제공합니다.

MyListener my_listener_implementation;
::firebase::messaging::Initialize(app, &my_listener_implementation);

등록 토큰 액세스

앱을 처음 시작할 때 FCM SDK가 클라이언트 앱 인스턴스용 등록 토큰을 생성합니다. 기기 하나를 타겟팅하거나 FCM용 기기 그룹을 만들려면 이 토큰에 액세스해야 합니다.

토큰의 값은 ::firebase::messaging::Listener::OnTokenReceived 가상 함수를 통해 액세스할 수 있습니다.

void OnTokenReceived(const char* token) {
  LogMessage("The registration token is `%s`", token);

  // TODO: If necessary send token to application server.
}

메시지 수신 및 처리

메시지를 수신하려면 Listener 클래스가 OnMessage 가상 함수를 구현해야 합니다.

OnMessage 재정의

::firebase::messaging::Listener::OnMessage 메서드를 재정의하면 수신된 메시지에 따라 작업을 수행하고 메시지 데이터를 가져올 수 있습니다.

void OnMessage(const ::firebase::messaging::Message& message) {
  LogMessage(TAG, "From: %s", message.from.c_str());
  LogMessage(TAG, "Message ID: %s", message.message_id.c_str());
}

메시지는 여러 종류의 수신 데이터를 나타낼 수 있습니다. 가장 일반적인 경우는 개발자가 생성한 메시지를 앱에 보내는 경우입니다. 또한 메시지 전송 이벤트, 메시지 전송 오류 이벤트, 메시지 삭제 이벤트를 나타내기 위해 앱에 메시지를 보내기도 합니다. Message::message_type 필드를 확인하여 이러한 특수 이벤트를 구분할 수 있습니다.

메시지 삭제

FCM 서버가 대기중인 메시지를 삭제할 때 앱에 전송됩니다. Message::message_type"deleted_messages"입니다. 다음과 같은 이유로 메시지가 삭제될 수 있습니다.

  1. FCM 서버에 저장된 메시지가 너무 많습니다.

    기기가 오프라인 상태일 때 앱 서버에서 FCM 서버에 비축소형 메시지를 많이 보내면 이러한 상황이 발생할 수 있습니다.

  2. 최근 4주 이내에 앱 서버에서 오랫동안 연결되지 않은 기기의 앱에 메시지를 보냈습니다.

    이 호출이 수신되면 앱에서 앱 서버와 전체 동기화를 수행하는 것이 좋습니다.