איך אפשר להשתמש ברכיבים שונים כדי להציג תוכן מהאינטרנט באפליקציות ל-Android.
פלטפורמת Android קיימת כבר יותר מעשר שנים, ומאז תחילת דרכה היא תומכת היטב באינטרנט. הוא הגיע עם WebView, רכיב שמאפשר למפתחים להשתמש באינטרנט בתוך האפליקציות שלהם ל-Android. בנוסף, Android מאפשר למפתחים להוסיף לפלטפורמה מנוע דפדפן משלהם, וכך לעודד תחרות וחדשנות.
למפתחים יש הרבה דרכים לכלול את האינטרנט באפליקציות שלהם ל-Android. WebView משמש לעיתים קרובות לרינדור מודעות, כרכיב פריסה שמשמש יחד עם רכיבי ממשק המשתמש של Android, או לחבילת משחקים מסוג HTML 5. הכרטיסיות בהתאמה אישית מאפשרות למפתחים ליצור דפדפנים מובנים באפליקציות ולספק חוויית ניווט חלקה לתוכן אינטרנט של צד שלישי. התכונה 'פעילות אינטרנט מהימנה' מאפשרת למפתחים להשתמש באפליקציות ה-PWA שלהם באפליקציות ל-Android, שניתן להוריד מחנות Play.
Android WebView
רכיב WebView מעניק למפתחים גישה ל-HTML, ל-CSS ול-JavaScript מודרניים באפליקציות שלהם ל-Android, ומאפשר לשלוח תוכן בתוך קובץ ה-APK או לארח אותו באינטרנט. זהו אחד מהרכיבים הגמישים והחזקים ביותר ב-Android, שאפשר להשתמש בו ברוב התרחישים שבהם תוכן אינטרנט נכלל באפליקציית Android. החל משירותי פרסום כמו AdMob ועד לפיתוח ולפרסום משחקי HTML5 מלאים שמשתמשים ב-APIs מודרניים כמו WebGL.
עם זאת, כשמשתמשים ב-WebView כדי ליצור דפדפן בתוך האפליקציה או לכלול PWA באפליקציה ל-Android, הוא חסר את האבטחה, התכונות והיכולות של פלטפורמת האינטרנט.
האתגר של דפדפן באפליקציה
עם הזמן, יותר ויותר מפתחים יצרו חוויות משתמש בדפדפן שמשלבות תוכן של צד שלישי באפליקציה שלהם ל-Android, במטרה ליצור חוויה חלקה יותר למשתמשים כשהם מנווטים לאתרים של צד שלישי. הפעילויות האלה נודעו בתור דפדפנים בתוך האפליקציה.
ל-WebView יש תמיכה נרחבת בסכימת הטכנולוגיות המודרנית של האינטרנט, והוא תומך בממשקי API רבים של האינטרנט המודרני, כמו WebGL. עם זאת, WebView הוא בעיקר ערכת כלים לממשק משתמש באינטרנט. היא לא מיועדת ותומכת בכל התכונות של פלטפורמת האינטרנט. יכול להיות ש-API שכבר יש לו חלופה ברמת מערכת ההפעלה, כמו Web Bluetooth, או שצריך להטמיע את ממשק המשתמש של הדפדפן, כמו התראות דחיפה, לא יהיה נתמך. ככל שפלטפורמת האינטרנט תתפתח ויתווספו לה עוד תכונות שהיו זמינות רק לאפליקציות ל-Android, הפער הזה יגדל עוד יותר. מפתחי האפליקציות לא יכולים לקבוע אילו תכונות ישמשו לפתיחת תוכן של צד שלישי, ולכן WebView הוא בחירה לא טובה לדפדפנים מובנים באפליקציות או לפתיחת אפליקציות Progressive Web Apps. גם אם תהיה ב-WebView תמיכה בכל התכונות של פלטפורמת האינטרנט, המפתחים עדיין יצטרכו לכתוב קוד ולהטמיע ממשק משתמש משלהם לפונקציונליות כמו הרשאות או התראות דחיפה, ולכן יהיה קשה להשיג עקביות למשתמש.
שיקולים אבטחה לשימוש ב-WebView כדפדפן באפליקציה
רכיב WebView מעניק לאפליקציה המטמיעה גישה מלאה לתוכן שעבר רינדור, כולל קובצי cookie ו-DOM. אלה תכונות חזקות שדורשות רמה גבוהה של אמון מצד המשתמשים.
מאחר ש-WebView לא מיועד כמסגרת ליצירת דפדפנים, הוא חסר תכונות אבטחה שזמינות בדפדפנים מודרניים.
ארכיטקטורה של תהליכים מרובים ובידוד של אתרים
הדפדפנים נועדו להיות מאובטחים בזמן עיבוד והרצה של תוכן לא מהימן. כדי לוודא שהמשתמשים יישארו בטוחים בזמן הניווט בתוכן שעלול להיות לא מהימן או אפילו זדוני, בדפדפנים מודרניים נעשה שימוש בטכניקות כמו ארכיטקטורה של תהליכים מרובים ובידוד אתרים.
בלי הארכיטקטורה של תהליכים מרובים, קריסה שנגרמת על ידי דף האינטרנט עלולה לגרום לקריסה של כל אפליקציית הדפדפן, או שאפשר לנצל נקודת חולשה כדי להשתלט על כל המכשיר. בידוד אתרים מוסיף שכבת אבטחה נוספת שמקשה על אתרים לא מהימנים לגשת למידע מאתרים אחרים ולגנוב אותו.
עד ל-Android 8.0 Oreo, הכלי לרינדור של WebView השתמש באותו תהליך כמו אפליקציית הטמעת הקוד. בגרסאות חדשות יותר של מערכת ההפעלה, ובמכשירים עם יכולות מתאימות, ה-renderer פועל בתהליך אחר. עם זאת, עדיין יש תהליך אחד שמשותף בין כל הדפים ותרחישי WebView שבהם הם פועלים, ולכן אי אפשר להטמיע בידוד אתר באופן מלא.
היעדר ארכיטקטורה של תהליכים מרובים וניתוק אתרים לא מהווה בעיה לאפליקציות שמריצות תוכן שבבעלותן והן סומכות עליו, אבל הוא עלול להוות בעיה לאפליקציות שמריצות תוכן לא מהימן של צד שלישי, כמו דפדפנים בתוך האפליקציה. בנוסף, הוא משאיר את המשתמשים חשופים לנקודות חולשה כמו Meltdown ו-Spectre, שאפשר להשתמש בהן כדי לגנוב קובצי cookie, פרטי בנק, מידע אישי ועוד.
אינדיקטורים לממשק משתמש מאובטח
חשוב גם לספק למשתמשים אינדיקטורים טובים לאבטחה, והדפדפנים משקיעים הרבה מאמצים ומתפתחים כל הזמן בתחום הזה. עם זאת, ב-WebView אין ממשק API לבדיקה אם החיבור לאתר מאובטח, שמאפשר למפתחי אפליקציות ליצור אינדיקטורים מהימנים של אבטחה. למשל, אם אין API כזה, יכול להיות שכתובת URL שמוצגת בסרגל הכתובות לא תתאים לדף שמוצג למשתמש, גם בחיבור HTTPS מאובטח.
אפשרות נוספת שזמינה למפתחים היא הטמעת מנוע דפדפן באפליקציה. בנוסף לכך שהגישה הזו מובילה להגדלת גודל האפליקציה, היא מורכבת ותובעת זמן רב.
כרטיסיות בהתאמה אישית כפתרון לדפדפנים בתוך האפליקציה
הכרטיסיות המותאמות אישית הושקעו ב-Chrome 45 ומאפשרות למפתחים להשתמש בכרטיסייה מדפדפן ברירת המחדל של המשתמש כחלק מהאפליקציה שלהם. התכונה 'כרטיסיות מותאמות אישית' הושקה במקור על ידי Chrome, ולכן נקראה 'כרטיסיות מותאמות אישית ב-Chrome'. היום הוא Android API, והדפדפנים הפופולריים ביותר תומכים בכרטיסיות מותאמות, כולל Chrome, Firefox, Edge ו-Samsung Internet, כך שעדיף פשוט לקרוא לו 'כרטיסיות מותאמות'.
הכרטיסיות בהתאמה אישית עוזרות למפתחים לשלב תוכן אינטרנט בחוויית השימוש באפליקציה בצורה חלקה. בנוסף, הם מאפשרים למפתחים להתאים אישית את הפעילות שבה מוצג תוכן האינטרנט, על ידי התאמה אישית של צבע סרגל הכלים, לחצני הפעולה, אנימציית המעבר ועוד.
בנוסף, הן מציעות תכונות שלא היו זמינות בעבר כשהשתמשתם ב-WebView או הטמעתם מנוע דפדפן. מאחר שהדפדפן באפליקציה פועל באמצעות הדפדפן של המשתמש, הכרטיסיות בהתאמה אישית משתפות אחסון עם הדפדפן, כך שמשתמשים לא צריכים להתחבר מחדש לאתרים המועדפים עליהם בכל פעם שאחד מהאפליקציות המותקנות שלהם מתחיל סשן גלישה באפליקציה.
בניגוד ל-WebViews, בכרטיסיות בהתאמה אישית יש תמיכה בכל התכונות והממשקי ה-API של פלטפורמת האינטרנט שנתמכים בדפדפן שמפעיל אותן.
פתיחת אפליקציות Progressive Web באמצעות Trusted Web Activity
אפליקציות Progressive Web App מביאות לאינטרנט התנהגויות ויכולות רבות שהיו זמינות בעבר רק לאפליקציות ספציפיות לפלטפורמה. עם ההשקה של התנהגות כמו אפליקציה, המפתחים רצו יותר להשתמש שוב בחוויות האלה ב-Android, והם התחילו לבקש דרכים לשלב אפליקציות אינטרנט ב-PWA באפליקציות שלהם.
בכרטיסיות בהתאמה אישית יש תמיכה בכל היכולות והממשקי ה-API המודרניים של האינטרנט, אבל מכיוון שהן תוכננו בעיקר לפתיחת תוכן של צד שלישי, יש בהן סרגל כלים בחלק העליון שמציין למשתמשים לאיזו כתובת URL הם נכנסים, וגם את סמל המנעול שמציין אם האתר מאובטח. כשפותחים את הממשק של האפליקציה, סרגל הכלים מונע מהאפליקציה להיראות כחלק ממערכת ההפעלה.
פעילויות אינטרנט מהימנות הוצגו ב-Chrome 72 ומאפשרות למפתחים להשתמש ב-PWA שלהם בתוך אפליקציה ל-Android. הפרוטוקול שלה דומה לפרוטוקול של כרטיסיות בהתאמה אישית, אבל הוא כולל ממשקי API שמאפשרים למפתחים לאמת (באמצעות קישורי נכסים דיגיטליים) שהם שולטים גם באפליקציה ל-Android וגם בכתובת ה-URL שנפתחת, ולהסיר את סרגל כתובות ה-URL כששניהם נמצאים בשליטתם.
הם גם הציגו ממשקי API ליצירת מסכי פתיחה כשפותחים את ה-PWA, או להענקת גישה לקוד של Android לטיפול בהתראות אינטרנט. בקרוב נוסיף תכונות נוספות, כמו תמיכה בחיוב ב-Play.
מאחר שכתובות URL שנפתחות בפעילות מהימנה באינטרנט צפויות להיות אפליקציות PWA, ויש להן קבוצה של התנהגויות ומאפייני ביצועים, הפעילות המהימנה באינטרנט כוללת קריטריונים של איכות לאפליקציות PWA שנפתחות בתוכה.
המגבלות של הפתרונות הקיימים
לפי המשוב מהמפתחים, יש צורך בתאימות הפלטפורמה של כרטיסי Custom יחד עם הגמישות של WebView, כדי שיוכלו, למשל, לגשת ל-DOM או להחדיר JavaScript לדפדפנים שלהם באפליקציה.
כרטיסיות בהתאמה אישית הן למעשה כרטיסייה שמוצגת על ידי הדפדפן של המשתמש, עם ממשק משתמש מותאם אישית או ללא ממשק משתמש בכלל. כלומר, הדפדפן צריך לעמוד בציפיות של המשתמשים לגבי הפרטיות והאבטחה בדפדפן, ולכן חלק מהתכונות האלה לא זמינות.
צוות האינטרנט ב-Android ב-Google בוחן חלופות ומנסה פתרונות כדי לפתור את התרחישים האלה. פרטים נוספים בקרוב.
סיכום
WebView שימושי כשאפליקציה צריכה HTML, CSS ו-JavaScript בתוך אפליקציית Android שלה, אבל לא משתמשת בתכונות וביכולות מתקדמות יותר שזמינות באינטרנט המודרני, כמו התראות דחיפה, Web Bluetooth ועוד. לא מומלץ להשתמש באפשרות הזו כשפותחים תוכן שתוכנן לפלטפורמת האינטרנט המודרנית, כי יכול להיות שהוא לא יוצג כפי שהמפתח התכוון. לא מומלץ להשתמש ב-WebView ליצירת דפדפנים בתוך האפליקציה. לעומת זאת, הצגת תוכן אינטרנט מקורי היא תחום שבו ממשקי WebView פורחים.
צריך להשתמש בפעילות מאובטחת באינטרנט כשהמפתחים רוצים להציג Progressive Web App משלהם במסך מלא בתוך האפליקציה שלהם ל-Android. אפשר להשתמש בה כפעילות היחידה באפליקציה או יחד עם פעילויות אחרות ב-Android.
כרטיסיות בהתאמה אישית הן הדרך המומלצת לפתיחת תוכן של צד שלישי שמיועד לפלטפורמת האינטרנט, שנקרא גם דפדפנים בתוך האפליקציה.