דלג לתוכן הראשי

פיתוח ווב

התראות דחיפה ב-PWA: המדריך שמסביר גם למה זה לא עובד

דניאל אליהו בללי··8 דקות קריאה

איך מיישמים התראות דחיפה באפליקציית ווב מתקדמת, ומה הסיבות האמיתיות שהתראה לא מגיעה — Service Worker ישן, הרשאות, iOS ומצב חיסכון בסוללה.

התראות דחיפה הן אחת התכונות היחידות שהופכות אפליקציית ווב לכלי עבודה תפעולי: בלעדיהן, ליד חדש או ליקוי דחוף מחכים עד שמישהו יפתח את הדפדפן. גם היישום עצמו פשוט יחסית — אבל הדיבוג שלו קשה, כי הכישלון כמעט תמיד שקט.

שרשרת האספקה של התראה

  1. המשתמש מאשר הרשאת התראות בדפדפן.
  2. העמוד רושם Service Worker.
  3. נוצר מנוי דחיפה מול שירות הדחיפה של הדפדפן, עם מפתח VAPID ציבורי.
  4. המנוי (endpoint ומפתחות) נשמר בשרת שלכם.
  5. השרת חותם הודעה במפתח VAPID הפרטי ושולח לשירות הדחיפה.
  6. שירות הדחיפה מעיר את ה-Service Worker, שמציג התראה.

כל חוליה יכולה להיכשל בשקט. לכן השאלה הראשונה בדיבוג היא תמיד: באיזו חוליה עצרנו — ולא "למה ההתראה לא הגיעה".

הסיבה מספר אחת: Service Worker ישן במטמון

כשהשרת מדווח שליחה מוצלחת אך הטלפון שקט, החשוד המיידי הוא גרסה ישנה של קובץ ה-Service Worker שממשיכה לרוץ במכשיר. דפדפנים מחליפים worker רק כשהקובץ משתנה ואחרי שכל הלשוניות הישנות נסגרות. שתי מסקנות מעשיות: לשמור מספר גרסה מפורש בקובץ ולעדכן אותו בכל שינוי, ולא להגיש את הקובץ מהמטמון.

אחרי החלפת worker, כדאי לבטל מנוי קיים וליצור אותו מחדש. מנוי שנוצר מול worker ישן עלול להישאר תקף בשרת אך לא להוביל לתצוגה במכשיר.

iOS: כללים נפרדים

  • התראות עובדות רק כשהאפליקציה נוספה למסך הבית, לא בדפדפן רגיל.
  • הבקשה להרשאה חייבת לנבוע מפעולת משתמש ישירה, למשל לחיצה על כפתור.
  • נדרש קובץ manifest תקין עם display: standalone.
  • מחיקת האפליקציה מהמסך הבית מבטלת את המנוי — יש לטפל בקוד תגובה שמסמן מנוי פג.

צד השרת: לנקות מנויים מתים

שירותי דחיפה מחזירים 404 או 410 עבור מנוי שאינו קיים עוד. בלי מחיקה אוטומטית של רשומות כאלה, טבלת המנויים מתמלאת ברשומות מתות, שיעור ההצלחה המדווח יורד, וקשה להבחין בין תקלה אמיתית לבין רעש. כל שליחה צריכה לעדכן את מצב המנוי.

כפתור בדיקה — התכונה הכי משתלמת

כפתור "שלח התראת בדיקה" למנהלים, שמחזיר למסך את תוצאת השליחה בפועל (כמה נשלחו, כמה נכשלו ומה קוד השגיאה), מקצר תחקיר של שעה לשלושים שניות. הוא מפריד מיד בין תקלת שרת לתקלת מכשיר — וזו ההפרדה שהכי קשה לעשות בלעדיו.

כללי תוכן להתראות תפעוליות

כותרת קצרה שאומרת מה קרה, גוף עם הפרט המזהה, וקישור שפותח בדיוק את הרשומה הרלוונטית. התראה שדורשת חיפוש ידני אחרי הפתיחה תיתפס כרעש ותכובה. בעברית כדאי לוודא שהטקסט אינו נחתך במרכז מילה בתצוגה מקוצרת של מערכת ההפעלה.

סיכום

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

מאמרים נוספים