在 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 週內)向該設備上的應用程式發送了一條訊息。

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