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