קבלת הודעות באמצעות העברת הודעות בענן ב-Firebase

במדריך הזה מוסבר איך להגדיר את Firebase Cloud Messaging באפליקציות הלקוח לנייד ולאינטרנט כדי לקבל הודעות בצורה מהימנה.

כדי לקבל הודעות במורד הזרם, כל אפליקציית לקוח צריכה להטמיע את השיטות ב-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);

גישה לטוקן הרישום

בהפעלה הראשונית של האפליקציה, 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 השבועות האחרונים) הודעה לאפליקציה במכשיר הזה.

    מומלץ שהאפליקציה תבצע סנכרון מלא עם שרת האפליקציה אחרי קבלת השיחה הזו.