如要接收簡單的下游訊息,每個用戶端應用程式都需要在 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"
。訊息可能會因以下原因而遭到刪除:
FCM 伺服器上儲存的郵件過多。
當應用程式的伺服器在裝置離線時,將一連串無法折疊的訊息傳送至 FCM 伺服器,就可能發生這種情況。
裝置已許久未連線,且應用程式伺服器最近 (在過去 4 週內) 已將訊息傳送至該裝置上的應用程式。
建議應用程式在收到此呼叫後,與應用程式伺服器進行完整同步處理。