本指南說明如何在行動和網頁用戶端應用程式中設定 Firebase Cloud Messaging,以便穩定接收訊息。
如要接收下游訊息,每個用戶端應用程式都必須實作 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 週內) 曾傳送訊息給該裝置上的應用程式。
建議應用程式在收到這項呼叫後,與應用程式伺服器進行完整同步。