כשנתקלים בבעיה בהתראות מאתרים, יכול להיות קשה לנפות את הבאגים או למצוא עזרה. במסמך הזה מתוארות כמה מהבעיות הנפוצות ומה צריך לעשות אם נתקלתם בבאג ב-Chrome או ב-Firefox.
לפני שנתחיל לנפות באגים בהתראות, יכול להיות שתיתקלו בבעיות בניפוי באגים ב-Service Worker עצמם, בקובץ שלא מתעדכן, בשגיאה ברישום או באופן כללי בהתנהגות חריגה. יש מסמך מעולה על ניפוי באגים של קובצי שירות (service worker), ואני ממליץ מאוד לעיין בו אם אתם חדשים בפיתוח של קובצי שירות.
יש שני שלבים נפרדים שצריך לבצע כשמפתחים ובודקים התראות אינטרנט, ולכל אחד מהם יש קבוצה משלו של בעיות נפוצות:
- שליחת הודעה: מוודאים שההודעות נשלחות בהצלחה.
אתם אמורים לקבל קוד HTTP 201. אם אתם לא:
- בדיקת שגיאות הרשאה: אם מופיעה הודעת שגיאה שקשורה להרשאה, עיינו בקטע בעיות הרשאה.
- שגיאות אחרות ב-API: אם אתם מקבלים תגובה עם קוד סטטוס שהוא לא 201, עיינו בקטע קודי סטטוס של HTTP כדי להבין מה גרם לבעיה.
- קבלת הודעה: אם הצלחתם לשלוח הודעה, אבל היא לא התקבלה בדפדפן:
- בדיקה אם יש בעיות בהצפנה: עיינו בקטע בנושא בעיות בהצפנת המטען הייעודי (payload).
- בדיקת בעיות בחיבור: אם הבעיה היא ב-Chrome, יכול להיות שהיא קשורה לחיבור. מידע נוסף זמין בקטע בעיות בחיבור.
אם אתם לא מצליחים לשלוח ולקבל הודעות Push, והקטעים הרלוונטיים במסמך הזה לא עוזרים לכם לנפות באגים בבעיה, יכול להיות שמצאתם באג במנגנון ה-Push עצמו. במקרה כזה, כדאי לעיין בקטע שליחת דוחות על באגים כדי לשלוח דוח על באג עם כל המידע הנדרש, וכך לזרז את תהליך תיקון הבאגים.
לפני שנתחיל, חשוב לציין שב-Firefox ובשירות Mozilla AutoPush יש הודעות שגיאה מצוינות. אם נתקעתם ואתם לא בטוחים מה הבעיה, נסו לבדוק ב-Firefox ולראות אם אתם מקבלים הודעת שגיאה מועילה יותר.
בעיות בהרשאות
בעיות הרשאה הן אחת מהבעיות הנפוצות ביותר שמפתחים נתקלים בהן כשהם מתחילים להשתמש בהתראות מאתרים. בדרך כלל הבעיה היא בהגדרה של מפתחות שרת האפליקציות (שנקראים גם מפתחות VAPID) של האתר.
הדרך הכי קלה לתמוך בהתראות גם ב-Firefox וגם ב-Chrome היא לספק applicationServerKey בקריאה ל-subscribe(). החיסרון הוא שכל אי-התאמה בין המפתחות של ממשק המשתמש לבין המפתחות של השרת תגרום לשגיאת הרשאה.
ב-Chrome וב-FCM
ב-Chrome, שמשתמש ב-FCM כשירות התראות, תקבלו תגובה UnauthorizedRegistration מ-FCM על מגוון שגיאות שונות, שכולן קשורות למפתחות של שרת האפליקציה.
תקבלו את השגיאה UnauthorizedRegistration בכל אחד מהמצבים הבאים:
- אם לא מגדירים כותרת
Authorizationבבקשה ל-FCM. - מפתח האפליקציה שמשמש לרישום המשתמש לא תואם למפתח שמשמש לחתימה על הכותרת Authorization.
- התפוגה לא תקינה ב-JWT, כלומר התפוגה חורגת מ-24 שעות או שתוקף ה-JWT פג.
- הפורמט של ה-JWT שגוי או שיש בו ערכים לא תקינים.
תגובת השגיאה המלאה נראית כך:
<html>
<head>
<title>UnauthorizedRegistration</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>UnauthorizedRegistration</h1>
<h2>Error 400</h2>
</body>
</html>
אם קיבלתם את הודעת השגיאה הזו ב-Chrome, כדאי לבדוק ב-Firefox אם יש מידע נוסף על הבעיה.
Firefox ו-Mozilla AutoPush
ב-Firefox וב-Mozilla AutoPush יש קבוצה של הודעות שגיאה ידידותיות לבעיות ב-Authorization.
בנוסף, תקבלו תגובת שגיאה Unauthorized מ-Mozilla AutoPush אם הכותרת Authorization לא נכללת בבקשת ה-Push.
{
"errno": 109,
"message": "Request did not validate missing authorization header",
"code": 401,
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"error": "Unauthorized"
}
אם תוקף ה-JWT פג, תתקבל גם שגיאת Unauthorized עם הודעה שמסבירה שתוקף האסימון פג.
{
"code": 401,
"errno": 109,
"error": "Unauthorized",
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"message": "Request did not validate Invalid bearer token: Auth expired"
}
אם מפתחות שרת האפליקציה שונים בין המועד שבו המשתמש נרשם לבין המועד שבו כותרת ההרשאה נחתמה, תוחזר שגיאת Not Found:
{
"errno": 102,
"message": "Request did not validate invalid token",
"code": 404,
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"error": "Not Found"
}
לבסוף, אם יש ערך לא חוקי ב-JWT (לדוגמה, אם הערך של "alg" הוא ערך לא צפוי), תתקבל השגיאה הבאה מ-Mozilla AutoPush:
{
"code": 401,
"errno": 109,
"error": "Unauthorized",
"more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
"message": "Request did not validate Invalid Authorization Header"
}
קודי מצב HTTP
יש מגוון בעיות שיכולות לגרום לקוד תגובה שאינו 201 משירות פוש. ריכזנו כאן רשימה של קודי סטטוס של HTTP והמשמעות שלהם בהקשר של התראות מאתרים.
| קוד סטטוס | תיאור |
|---|---|
| 429 | יותר מדי בקשות. שרת האפליקציה הגיע למגבלת הקצב של שירות התראות. התגובה מהשירות צריכה לכלול כותרת Retry-After כדי לציין כמה זמן צריך לחכות לפני שאפשר לשלוח בקשה נוספת. |
| 400 | בקשה לא חוקית. אחת מהכותרות לא תקינה או שהפורמט שלה שגוי. |
| 404 | לא נמצא. במקרה כזה, צריך למחוק את PushSubscription מה-back-end ולהמתין להזדמנות לרשום מחדש את המשתמש. |
| 410 | נעלם. המינוי כבר לא תקף וצריך להסיר אותו מה-backend. כדי לשחזר את הבעיה, אפשר להפעיל את `unsubscribe()` ב-`PushSubscription`. |
| 413 | גודל המטען הייעודי (payload) גדול מדי. גודל המטען הייעודי המינימלי ששירות ההתראות צריך לתמוך בו הוא 4,096 בייטים (או 4KB). אם הקובץ גדול יותר, יכול להיות שתופיע השגיאה הזו. |
אם קוד הסטטוס של HTTP לא מופיע ברשימה הזו והודעת השגיאה לא עוזרת, כדאי לבדוק את מפרט פרוטוקול Web Push כדי לראות אם קוד הסטטוס מוזכר יחד עם תרחיש שבו אפשר להשתמש בקוד הסטטוס הזה.
בעיה בהצפנת המטען הייעודי (payload)
אם אתם מצליחים להפעיל הודעת Push (כלומר, לשלוח הודעה לשירות Push באינטרנט ולקבל קוד תגובה 201), אבל אירוע ה-Push אף פעם לא מופעל ב-Service Worker, בדרך כלל זה אומר שהדפדפן לא הצליח לפענח את ההודעה שהוא קיבל.
במקרה כזה, אמורה להופיע הודעת שגיאה במסוף DevTools של Firefox, כמו זו:

כדי לבדוק אם זו הבעיה ב-Chrome, מבצעים את הפעולות הבאות:
- עוברים אל about://gcm-internals ולוחצים על הכפתור "התחלת ההקלטה".

- מפעילים הודעת דחיפה ומחפשים את "יומן הכשלים בפענוח ההודעות".

אם יש בעיה בפענוח של המטען הייעודי (payload), תופיע שגיאה דומה לזו שמוצגת למעלה. (שימו לב להודעה AES-GCM decryption failed בעמודת הפרטים).
יש כמה כלים שיכולים לעזור לכם לנפות באגים בהצפנה, אם זו הבעיה:
בעיה בחיבור
אם לא מתקבל אירוע התראה ב-Service Worker ולא מופיעות שגיאות פענוח, יכול להיות שהדפדפן לא מצליח להתחבר לשירות ההתראות.
ב-Chrome, אפשר לבדוק אם הדפדפן מקבל הודעות באמצעות בדיקה של "יומן ההודעות שהתקבלו" בכתובת about://gcm-internals.

אם ההודעה לא מגיעה תוך זמן קצר, צריך לוודא שסטטוס החיבור של הדפדפן הוא CONNECTED:

אם הסטטוס הוא לא CONNECTED, יכול להיות שתצטרכו למחוק את הפרופיל הנוכחי וליצור פרופיל חדש. אם הבעיה עדיין לא נפתרה, אפשר לשלוח דוח על באג כמו שמוצע בהמשך.
שליחת דוחות על באגים
אם אף אחת מההצעות שלמעלה לא פתרה את הבעיה, ולא ברור מה מקור הבעיה, אתם יכולים לדווח על הבעיה בדפדפן שבו היא מתרחשת:
ב-Chrome, אפשר לדווח על הבעיה כאן: https://bugs.chromium.org/p/chromium/issues/list ב-Firefox, אפשר לדווח על הבעיה כאן: https://bugzilla.mozilla.org/
כדי לספק דוח איתור באגים טוב, עליך לספק את הפרטים הבאים:
- הדפדפנים שבהם בדקתם את הבעיה (למשל, Chrome גרסה 50, Chrome גרסה 51, Firefox גרסה 50, Firefox גרסה 51).
PushSubscriptionלדוגמה שממחיש את הבעיה.- צריך לכלול בקשות לדוגמה (כלומר, תוכן של בקשות לאחזור מהרשת לשירות התראות, כולל כותרות).
- חשוב לכלול גם דוגמאות לתשובות מבקשות לאחזור מהרשת.
אם אתם יכולים לספק דוגמה שניתן לשחזר, קוד מקור או אתר מארח, לעיתים קרובות זה מזרז את האבחון והפתרון של הבעיה.
לאן ממשיכים מכאן
- סקירה כללית על התראות מאפליקציות אינטרנט
- איך פועל Push
- רישום משתמש
- חוויית המשתמש של ההרשאות
- שליחת הודעות באמצעות ספריות של Web Push
- פרוטוקול Web Push
- טיפול באירועי Push
- הצגת התראה
- התנהגות ההתראות
- תבניות נפוצות של התראות
- שאלות נפוצות בנושא התראות
- בעיות נפוצות ודיווח על באגים