要接收簡單的下游訊息,每個客戶端應用程式都需要實作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"
。訊息可能因以下原因被刪除:
FCM 伺服器上儲存的訊息太多。
當應用程式的伺服器在裝置離線時向 FCM 伺服器發送一堆不可折疊的訊息時,可能會發生這種情況。
該設備已經很長時間沒有連接,並且應用程式伺服器最近(在過去 4 週內)向該設備上的應用程式發送了一條訊息。
建議應用程式在收到此呼叫後與應用程式伺服器進行完全同步。