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