在 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.
}

接收及處理訊息

如要接收訊息,事件監聽器類別必須實作 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 週內) 已將訊息傳送至該裝置上的應用程式。

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