יש שתי אפשרויות להקצאת עדיפות מסירה להודעות שמועברות בהמשך השרשרת ב-Android: עדיפות רגילה ועדיפות גבוהה. כך מתבצעת מסירת הודעות רגילות והודעות עם עדיפות גבוהה:
עדיפות רגילה. זוהי העדיפות שמוגדרת כברירת מחדל להודעות נתונים ולהודעות התראה. הודעות בעדיפות רגילה נשלחות באופן מיידי כשהמכשיר לא במצב שינה. כשהמכשיר נמצא במצב שינה, יכול להיות שהמסירה תתעכב כדי לחסוך בסוללה עד שהמכשיר יצא ממצב שינה. להודעות שפחות דחופות, כמו התראות על אימייל חדש, סנכרון של ממשק המשתמש או סנכרון של נתוני האפליקציה ברקע, כדאי לבחור עדיפות מסירה רגילה.
עדיפות גבוהה.FCM מנסה להעביר הודעות עם עדיפות גבוהה באופן מיידי, ומאפשר ל-FCM להעיר מכשיר במצב שינה כשצריך, ולהפעיל עיבוד מוגבל (כולל גישה מוגבלת מאוד לרשת). הודעות בעדיפות גבוהה צריכות בדרך כלל להוביל לאינטראקציה של המשתמש עם האפליקציה או עם ההתראות שלה.
ההבדל בין הודעות עם עדיפות גבוהה לבין הודעות עם עדיפות רגילה
הודעות בעדיפות רגילה מתאימות לעדכונים כלליים, אבל כדאי לבחור בעדיפות גבוהה כשצריך לוודא שההודעה תועבר באופן מיידי בנושאים דחופים או כשצריך לבצע פעולות דחופות. מכיוון שמצב שינה יכול להשפיע על זמן המסירה של הודעות בעדיפות רגילה, הגדרת רוב ההתראות שגלויות למשתמשים כהתראות בעדיפות גבוהה תבטיח שהן יימסרו במהירות. לדוגמה, התראות כמו הודעות בצ'אט, בעיות בחשבון או עדכונים לגבי משלוח אוכל צריכות להיות בעדיפות גבוהה.
עיבוד הודעות עם עדיפות גבוהה ועדיפות רגילה
גם בהודעות עם עדיפות גבוהה וגם בהודעות עם עדיפות רגילה שמתקבלות במכשיר Android, מוקצות כמה שניות לעיבוד מטען ההודעה ב-handler של onMessageReceived
, ומוקצה קצת יותר זמן להודעות עם עדיפות גבוהה מאשר להודעות עם עדיפות רגילה. הזמן הזה אמור להיות ארוך מספיק רק כדי להציג התראה באופן מיידי. אם אתם צריכים לבצע פעולות נוספות, כמו טעינת תמונה מאחסון המכשיר או התקשרות לשרתים כדי לאסוף תוכן נוסף, תצטרכו לבצע שלבים נוספים.
השיטה onMessageReceived
מופעלת בשרשור עובד נפרד. מומלץ לעבד את מטען הנתונים של ההודעה ולהציג התראה באופן מיידי בתוך השיטה onMessageReceived
. אסור לבצע קריאות נוספות לרשת אסינכרונית או לעבד מטען ייעודי (payload) בשרשור נפרד בתוך השיטה onMessageReceived
. פעולה כזו עלולה לגרום לכך שהאפליקציה תפעל מחוץ למחזור חיים תקין של תהליך לפני שהמטען הייעודי יעבור עיבוד מלא. במקרה כזה, יכול להיות שתראו שהודעות FCM מסוימות שנשלחות גורמות לעיכובים בהצגת ההתראות או שההתראות לא מוצגות בכלל.
אם אתם צריכים עוד זמן לעיבוד ההודעה, למשל כדי לאחזר imageUrl
שכלול במטען הייעודי (payload) של ההודעה, תצטרכו להשתמש במבנה כמו WorkManager
או בשירות חזיתי כדי להאריך את מחזור החיים של האפליקציה. כדי לוודא שההתראות עוברות עיבוד מלא, צריך לפעול לפי ההנחיות הבאות כשמבטלים את השימוש בשיטת onMessageReceived
.
- להתראות על הודעות אימייל עם עדיפות גבוהה: מתחילים תהליך מזורז באמצעות Android
WorkManager
כדי לוודא שההתראה על הודעת האימייל עם העדיפות הגבוהה מקבלת עדיפות בזמן העיבוד, וכך לוודא שההצגה של ההתראה מסתיימת. החדשות הטובות הן שאם אתם חוששים שתחרגו ממכסות העבודות המואצות כתוצאה מעיבוד ב-FCM בעדיפות גבוהה, אתם לא צריכים לדאוג. יש חריגה קצרה למשרות שנקבע להן מועד מיידי אחרי שליחה של הודעת FCMonMessageReceived
בעדיפות גבוהה. - להתראות עם עדיפות רגילה: מפעילים התראה רגילה
WorkRequest
באמצעותWorkManager
ב-Android. כך תוכלו לוודא שהעבודה הנוספת שנדרשת לעיבוד ההתראה תעובד בסופו של דבר, בלי להשתמש בעיבוד לפי עדיפות ובלי לגרום לבעיות מיותרות בשימוש בסוללה.
הגדרת עדיפות להודעות
אפשר לשלוח התראות למשתמשים באמצעות Admin SDK, FCM REST API ומסוף Firebase. כדי לשנות את הגדרת העדיפות באמצעות Admin SDK ו-FCM REST API, צריך לעדכן את מטען ה-JSON של ההודעה. בדוגמת הקוד הבאה אפשר לראות איך מגדירים את העדיפות כגבוהה. אי אפשר להגדיר שדות של התראות ספציפיות ל-Android עבור התראות שנשלחות מהמסוף.
{
"message": {
"notification": {
"body": "Purchase exceeding $500 detected",
"title": "Credit card purchase"
},
"data": {
"purchaser": "Your child",
"items": "Gravity Defier Sneakers"
},
"android": {
"priority": "high"
},
"apns": {
"headers": {
"apns-priority": "5"
}
}
}
}
בדיקת התראות על אימיילים עם עדיפות גבוהה במצב שינה
כדי לוודא שההתראות בעדיפות גבוהה מתקבלות ומעובדות בצורה נכונה כשהמשתמש מקבל אותן, צריך לפעול לפי ההוראות הבאות כדי לבדוק את ההתראות:
- מגדירים את המכשיר למצב שינה באמצעות ההוראות במאמר בנושא בדיקת האפליקציה במצב שינה.
- ניגשים לטוקן הרישום של FCM מהאפליקציה במכשיר הבדיקה. מידע נוסף על גישה לאסימון זמין במאמר שליחת הודעת בדיקה לאפליקציה ברקע.
- אחרי שמקבלים את FCM הטוקן, שולחים את ההתראה בעדיפות גבוהה למכשיר הבדיקה באמצעות FCM קוד שליחת ההתראות או פקודת cURL עם פרמטרים של הגדרה שתואמים להתראה בעדיפות גבוהה.
הורדת העדיפות של התראות עם עדיפות גבוהה FCM ב-Android
הודעות בעדיפות גבוהה ב-Android מיועדות לתוכן רגיש לזמן שגלוי למשתמשים, והן אמורות להוביל להצגת התראות למשתמשים. אם FCM מזהה תבנית שבה הודעות לא מובילות להצגת התראות למשתמשים, יכול להיות שההודעות שלכם יקבלו עדיפות נמוכה יותר או יועברו לטיפול על ידי שירותי Google Play.
FCM משתמש בנתוני התנהגות של הודעות מ-7 ימים כדי לקבוע אם להוריד את סדר העדיפות של ההודעות או להשתמש בשרת proxy כדי לשלוח אותן. המערכת מבצעת את הקביעה הזו באופן עצמאי לכל מופע של האפליקציה. אם ההתראות על הודעות בעדיפות גבוהה מוצגות למשתמש, זה לא ישפיע על הודעות בעדיפות גבוהה שתשלחו בעתיד.
העברת הרשאה לשליחת התראות באמצעות Google Play Services
הודעות התראה עם עדיפות גבוהה שעומדות בקריטריונים מסוימים מועברות דרך שרתי proxy של שירותי Google Play במקום להוריד את העדיפות שלהן. המשמעות היא ש-Google Play Services מציג את ההתראות בשם האפליקציה, בלי שצריך להפעיל את האפליקציה. המטרה היא לספק חוויית משתמש טובה יותר במכשירי Android.
שימו לב שהודעות התראה דרך שרת proxy משנות את אופן הדיווח על נתוחי השימוש שקשורים להודעות שמתקבלות:
- כדי שהניתוח של התראות שמועברות דרך פרוקסי ידווח, האפליקציה שלכם צריכה להשתמש ב-FCM SDK גרסה 24.0.0 ואילך.
- יכול להיות שתבחינו בעיכובים או בירידה במספר ההודעות שהתקבלו לעומת המספר לפני ההשקה של הודעות פרוקסי. הסיבה לכך היא שנתוני הניתוח של התראות שמועברות דרך שרת proxy מדווחים רק אחרי שהאפליקציה מתחילה לפעול, ויכול להיות שהם לא ידווחו בכלל אם ההתראה לא תוביל לפתיחת האפליקציה.
העברת הודעות התראה דרך שרת proxy באופן הזה היא התנהגות ברירת המחדל של אפליקציות שמשתמשות ב-Android מגרסה Q ואילך וב-Google Play Services מגרסה 19054000 ואילך. הודעות שנשלחות דרך HTTP v1 API מועברות דרך שרת proxy, אבל הודעות שנשלחות דרך מסוף Firebase או דרך ממשקי API מדור קודם לא מועברות דרך שרת proxy. חשוב לדעת: התכונה הזו נמצאת כרגע בשלב הבטא, והיא עשויה להשתנות.
מומלץ מאוד להשאיר את ההגדרה 'הענקת הרשאות' מופעלת כדי ליהנות מהיתרונות שלה מבחינת הסוללה והזיכרון של המכשיר, אבל אפשר לבטל את ההסכמה להתנהגות הזו באחת מהדרכים הבאות:
- ברמת האפליקציה: מוסיפים את ההנחיה
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>
למניפסט של האפליקציה. - על בסיס מופע של אפליקציה: מגדירים את
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>
בתהליך ממשק המשתמש של האפליקציה, בהתאם לתרחיש השימוש הספציפי. - לכל הודעה בנפרד: מגדירים את המפתח
proxy
לערךDENY
באובייקטAndroidNotification
של בקשת השליחה.
מדידת הורדת העדיפות של הודעות ב-Android
הודעות נפרדות. אחרי המסירה, אפשר להשוות בין העדיפות של ההודעה שמוחזרת מ-getPriority() לבין העדיפות המקורית שלה שמוחזרת מ-getOriginalPriority() כדי לדעת אם העדיפות של ההודעה הספציפית הזו הורדה או לא.
כל ההודעות. FCM Aggregate Delivery Data API יכול לדווח על אחוז ההודעות ל-Android שמועברות עם עדיפות נמוכה יותר מכלל ההודעות. יכול להיות שחלק מההודעות לא ייכללו בדוחות של נתוני הצבירה, אבל בסך הכול הם אמורים לספק תמונה כללית של שיעורי ההורדה של העדיפות של ההודעות. מידע נוסף ודוגמאות קוד לשאילתות ב-API זמינים במאמר בנושא נתוני מסירה מצטברים. אפשר גם לעיין בנתונים באמצעות API Explorer.
התראות דרך שרת proxy. ההתראות שמועברות דרך שרת proxy לא ייספרו במדדי המסירה הנוכחיים של FCM או GA, ולכן יכול להיות שתחוו ירידה של עד 15% במדדי מסירת ההתראות. כדי לדווח על הודעות שעברו דרך שרת proxy, משתמשים ב-FCM Aggregate Delivery Data API. בדוח
ProxyNotificationInsightPercents
מוצג אחוז ההודעות שהועברו בהצלחה דרך השרת, וגם פרטים על הודעות שלא ניתן להעביר דרך השרת.
פתרון בעיות שקשורות לעיכובים בהתראות
מוודאים שההתראות מופעלות במופע האפליקציה. אם המשתמש השבית את הרשאת ההתראות לאפליקציה שלכם, אף אחת מההתראות שלכם לא תפורסם, וכתוצאה מכך, ההודעות שלכם יקבלו עדיפות נמוכה יותר. לפני ששולחים הודעות בעדיפות גבוהה למופע של אפליקציה, צריך לוודא שההתראות מופעלות.
מומלץ להימנע מביצוע קריאות נוספות לרשת במהלך עיבוד ההתראה. חלק קטן מהמשתמשים במכשירי Android נמצאים ברשתות עם זמן אחזור גבוה, ולכן מומלץ להימנע מפתיחת חיבור לשרתים לפני הצגת ההתראה. התקשרות חזרה לשרת לפני סיום זמן העיבוד המותר עלולה להיות מסוכנת למשתמשים ברשתות עם זמן אחזור גבוה.
במקום זאת, צריך לכלול את תוכן ההתראה בהודעת ה-FCM ולהציג אותה באופן מיידי. אם אתם צריכים לסנכרן תוכן נוסף באפליקציה ב-Android, אתם יכולים לתזמן משימה באמצעות WorkManager כדי שהסנכרון יתבצע ברקע.