זיהוי

אתם יכולים לזהות אם המשתמש משתמש ב-PWA בדפדפן או במצב עצמאי. בדפדפנים מבוססי Chromium (ב-Android ובמחשב), אפשר גם לזהות את האירועים הבאים:

  • הסטטוס והתוצאה של תיבת הדו-שיח של ההזמנה להתקנה.
  • ההתקנה הסתיימה.
  • העברת ניווט מהדפדפן לחלון של אפליקציית ה-PWA ולהפך.
  • סטטוס ההתקנה של ה-PWA.
  • אפליקציה קשורה שהותקנה מחנות אפליקציות.

אתם יכולים להשתמש בנתונים האלה לצורכי ניתוח, כדי להבין את ההעדפות של המשתמשים ולהתאים אישית את חוויית השימוש שלהם. כדי לתעד את האירועים האלה, אפשר להשתמש בכלים כמו שאילתות מדיה, אירועים מ-window או באמצעות ממשקי ה-API של היכולות שמפורטים כאן.

זיהוי מצב התצוגה

כדי לעקוב אחרי האופן שבו משתמשים מריצים את אפליקציית ה-PWA שלכם, אתם יכולים להשתמש ב-matchMedia() כדי לבדוק את שאילתה המדיה display-mode.

function getPWADisplayMode() {
  if (document.referrer.startsWith('android-app://'))
    return 'twa';
  if (window.matchMedia('(display-mode: browser)').matches)
    return 'browser';
  if (window.matchMedia('(display-mode: standalone)').matches)
    return 'standalone';
  if (window.matchMedia('(display-mode: minimal-ui)').matches)
    return 'minimal-ui';
  if (window.matchMedia('(display-mode: fullscreen)').matches)
    return 'fullscreen';
  if (window.matchMedia('(display-mode: window-controls-overlay)').matches)
    return 'window-controls-overlay';

  return 'unknown';
}

window.addEventListener('DOMContentLoaded', () => {
  // Log launch display mode to analytics
  console.log('DISPLAY_MODE_LAUNCH:', getPWADisplayMode());
});

אם משתמשים בדוגמה הזו, חשוב להתאים את מצב התצוגה למניפסט של אפליקציית האינטרנט. לדוגמה, standalone,‏ minimal-ui או fullscreen. אפשר גם להתאים כמה שאילתות במחרוזת של שאילתה לגבי מדיה באמצעות תנאים מופרדים בפסיקים.

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

התקנת האפליקציה

כשמשתמש מאשר את ההודעה על ההתקנה בדפדפן, האירוע appinstalled מופעל בדפדפנים המבוססים על Chromium. אפשר להשתמש ב-handler הזה כדי להסיר קידומי מכירות של התקנות מתוך האפליקציה שהוספתם.

window.addEventListener('appinstalled', () => {
  // If visible, hide the install promotion
  hideInAppInstallPromotion();
  // Log install to analytics
  console.log('INSTALL: Success');
});

חשוב לזכור שבמכשירי Android עם WebAPK, האירוע מופעל כשהמשתמש מאשר את תיבת הדו-שיח, ולא אחרי שה-WebAPK נוצר ופורסם. יכול להיות שיחלוף עיכוב של כמה שניות עד שהאפליקציה תותקן במלואה.

בפרק Installation Prompt מוסבר איך לזהות אם הודעת ההתקנה זמינה ואילו אפשרויות הבחירה מוצגות למשתמש.

העברת סשנים

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

העברת ניווט בין כרטיסייה בדפדפן לבין חלון של אפליקציה לנייד.

ב-Android יש פריט תפריט שדומה לזה בדפדפן במחשב, שמעביר את הניווט לאפליקציה. במקרה כזה, כתובת ה-URL הנוכחית נפתחת, אבל היא תהיה ניווט לדף חדש באפליקציה.

בתמונה הבאה אפשר לראות את פריט התפריט ב-Android כשהאפליקציה כבר מותקנת.

ב-Chrome ל-Android מוצגת אפשרות בתפריט לפתיחת חלון ניווט חדש באפליקציית PWA.

העברה לאחר ההתקנה

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

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

זיהוי ההעברה

כדי לזהות את ההעברה בין הדפדפן לחלון, אפשר להשתמש בשאילתת מדיה:

window.addEventListener('DOMContentLoaded', () => {
  // Replace "standalone" with the display mode used in your manifest
  window.matchMedia('(display-mode: standalone)')
    .addEventListener('change', () => {
      // Log display mode change to analytics
      console.log('DISPLAY_MODE_CHANGED', getPWADisplayMode());
    });
});

בידוד האחסון ב-iOS וב-iPadOS

ב-iOS וב-iPadOS, אין ניווט או העברת כתובת URL בין הדפדפן לבין הסמל שהותקן. גם אם מדובר באותה אפליקציה ל-PWA, לכל סמל של אפליקציה ל-PWA שהמשתמש מתקין יהיה אחסון משלו, מבודד מהכרטיסייה של Safari ומסמלים אחרים. כשמשתמש פותח את הסמל שהותקן, לא מתבצע שיתוף של נפח האחסון עם Safari. אם אפליקציית ה-PWA שלכם דורשת התחברות, המשתמש יצטרך להתחבר שוב. אם האפליקציה נוספה למסך הבית כמה פעמים, לכל מופע של אפליקציית ה-PWA יהיה למשתמש סשן אחר.

תמיכה בדפדפנים

  • Chrome: אין תמיכה.
  • Edge: לא נתמך.
  • Firefox: לא נתמך.
  • Safari: לא נתמך.

מקור

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

אלה הערכים האפשריים של platform:

  • chrome_web_store: חנות האינטרנט של Google Chrome.
  • play: אפליקציות מ-Google Play (ל-Android ול-ChromeOS).
  • chromeos_play: ChromeOS Play.
  • webapp: אפליקציות אינטרנט.
  • windows: Microsoft Store (ב-Windows 10 וב-Windows 11).
  • f-droid: F-droid.
  • amazon: Amazon AppStore‏ (FireOS).

כשהמשתמש מתקין אפליקציה, אפשר להפנות אותו לאפליקציה קשורה אם מגדירים את השדה prefer_related_applications לערך true במניפסט. בהגדרה הזו, בדפדפנים תואמים תהליכי ההתקנה לא יותקנו את ה-PWA. במקום זאת, הם יפעילו התקנה מחנות האפליקציות מה-url או מה-id שציינתם ברשומה related_applications.

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

{
  ...
  "related_applications:" [
     {
       "platform": "play",
       "url": "https://play.google.com/..."
     }
  ],
  "prefer_related_applications": true
}

מודעות באנר חכמות של אפליקציות של Apple

דפדפן Safari לא תומך ב-related_applications, אבל הוא מציע באנרים חכמים של אפליקציות לאפליקציות ב-App Store. לכן, אם אתם רוצים לקדם אפליקציית PWA או אפליקציה אחרת שפרסמתם ב-App Store, אתם יכולים לכלול תגי מטא ב-HTML של אפליקציית ה-PWA כדי להזמין את המשתמש להתקין את האפליקציה (ראו את הקישור שצוין למעלה), או להעביר את הניווט אם האפליקציה כבר מותקנת.

השיטה getInstalledRelatedApps() מאפשרת לאתר לבדוק אם אפליקציית iOS/Android/למחשב או אפליקציית PWA מותקנות במכשיר של המשתמש.

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

כלים כמו BubbleWrap או PWA Builder, שמאפשרים לפרסם את אפליקציית ה-PWA בחנויות האפליקציות, כבר מוסיפים את המטא-נתונים הנדרשים כדי שאפשר יהיה להשתמש ב-getInstalledRelatedApps() באתר מיד. כדי לזהות אם כבר הותקנה אפליקציית PWA באמצעות getInstalledRelatedApps(), מגדירים את webapp בשדה related_applications במניפסט עם כתובת ה-URL של המניפסט:

...
"related_applications": [{
   "platform": "webapp",
   "url": "https://example.com/manifest.json",
}],
...

הפונקציה getInstalledRelatedApps() מחזירה מערך של אובייקטים של אפליקציות. אם המערך ריק, האפליקציה הרלוונטית לא מותקנת.

const relatedApps = await navigator.getInstalledRelatedApps();
const PWAisInstalled = relatedApps.length > 0;

זיהוי התקנה מחוץ להיקף של אפליקציית ה-PWA

ב-Chrome בגרסה 89 ל-Android, אפשר לזהות אם אפליקציית PWA מותקנת, גם מחוץ להיקף של אפליקציית ה-PWA. ב-PWA צריך להגדיר קובץ JSON בתיקייה /.well-known/, שמעניק הרשאה להיקף השני, כפי שמתואר במאמר הזה.

משאבים