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 週間以内)メッセージを送信した場合。

    この呼び出しの受信後に、アプリとアプリサーバーとの完全同期を行うことをおすすめします。