在 C++ 用戶端應用程式中接收訊息

如要接收簡單的下游訊息,每個用戶端應用程式都必須在 firebase::messaging::Listener API 上實作方法。

初始化 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 週內) 曾傳送訊息給該裝置上的應用程式。

    建議應用程式在收到這項呼叫後,與應用程式伺服器進行完整同步。