כדי לקבל הודעות פשוטות במורד הזרם, כל אפליקציית לקוח צריכה להטמיע את השיטות ב-API firebase::messaging::Listener
.
אתחול של FCM
כדי שתוכלו להשתמש ב-FCM כדי לקבל גישה לטוקן הרישום או לקבל הודעות, צריך לאתחל אותו.
כדי לאתחל את FCM, צריך להפעיל את ::firebase::messaging::Initialize
ולספק לו את האובייקט ::firebase::App
ואת ההטמעה של הכיתה ::firebase::messaging::Listener
.
MyListener my_listener_implementation; ::firebase::messaging::Initialize(app, &my_listener_implementation);
גישה לטוקן הרישום
בהפעלה הראשונית של האפליקציה, ה-SDK של FCM יוצר אסימון רישום למכונה של אפליקציית הלקוח. אם רוצים לטרגט מכשירים ספציפיים או ליצור קבוצות מכשירים ל-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
במחלקה Listener.
שינוי מברירת המחדל של 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 השבועות האחרונים) הודעה לאפליקציה במכשיר הזה.
מומלץ שהאפליקציה תבצע סנכרון מלא עם שרת האפליקציה אחרי קבלת הקריאה הזו.