יש שתי אפשרויות להקצאת עדיפות העברה להודעות ב-downstream ב-Android: עדיפות רגילה ועדיפות גבוהה. כך מתבצעת העברת הודעות עם עדיפות רגילה וגבוהה:
עדיפות רגילה זוהי רמת העדיפות שמוגדרת כברירת מחדל להודעות על נתונים והתראות. הודעות בעדיפות רגילה נשלחות באופן מיידי כשהמכשיר לא במצב שינה. כשהמכשיר נמצא במצב שינה, יכול להיות שההעברה תידחה כדי לחסוך בסוללה עד שהמכשיר ייצא ממצב השינה. להודעות פחות דחופות, כמו התראות על אימיילים חדשים, שמירה על סנכרון של ממשק המשתמש או סנכרון נתוני האפליקציה ברקע, בוחרים בעדיפות העברה רגילה.
עדיפות גבוהה.FCM מנסה להעביר הודעות עם עדיפות גבוהה באופן מיידי, ומאפשר ל-FCM להעיר מכשיר במצב שינה במקרה הצורך ולהריץ עיבוד מוגבל (כולל גישה מוגבלת מאוד לרשת). בדרך כלל, הודעות בעדיפות גבוהה אמורות לגרום לאינטראקציה של המשתמשים עם האפליקציה או עם ההתראות שלה.
איך מחליטים אם להגדיר הודעות כבעלות עדיפות גבוהה או רגילה
הודעות בעדיפות רגילה מתאימות לעדכונים כלליים, אבל כדאי לבחור בעדיפות גבוהה כשצריך להבטיח שליחה מיידית של פעולות או נושאים דחופים. מאחר שזמן המסירה של הודעות בעדיפות רגילה עשוי להיות מושפע ממצב שינה, הגדרת רוב ההתראות שגלויות למשתמשים לעדיפות גבוהה תבטיח שהן יישלחו במהירות. לדוגמה, התראות כמו הודעות בצ'אט, בעיות בחשבון או עדכונים לגבי משלוחי אוכל, צריכות להיות מוגדרות כבעלות עדיפות גבוהה.
עיבוד הודעות בעדיפות גבוהה ובעדיפות רגילה
גם בהתראות בעדיפות גבוהה וגם בהתראות בעדיפות רגילה שמתקבלות במכשיר Android, ניתנות כמה שניות לעיבוד של עומס העבודה של ההודעה במטפל onMessageReceived
. בהתראות שדורשות עיבוד אסינכרוני של עומס העבודה של ההודעה, מומלץ להשתמש במבנה כמו WorkManager, כי הזמן הזה עלול לחרוג מהזמן שהוקצה לטיפול של onMessageReceived
.
להודעות בעדיפות גבוהה, אפשר לתזמן משימה מהירה באמצעות Android WorkManager כדי לוודא שההתראות האלה ימוינו לפי תעדוף ויושלמו.
להודעות עם עדיפות רגילה, אפשר לתזמן בקשה רגילה לפעולה חד-פעמית באמצעות Android WorkManager. כך נוכל לוודא שהעבודה הנדרשת תעשה, בלי להשתמש בטיפול מהיר.
הגדרת רמת העדיפות של הודעות
אפשר לשלוח התראות למשתמשים באמצעות Admin SDK, API ל-REST של FCM והמסוף Firebase. כדי לשנות את הגדרת העדיפות באמצעות Admin SDK ו-FCM API ל-REST, צריך לעדכן את עומס העבודה (payload) של ההודעה בפורמט 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"
}
}
}
}
בדיקת ההתראות בעדיפות גבוהה במצב שינה
כדי לוודא שההתראות בעדיפות גבוהה מתקבלות ומעובדות בצורה נכונה כשמשתמש מקבל אותן, צריך לפעול לפי ההוראות הבאות כדי לבדוק את ההתראות:
- מגדירים את המכשיר למצב Doze לפי ההוראות במאמר בדיקת האפליקציה במצב Doze.
- ניגשים לטוקן הרישום FCM מהאפליקציה במכשיר הבדיקה. מידע נוסף על הגישה לאסימון זמין במאמר שליחת הודעת בדיקה לאפליקציה שפועלת ברקע.
- אחרי שתקבלו את האסימון FCM, שלחו את ההתראה בעדיפות גבוהה למכשיר הבדיקה באמצעות קוד השליחה של ההתראה FCM או באמצעות פקודת cURL%3B%0A%7D)-,cURL,-curl%20%2DX) עם פרמטרים של הגדרה שתואמים להתראה בעדיפות גבוהה.
הורדת העדיפות של FCM בעדיפות גבוהה ב-Android
הודעות בעדיפות גבוהה ב-Android מיועדות לתוכן שזמני וצריך להציג אותו למשתמשים, והן אמורות להוביל להצגת התראות למשתמשים. אם FCM מזהה דפוס שבו הודעות לא גורמות להצגת התראות למשתמש, יכול להיות שהעדיפות של ההודעות תופחת לעדיפות רגילה או שהן יוקצו לטיפול על ידי Google Play Services.
FCM משתמש בהתנהגות ההודעות מ-7 הימים האחרונים כדי לקבוע אם להפחית את רמת העדיפות של הודעות או להעביר אותן לשירות proxy. המערכת מקבלת את ההחלטה הזו בנפרד לכל מכונה של האפליקציה. אם התראות על הודעות בעדיפות גבוהה מוצגות למשתמש, הודעות עתידיות בעדיפות גבוהה לא יושפעו.
הענקת גישה לקבלת התראות באמצעות Google Play Services
הודעות התראה עם עדיפות גבוהה שעומדות בקריטריונים מסוימים עוברות דרך שרת proxy של שירותי Google Play במקום שהעדיפות שלהן תופחת. כלומר, ההתראות מוצגות על ידי Google Play Services בשם האפליקציה, בלי צורך להפעיל את האפליקציה. המטרה היא לספק חוויית משתמש טובה יותר במכשירי Android.
חשוב לזכור שהעברת הודעות דרך שרת proxy גורמת לשינויים באופן הדיווח על ניתוח הנתונים שקשור להודעות שמתקבלות:
- כדי לדווח על ניתוח נתונים של התראות דרך שרת proxy, באפליקציה צריך להשתמש ב-FCM SDK מגרסה 24.0.0 ואילך.
- יכול להיות שתבחינו בעיכובים או בירידה במספר ההודעות שאתם מקבלים בהשוואה למספר ההודעות שקיבלת לפני ההשקה של התראות דרך שרת proxy. הסיבה לכך היא שניתוח הנתונים של התראות דרך שרת 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
מדווח על אחוז ההתראות שהועברו בהצלחה דרך שרת proxy, וגם על פרטים לגבי הודעות שלא ניתן להעביר דרך שרת proxy.
פתרון בעיות שקשורות לעיכובים בהתראות
מוודאים שההתראות מופעלות במכונה של האפליקציה. אם המשתמש השבית את הרשאת ההתראות באפליקציה שלכם, אף אחת מההתראות לא תפורסם. כתוצאה מכך, ההודעות שלכם לא יקבלו עדיפות. לפני שליחת הודעות בעדיפות גבוהה למכונה של אפליקציה, צריך לוודא שההתראות מופעלות.
כדאי להימנע מביצועים של קריאות נוספות לרשת במהלך עיבוד ההודעה. מכיוון שחלק קטן מהמשתמשים בניידים עם Android משתמשים ברשתות עם זמן אחזור גבוה, מומלץ להימנע מפתיחת חיבור לשרתים לפני הצגת ההתראה. קריאה חוזרת לשרת לפני סיום זמן העיבוד המורשה עלולה להיות מסוכנת למשתמשים ברשתות עם זמן אחזור גבוה.
במקום זאת, כדאי לכלול את תוכן ההתראה בהודעת FCM ולהציג אותה באופן מיידי. אם אתם צריכים לסנכרן תוכן נוסף באפליקציה ב-Android, תוכלו לתזמן משימה באמצעות WorkManager כדי לטפל בכך ברקע.