In che modo è possibile utilizzare componenti diversi per eseguire il rendering dei contenuti web all'interno delle app per Android.
La piattaforma Android è in circolazione da più di dieci anni e, fin dalle sue origini, ha avuto un ottimo supporto per il web. Era fornito con WebView, un componente che consente agli sviluppatori di utilizzare il web all'interno delle proprie app per Android. Inoltre, Android consente agli sviluppatori di integrare il proprio motore del browser nella piattaforma, favorendo la concorrenza e l'innovazione.
Gli sviluppatori possono includere il web nelle loro applicazioni per Android in molti modi. WebView viene spesso utilizzato per visualizzare gli annunci, come componente di layout utilizzato insieme agli elementi dell'interfaccia utente di Android o per il packaging di giochi HTML5. Custom Tabs consente agli sviluppatori di creare browser in-app e di offrire un'esperienza di navigazione senza interruzioni ai contenuti web di terze parti, mentre Attività web attendibile consente agli sviluppatori di utilizzare le proprie app web progressive (PWA) nelle app per Android, che possono essere scaricate dal Play Store.
Android WebView
WebView offre agli sviluppatori l'accesso a HTML, CSS e JavaScript moderni all'interno delle loro app per Android e consente di pubblicare i contenuti all'interno dell'APK o di ospitarli su internet. È uno dei componenti più flessibili e potenti di Android, che può essere utilizzato per la maggior parte dei casi d'uso in cui i contenuti web sono inclusi in un'app per Android. Dai servizi pubblicitari come AdMob alla creazione e alla pubblicazione di giochi HTML5 completi che utilizzano API moderne come WebGL.
Tuttavia, se utilizzato per creare un browser in-app o includere una PWA in un'applicazione per Android, WebView manca della sicurezza, delle funzionalità e delle capacità della piattaforma web.
La sfida del browser in-app
Nel tempo, sempre più sviluppatori hanno creato esperienze di browser incorporando contenuti di terze parti nella loro applicazione per Android, con l'obiettivo di creare un'esperienza più fluida per i propri utenti quando visitano siti web di terze parti. Queste esperienze sono diventate note come browser in-app.
WebView offre un'ampia assistenza per la tecnologia web moderna e supporta molte API web moderne, come WebGL. Tuttavia, WebView è principalmente un kit di strumenti per l'interfaccia utente web. Non è pensato e non supporta tutte le funzionalità della piattaforma web. Quando un'API ha già un'alternativa a livello di sistema operativo, come Web Bluetooth, o richiede l'implementazione dell'interfaccia utente del browser, come le notifiche push, potrebbe non essere supportata. Man mano che la piattaforma web si evolve e aggiunge altre funzionalità che erano disponibili solo per le app per Android, questo divario diventerà ancora più ampio. Poiché gli sviluppatori di app non controllano le funzionalità utilizzate per aprire contenuti di terze parti, WebView non è una buona scelta per i browser in-app o per aprire app web progressive. Anche se WebView avesse implementato il supporto per tutte le funzionalità della piattaforma web, gli sviluppatori dovrebbero comunque scrivere codice e implementare la propria UI per funzionalità come le autorizzazioni o le notifiche push, il che rende difficile ottenere coerenza per gli utenti.
Considerazioni sulla sicurezza per l'utilizzo di WebView come browser in-app
WebView concede all'applicazione di incorporamento l'accesso completo ai contenuti visualizzati, inclusi i cookie e il DOM. Si tratta di funzionalità potenti che richiedono un elevato livello di fiducia da parte degli utenti.
Poiché WebView non è pensato come un framework per la creazione di browser, non dispone delle funzionalità di sicurezza disponibili nei browser moderni.
Architettura multiprocesso e isolamento dei siti
I browser sono progettati per essere sicuri durante il rendering ed esecuzione di contenuti non attendibili. Per garantire che l'utente rimanga al sicuro durante la navigazione in contenuti potenzialmente inaffidabili o addirittura dannosi, i browser moderni utilizzano tecniche come l'architettura a più processi e l'isolamento dei siti.
Senza l'architettura a più processi, un arresto anomalo causato dalla pagina web può causare l'arresto anomalo dell'intera app del browser o una vulnerabilità può essere sfruttata per prendere il controllo dell'intero dispositivo. L'isolamento dei siti aggiunge un altro livello di sicurezza che rende più difficile per i siti non attendibili accedere e rubare informazioni da altri siti.
Fino ad Android 8.0 Oreo, il rendering di WebView utilizzava la stessa procedura dell'applicazione di incorporamento. Nelle versioni più recenti del sistema operativo e quando i dispositivi sono sufficientemente capaci, il renderer viene eseguito in un processo diverso. Tuttavia, un singolo processo è ancora condiviso tra tutte le pagine e le istanze WebView in esecuzione, rendendo impossibile implementare completamente l'isolamento dei siti.
La mancanza di un'architettura multiprocesso e dell'isolamento dei siti non è un problema per le applicazioni che visualizzano contenuti di proprietà e attendibili, ma può essere un problema per le applicazioni che eseguono contenuti di terze parti non attendibili, come i browser in-app, e lascia gli utenti esposti a vulnerabilità come Meltdown e Spectre, che potrebbero essere utilizzate per rubare cookie, dati bancari, informazioni personali e altro ancora.
Indicatori della UI sicura
È inoltre importante fornire agli utenti indicatori di sicurezza efficaci e i browser si impegnano molto e sono in continua evoluzione in questo ambito. Tuttavia, WebView non dispone di un'API per verificare se la connessione di un sito è sicura, che consenta agli sviluppatori di applicazioni di creare indicatori di sicurezza affidabili. La mancanza di un'API di questo tipo potrebbe causare, ad esempio, che un URL visualizzato nella barra degli indirizzi non corrisponda alla pagina mostrata all'utente, anche tramite connessioni HTTPS sicure.
Un'altra opzione a disposizione degli sviluppatori è l'inserimento di un motore del browser nell'applicazione. Oltre a portare a un aumento delle dimensioni dell'applicazione, questo approccio è complesso e richiede tempo.
Schede personalizzate come soluzione per i browser in-app
Le schede personalizzate sono state introdotte in Chrome 45 e consentono agli sviluppatori di utilizzare una scheda del browser predefinito dell'utente all'interno della loro applicazione. Le schede personalizzate sono state lanciate inizialmente da Chrome e quindi erano note come "schede personalizzate di Chrome". Attualmente è un'API per Android e la maggior parte dei browser supporta le schede personalizzate, tra cui Chrome, Firefox, Edge e Samsung Internet, quindi è più appropriato chiamarle semplicemente "schede personalizzate".
Custom Tabs aiuta gli sviluppatori a integrare facilmente i contenuti web nell'esperienza della loro app. Inoltre, consentono agli sviluppatori di personalizzare l'attività in cui vengono mostrati i contenuti web, ad esempio il colore della barra degli strumenti, i pulsanti di azione, l'animazione di transizione e altro ancora.
Offrono inoltre funzionalità che in precedenza non erano disponibili quando si utilizzava WebView o si incorporava un motore di browser. Poiché il browser in-app è basato sul browser dell'utente, Custom Tabs condivide lo spazio di archiviazione con il browser, quindi gli utenti non devono accedere di nuovo ai loro siti web preferiti ogni volta che una delle loro app installate avvia una sessione di navigazione in-app.
A differenza delle visualizzazioni web, Custom Tabs supporta tutte le API e le funzionalità della piattaforma web supportate dal browser che la esegue.
Aprire app web progressive utilizzando l'Attività web attendibile
Le app web progressive offrono sul web molti comportamenti e funzionalità che in precedenza erano disponibili solo per le app specifiche della piattaforma. Con l'introduzione del comportamento simile a un'app, è aumentato il desiderio degli sviluppatori di riutilizzare queste esperienze su Android e hanno iniziato a chiedere modi per integrare le PWA nelle loro app.
Custom Tabs supporta tutte le API e le funzionalità web moderne, ma, poiché è stata progettata principalmente per aprire contenuti di terze parti, in alto è presente una barra degli strumenti che indica agli utenti l'URL che stanno visitando, nonché l'icona a forma di lucchetto che indica se il sito è sicuro. Quando apri la propria esperienza di un'app, la barra degli strumenti impedisce all'applicazione di sembrare integrata con il sistema operativo.
Le Attività web attendibili sono state introdotte in Chrome 72 e consentono agli sviluppatori di utilizzare le loro PWA all'interno di un'app per Android. Il relativo protocollo è simile a quello di Custom Tabs, ma introduce API che consentono agli sviluppatori di verificare (tramite Digital Asset Links) di controllare sia l'app per Android sia l'URL aperto e di rimuovere la barra degli URL quando entrambe le condizioni sono vere.
Sono state inoltre introdotte API per la creazione di schermate iniziali all'apertura della PWA o per la delega delle notifiche web al codice Android. Altre funzionalità, come il supporto di Fatturazione Google Play, saranno disponibili a breve.
Poiché gli URL aperti in Attività web attendibili dovrebbero essere PWA e avere un insieme di comportamenti e caratteristiche di prestazioni, Attività web attendibili introduce criteri di qualità per le PWA che vengono aperte al suo interno.
Limitazioni delle soluzioni attuali
I feedback degli sviluppatori hanno evidenziato la necessità di una compatibilità della piattaforma di Custom Tabs combinata con la flessibilità di WebView per poter, ad esempio, accedere al DOM o iniettare JavaScript nei browser in-app.
Le schede personalizzate sono in pratica una scheda visualizzata dal browser dell'utente, con un'interfaccia utente personalizzata o senza interfaccia utente. Ciò significa che il browser deve soddisfare le aspettative dell'utente in termini di privacy e sicurezza nei confronti del browser, rendendo alcune di queste funzionalità impossibili.
Il team di Web su Android di Google sta valutando alternative e sperimentando soluzioni per risolvere questi casi d'uso. Continua a seguirci per scoprire ulteriori dettagli.
Riepilogo
WebView è utile quando un'applicazione ha bisogno di HTML, CSS e JavaScript all'interno della propria app per Android, ma non utilizza funzionalità e funzionalità più avanzate disponibili sul web moderno, come le notifiche push, il Bluetooth web e altre. Non è consigliabile quando apri contenuti progettati per la piattaforma web moderna, in quanto potrebbero non essere visualizzati nel modo previsto dallo sviluppatore. WebView non è consigliato per la creazione di browser in-app. D'altra parte, la visualizzazione di contenuti web proprietari è un'area in cui WebView dà il meglio di sé.
L'Attività web attendibile deve essere utilizzata quando gli sviluppatori vogliono eseguire il rendering della propria app web progressiva a schermo intero all'interno della propria applicazione per Android. Può essere utilizzata come unica attività nell'app o insieme ad altre attività Android.
Le schede personalizzate sono il modo consigliato per aprire contenuti di terze parti progettati per la piattaforma web, noti anche come browser in-app.