単純なダウンストリーム メッセージを受信するには、各クライアント アプリで 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 週間以内)メッセージを送信した場合。
この呼び出しの受信後に、アプリとアプリサーバーとの完全同期を行うことをおすすめします。