כשנתקלים בבעיה בדחיפה של אינטרנט, יכול להיות קשה לנפות את הבאגים שגרמו לבעיה או לקבל עזרה. במאמר הזה נפרט כמה מהבעיות הנפוצות, ומה צריך לעשות אם מצאתם באג ב-Chrome או ב-Firefox.
לפני שאנחנו מתחילים בדחיפה לניפוי באגים, יכול להיות שאתם נתקלים בבעיות בניפוי באגים ב-Service Workers עצמם, שהקובץ לא מתעדכן, לא מצליח לבצע רישום או סתם התנהגות חריגה. יש מסמך מדהים על ניפוי באגים ב-Service Workers מומלץ מאוד לבדוק אם אתם רק התחלתם לפתח קובצי שירות (service worker).
יש שני שלבים נפרדים שצריך לסמן כשמפתחים ובודקים את דחיפת האינטרנט. לכל אחד מהם יש קבוצה משלו של בעיות נפוצות:
- שליחת הודעה: מוודאים ששליחת ההודעות מתבצעת בהצלחה.
אתם אמורים לקבל קוד HTTP מסוג 201. אם לא :
- חיפוש שגיאות הרשאה: אם קיבלתם הודעת שגיאה להרשאה, עיינו בקטע 'בעיות בהרשאות'.
- שגיאות API אחרות: אם קיבלתם תגובה של קוד סטטוס שאינו 201, עיינו בקטע קודי סטטוס HTTP כדי לקבל הנחיות לגבי הגורם לבעיה.
- קבלת הודעה: אם הצלחתם לשלוח הודעה אבל ההודעה לא התקבלה בדפדפן:
- בדיקה אם יש בעיות בהצפנה: כדאי לעיין בקטע בעיות בהצפנה של מטען ייעודי.
- בודקים אם יש בעיות בחיבור: אם הבעיה ב-Chrome, יכול להיות שמדובר בחיבור. למידע נוסף, קראו את הקטע בעיות בחיבור.
אם אתם לא מצליחים לשלוח ולקבל הודעות בדחיפה, והקטעים הרלוונטיים במסמך הזה לא עוזרים לנפות את הבאגים שגרמו לבעיה, ייתכן שמצאתם באג במנגנון הדחיפה עצמו. במקרה כזה, כדאי לעיין בקטע העלאת דוחות על באגים ולהגיש דוח על באג עם כל המידע הנדרש כדי לזרז את תהליך תיקון הבאגים.
אחד הדברים שאני רוצה לציין לפני שנתחיל הוא ש-Firefox ו-Mozilla AutoPush Service כוללים הודעות שגיאה נהדרות. אם נתקעתם ולא בטוחים מה הבעיה, נסו לבדוק ב-Firefox אם קיבלתם הודעת שגיאה מועילה יותר.
בעיות בהרשאות
בעיות הרשאה הן אחת מהבעיות הנפוצות ביותר שמפתחים נתקלים בהן כשהם מתחילים לעבוד עם Web Push. בדרך כלל זו בעיה בהגדרת מפתחות שרת האפליקציות (שנקראים גם מפתחות 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
Firefox ו-Mozilla AutoPush מספקים קבוצה ידידותית של הודעות שגיאה לבעיות עם Authorization
.
אם הכותרת Authorization
לא כלולה בבקשת ה-Push, תקבלו גם את תגובת השגיאה Unauthorized
מ-Mozilla AutoPush.
{
"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 משירות Push. בהמשך מופיעה רשימה של קודי מצבים של HTTP והמשמעות שלהם בהקשר של Web Push.
קוד סטטוס | תיאור |
---|---|
429 | יותר מדי בקשות. שרת האפליקציות הגיע למגבלת הקצב של יצירת הבקשות באמצעות שירות Push. התשובה מהשירות צריכה לכלול את הכותרת 'Retry-After' כדי לציין את משך הזמן לפני שאפשר יהיה לשלוח בקשה נוספת. |
400 | בקשה לא חוקית. אחת מהכותרות לא חוקית או בפורמט שגוי. |
404 | לא נמצא במקרה כזה, עליך למחוק את ה-PushSubscription מהקצה העורפי ולהמתין להזדמנות כדי לרשום מחדש את המשתמש. |
410 | נעלם. המינוי כבר לא בתוקף וצריך להסיר אותו מהצד שלך. אפשר לשחזר את הערך הזה באמצעות קריאה ל-'unsubscribe() ' ב-'PushSubscription'. |
413 | המטען הייעודי גדול מדי. המטען הייעודי (payload) המינימלי ששירות דחיפה צריך לתמוך בו הוא 4,096 בייטים (או 4kb). כל גודל גדול יותר יכול לגרום לשגיאה הזו. |
אם קוד הסטטוס של HTTP לא מופיע ברשימה הזו והודעת השגיאה לא מועילה, בדקו את המפרט של פרוטוקול Web Push Protocol כדי לראות אם יש הפניה לקוד הסטטוס יחד עם תרחיש שבו אפשר להשתמש בקוד הסטטוס הזה.
בעיה בהצפנת מטען ייעודי (payload)
אם הצלחתם להפעיל הודעת Push (כלומר, לשלוח הודעה לשירות Push מהאפליקציה ולקבל קוד תגובה 201), אבל אירוע ה-Push לא מופעל אף פעם ב-Service Worker, המשמעות היא בדרך כלל שהדפדפן לא הצליח לפענח את ההודעה שהתקבלה.
במקרה כזה, אמורה להופיע הודעת שגיאה במסוף כלי הפיתוח של Firefox, כך:
כדי לבדוק אם זו הבעיה ב-Chrome, מבצעים את הפעולות הבאות:
- עבור אל about://gcm-internals ולחץ על הלחצן "התחל הקלטה".
- מפעילים הודעת Push ובודקים את הקטע 'יומן כישלונות של פענוח הודעות'.
אם יש בעיה בפענוח של המטען הייעודי (payload), תופיע שגיאה שדומה לזו שמוצגת למעלה. (שימו לב להודעה AES-GCM decryption failed
בעמודת הפרטים).
יש כמה כלים שיכולים לעזור לנפות באגים בהצפנה אם זו הבעיה:
בעיות בחיבור
אם לא מתקבל אירוע Push ב-Service Worker ולא מופיעות שגיאות פענוח, ייתכן שהדפדפן לא מצליח להתחבר לשירות Push.
ב-Chrome, כדי לבדוק אם הדפדפן מקבל הודעות, אפשר לבדוק את 'קבלת יומן הודעות' (sic) ב-about://gcm-internals
.
אם ההודעה לא מגיעה בזמן, כדאי לוודא שסטטוס החיבור של הדפדפן הוא CONNECTED
:
אם הוא לא 'מחובר', ייתכן שתצטרכו למחוק את הפרופיל הנוכחי וליצור פרופיל חדש. אם הבעיה עדיין לא נפתרה, כדאי לשלוח דוח על באג כמו שמתואר בהמשך.
העלאת דוחות על באגים
אם אף אחת מהאפשרויות שלמעלה לא עוזרת לפתור את הבעיה, ואין סימן לבעיה, אפשר לפרט לגבי הדפדפן שבו נתקלת בבעיה:
ב-Chrome, צריך להעלות את הבעיה כאן: https://bugs.chromium.org/p/chromium/issues/list ב-Firefox, מומלץ להעלות את הבעיה בכתובת https://bugzilla.mozilla.org/
כדי לספק דוח טוב על באג, עליך לספק את הפרטים הבאים:
- דפדפנים שבדקתם (למשל, Chrome גרסה 50, גרסה 51 של Chrome, Firefox גרסה 50, גרסה 51 של Firefox).
- דוגמה
PushSubscription
שממחישה את הבעיה. - כוללים בקשות לדוגמה (כלומר תוכן של בקשות רשת לשירות דחיפה, כולל כותרות).
- יש לכלול גם תגובות לדוגמה מבקשות רשת.
אם אפשר לספק דוגמה שחוזרת על עצמה, קוד מקור או אתר אינטרנט מתארח, לרוב היא מזרזת את האבחון והפתרון של הבעיה.
השלבים הבאים
- סקירה כללית של התראות באינטרנט
- איך Push פועל
- הרשמה של משתמש למינוי
- חוויית המשתמש עם ההרשאות
- שליחת הודעות באמצעות ספריות Push באינטרנט
- פרוטוקול Web Push
- טיפול באירועי Push
- הצגת התראה
- התנהגות התראות
- תבניות נפוצות של התראות
- שאלות נפוצות בנושא התראות בדחיפה
- בעיות נפוצות ובאגים בדיווח