単純なダウンストリーム メッセージを受信するには、各クライアント アプリで 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" になります。メッセージが削除される理由は次のとおりです。
FCM サーバーに格納されているメッセージが多すぎる場合。
端末がオフラインのときに、アプリのサーバーが折りたたみ不可のメッセージを FCM サーバーに大量に送信すると、この問題が発生します。
アプリサーバーが、長時間接続されていない端末のアプリに最近(過去 4 週間以内)メッセージを送信した場合。
この呼び出しの受信後に、アプリとアプリサーバーとの完全同期を行うことをおすすめします。
イベント送信
アップストリーム メッセージが FCM 接続サーバーに正常に送信されたときに呼び出されます。Message::message_type は "send_event" になります。
送信エラー
アップストリーム メッセージの送信中にエラーが発生すると、呼び出されます。
Message::message_type は "send_error" になります。

