יש שתי אפשרויות להקצאת עדיפות מסירה להודעות שמועברות בהמשך השרשרת ב-Android: עדיפות רגילה ועדיפות גבוהה. כך מתבצעת מסירת הודעות רגילות והודעות עם עדיפות גבוהה:
עדיפות רגילה. זוהי העדיפות שמוגדרת כברירת מחדל להודעות נתונים ולהודעות התראה. הודעות בעדיפות רגילה נשלחות באופן מיידי כשהמכשיר לא במצב שינה. כשהמכשיר נמצא במצב שינה, יכול להיות שהמסירה תתעכב כדי לחסוך בסוללה עד שהמכשיר יצא ממצב שינה. להודעות שפחות דחופות, כמו התראות על אימייל חדש, סנכרון של ממשק המשתמש או סנכרון של נתוני האפליקציה ברקע, כדאי לבחור עדיפות מסירה רגילה.
עדיפות גבוהה.FCM מנסה להעביר הודעות עם עדיפות גבוהה באופן מיידי, ומאפשר ל-FCM להעיר מכשיר במצב שינה כשצריך, ולהפעיל עיבוד מוגבל (כולל גישה מוגבלת מאוד לרשת). הודעות בעדיפות גבוהה צריכות בדרך כלל להוביל לאינטראקציה של המשתמש עם האפליקציה או עם ההתראות שלה.
ההבדל בין הודעות עם עדיפות גבוהה לבין הודעות עם עדיפות רגילה
הודעות בעדיפות רגילה מתאימות לעדכונים כלליים, אבל כדאי לבחור בעדיפות גבוהה כשצריך לוודא שההודעה תועבר באופן מיידי בנושאים דחופים או כשצריך לבצע פעולות דחופות. מכיוון שמצב שינה יכול להשפיע על זמן המסירה של הודעות בעדיפות רגילה, הגדרת רוב ההתראות שגלויות למשתמשים כהתראות בעדיפות גבוהה תבטיח שהן יימסרו במהירות. לדוגמה, התראות כמו הודעות בצ'אט, בעיות בחשבון או עדכונים לגבי משלוח אוכל צריכות להיות בעדיפות גבוהה.
עיבוד הודעות עם עדיפות גבוהה ועדיפות רגילה
גם להתראות עם עדיפות גבוהה וגם להתראות עם עדיפות רגילה שמתקבלות במכשיר Android, מוקצות כמה שניות לעיבוד מטען ההודעה ב-handler של onMessageReceived
. לכל ההתראות שדורשות עיבוד אסינכרוני של מטען הנתונים של ההודעה, מומלץ להשתמש במבנה כמו WorkManager, כי יכול להיות שהעיבוד יימשך יותר מהזמן שמוקצב ל-handler של onMessageReceived
.
כדי לוודא שההתראות האלה יקבלו עדיפות ויפעלו עד לסיום, אפשר לתזמן עבודה מזורזת באמצעות Android WorkManager עבור הודעות עם עדיפות גבוהה.
עבור הודעות בעדיפות רגילה, אפשר לתזמן בקשת עבודה רגילה חד-פעמית (OneTimeWorkRequest) באמצעות Android WorkManager. כך נוכל לוודא שהעבודה הנוספת הנדרשת תתבצע, בלי להשתמש בעיבוד עם עדיפות.
הגדרת עדיפות להודעות
אפשר לשלוח התראות למשתמשים באמצעות 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%3B%0A%7D)-,cURL,-curl%20%2DX) עם פרמטרים של תצורה שתואמים להתראה בעדיפות גבוהה.
הורדת העדיפות של התראות עם עדיפות גבוהה FCM ב-Android
הודעות בעדיפות גבוהה ב-Android מיועדות לתוכן רגיש לזמן שגלוי למשתמשים, והן אמורות להוביל להצגת התראות למשתמשים. אם FCM מזהה תבנית שבה הודעות לא מובילות להצגת התראות למשתמשים, יכול להיות שההודעות שלכם יקבלו עדיפות נמוכה יותר או יועברו לטיפול על ידי שירותי Google Play.
FCM משתמש בנתוני התנהגות של הודעות מ-7 ימים כדי לקבוע אם להוריד את סדר העדיפות של ההודעות או להשתמש בשרת proxy כדי לשלוח אותן. המערכת מבצעת את הקביעה הזו באופן עצמאי לכל מופע של האפליקציה. אם ההתראות על הודעות בעדיפות גבוהה מוצגות למשתמש, זה לא ישפיע על הודעות בעדיפות גבוהה שתשלחו בעתיד.
העברת הרשאה לשליחת התראות באמצעות Google Play Services
הודעות התראה עם עדיפות גבוהה שעומדות בקריטריונים מסוימים מועברות דרך שרתי proxy של שירותי Google Play במקום להוריד את העדיפות שלהן. המשמעות היא ש-Google Play Services מציג את ההתראות בשם האפליקציה, בלי שצריך להפעיל את האפליקציה. המטרה היא לספק חוויית משתמש טובה יותר במכשירי Android.
שימו לב שהודעות התראה דרך שרת proxy משנות את אופן הדיווח על נתוחי השימוש שקשורים להודעות שמתקבלות:
- כדי שנתוני הניתוח של הודעות שעברו דרך שרת 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.
התראות דרך שרת proxy. ההתראות שמועברות דרך שרת proxy לא ייספרו במדדי המסירה הנוכחיים של FCM או GA, ולכן יכול להיות שתחוו ירידה של עד 15% במדדי מסירת ההתראות. כדי לדווח על הודעות שעברו דרך שרת proxy, משתמשים ב-FCM Aggregate Delivery Data API. בדוח
ProxyNotificationInsightPercents
מוצג אחוז ההודעות שהועברו בהצלחה דרך השרת, וגם פרטים על הודעות שלא ניתן להעביר דרך השרת.
פתרון בעיות שקשורות לעיכובים בהתראות
מוודאים שההתראות מופעלות במופע האפליקציה. אם המשתמש השבית את הרשאת ההתראות לאפליקציה שלכם, אף אחת מההתראות שלכם לא תפורסם, וכתוצאה מכך, ההודעות שלכם יקבלו עדיפות נמוכה יותר. לפני ששולחים הודעות בעדיפות גבוהה למופע של אפליקציה, צריך לוודא שההתראות מופעלות.
מומלץ להימנע מביצוע קריאות נוספות לרשת במהלך עיבוד ההתראה. חלק קטן מהמשתמשים במכשירי Android נמצאים ברשתות עם זמן אחזור גבוה, ולכן מומלץ להימנע מפתיחת חיבור לשרתים לפני הצגת ההתראה. התקשרות חזרה לשרת לפני סיום זמן העיבוד המותר עלולה להיות מסוכנת למשתמשים ברשתות עם זמן אחזור גבוה.
במקום זאת, צריך לכלול את תוכן ההתראה בהודעת ה-FCM ולהציג אותה באופן מיידי. אם אתם צריכים לסנכרן תוכן נוסף באפליקציה ב-Android, אתם יכולים לתזמן משימה באמצעות WorkManager כדי שהסנכרון יתבצע ברקע.