In che modo è possibile usare diversi componenti per visualizzare i contenuti web all'interno delle app per Android.
La piattaforma Android esiste da più di dieci anni e sin dall'inizio ha avuto un ottimo supporto per il web. È fornito con WebView, un componente che consente agli sviluppatori di usare il web all'interno delle loro app Android. Inoltre, Android consente agli sviluppatori di integrare il proprio motore del browser nella piattaforma, promuovendo la concorrenza e l'innovazione.
Gli sviluppatori possono includere il web nelle loro app Android in molti modi. WebView viene spesso utilizzato per il rendering degli annunci, come componente di layout usato insieme a elementi UI di Android o per la creazione di pacchetti di giochi HTML 5. Le schede personalizzate consentono agli sviluppatori di creare browser in-app e fornire un'esperienza di navigazione senza soluzione di continuità nei contenuti web di terze parti, mentre l'Attività web attendibile consente agli sviluppatori di utilizzare le loro app web progressive (PWA) nelle app per Android, che possono essere scaricate dal Play Store.
Android WebView
WebView permette agli sviluppatori di accedere a codice HTML, CSS e JavaScript moderno all'interno delle loro app Android e consente di spedire i contenuti all'interno dell'APK o di essere ospitati 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. Dalla gestione di servizi pubblicitari come AdMob alla creazione e alla distribuzione 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 Android, WebView non dispone della sicurezza, delle funzionalità e delle funzionalità della piattaforma web.
La sfida del browser in-app
Nel corso del tempo, sempre più sviluppatori hanno creato esperienze nel browser che incorporano contenuti di terze parti nelle loro applicazioni Android, con l'obiettivo di creare un'esperienza più fluida per gli utenti quando navigano su siti web di terze parti. Queste esperienze sono diventate note come browser in-app.
WebView offre un ampio supporto per lo stack tecnico web moderno e supporta molte API web moderne, come WebGL. Tuttavia, WebView è principalmente un toolkit per l'interfaccia utente web. Non ha lo scopo di, e non supporta tutte le funzionalità della piattaforma web,. Quando un'API dispone già di un'alternativa a livello di sistema operativo, come Web Bluetooth, o richiede l'implementazione dell'interfaccia utente del browser, ad esempio le notifiche push, l'API potrebbe non essere supportata. Con l'evoluzione della piattaforma web e l'aggiunta di nuove funzionalità disponibili solo nelle app Android, questo divario diventerà sempre più grande. Poiché gli sviluppatori di app non controllano quali funzionalità vengono utilizzate durante l'apertura di contenuti di terze parti, WebView è una scelta sbagliata per i browser in-app o per l'apertura di app web progressive. Anche se WebView implementasse 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, rendendo difficile ottenere coerenza per gli utenti.
Considerazioni di sicurezza per l'utilizzo di WebView come browser in-app
WebView offre all'applicazione dell'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 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 e l'esecuzione di contenuti non attendibili. Per garantire la sicurezza dell'utente durante la navigazione di contenuti potenzialmente inaffidabili o addirittura dannosi, i browser moderni utilizzano tecniche quali l'utilizzo di un'architettura multi-processo e l'isolamento dei siti.
Senza l'architettura multi-processo, un arresto anomalo causato dalla pagina web può causare l'arresto anomalo dell'intera app del browser oppure sfruttare una vulnerabilità per assumere il controllo dell'intero dispositivo. L'isolamento dei siti aggiunge un ulteriore livello di sicurezza che rende più difficile per i siti inaffidabili accedere e rubare informazioni da altri siti.
Fino ad Android 8.0 Oreo, il renderer WebView utilizzava lo stesso processo dell'applicazione Embedder. Nelle versioni più recenti del sistema operativo e quando i dispositivi dispongono di funzionalità sufficienti, il renderer viene eseguito in un processo diverso. Tuttavia, un singolo processo viene comunque condiviso tra tutte le pagine e le istanze WebView in esecuzione, rendendo impossibile l'implementazione completa dell'isolamento dei siti.
La mancanza di un'architettura multi-processo e l'isolamento dei siti non è un problema per le applicazioni che visualizzano contenuti di loro proprietà e di cui si fidano, 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 sicuri dell'interfaccia utente
È inoltre importante fornire indicatori di sicurezza efficaci agli utenti, e i browser si impegnano a fondo 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, la mancata corrispondenza tra un URL visualizzato nella barra degli indirizzi e la pagina mostrata all'utente, anche tramite connessioni HTTPS sicure.
Un'altra opzione a disposizione degli sviluppatori è l'incorporamento di un motore del browser nella loro applicazione. Oltre a portare a un aumento delle dimensioni delle applicazioni, questo approccio è complesso e richiede molto 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 come parte della loro applicazione. Le schede personalizzate sono state lanciate originariamente da Chrome, quindi erano chiamate "schede personalizzate di Chrome". Attualmente è un'API per Android e i browser più diffusi supportano le schede personalizzate, ad esempio Chrome, Firefox, Edge e Samsung Internet, quindi è più appropriato chiamarla semplicemente "Schede personalizzate".
Le schede personalizzate consentono agli sviluppatori di integrare perfettamente i contenuti web nell'esperienza della loro app. Consentono inoltre agli sviluppatori di personalizzare l'attività in cui vengono visualizzati i contenuti web, personalizzando il colore della barra degli strumenti, i pulsanti di azione, l'animazione delle transizioni e altro ancora.
Offrono inoltre funzionalità che in precedenza non erano disponibili durante l'utilizzo di WebView o l'incorporamento di un motore del browser. Poiché il browser in-app si basa sul browser dell'utente, le schede personalizzate condividono lo spazio di archiviazione con il browser, così gli utenti non devono eseguire nuovamente l'accesso ai siti web preferiti ogni volta che una delle app installate avvia una sessione di navigazione in-app.
A differenza dei componenti WebView, le schede personalizzate supportano tutte le funzionalità e le API della piattaforma web supportate dal browser su cui sono basate.
Apri app web progressive utilizzando Attività web attendibile
Le app web progressive offrono molti comportamenti e funzionalità che una volta erano disponibili sul web solo per le app specifiche della piattaforma. Con l'introduzione di un comportamento simile alle app, è aumentato il desiderio da parte degli sviluppatori di riutilizzare queste esperienze su Android e gli sviluppatori hanno iniziato a chiedere modi per integrare le PWA nelle loro app.
Le schede personalizzate supportano tutte le funzionalità web e le API moderne. Tuttavia, poiché sono state progettate principalmente per aprire contenuti di terze parti, nella parte superiore è presente una barra degli strumenti che indica agli utenti l'URL che stanno visitando e l'icona lucchetto che indica se il sito è sicuro. Quando si apre l'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 la loro PWA all'interno di un'app per Android. Il protocollo è simile al protocollo delle schede personalizzate, ma introduce API che consentono agli sviluppatori di verificare (tramite Digital Asset Links) che controllano sia l'app per Android che l'URL da aprire e di rimuovere la barra degli URL quando entrambi sono veri.
Inoltre, ha introdotto le API per la creazione di schermate iniziali durante l'apertura della PWA o la delega delle notifiche web alla gestione tramite codice Android. A breve saranno disponibili altre funzionalità come il supporto per Fatturazione Play.
Poiché gli URL aperti nelle attività web attendibili dovrebbero essere PWA e avere un insieme di comportamenti e caratteristiche di prestazioni, le attività web attendibili introducono criteri di qualità per le PWA che vengono aperte al suo interno.
Limitazioni delle soluzioni attuali
Il feedback degli sviluppatori ha mostrato l'esigenza della compatibilità delle schede personalizzate con la piattaforma combinata con la flessibilità di WebView per poter accedere, ad esempio, al DOM o inserire JavaScript nei browser in-app.
Le schede personalizzate sono di fatto una scheda visualizzata dal browser dell'utente, con UI personalizzata o senza UI. Ciò significa che il browser deve rispettare le aspettative dell'utente in materia di privacy e sicurezza, rendendo impossibili alcune di queste funzionalità.
Il team di Google Web su Android sta cercando alternative e sperimenta soluzioni per risolvere questi casi d'uso. Continua a seguirci per conoscere i dettagli.
Riepilogo
WebView è utile quando un'applicazione richiede HTML, CSS e JavaScript all'interno dell'app Android, ma non utilizza le funzionalità e le capacità più avanzate disponibili sul web moderno, come le notifiche push, Web Bluetooth e altri. Non è consigliabile aprire 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. Invece, mostrare contenuti web proprietari è un'area in cui i componenti WebView si distinguono.
L'Attività web attendibile dovrebbe essere utilizzata quando gli sviluppatori vogliono visualizzare la propria app web progressiva a schermo intero all'interno dell'app per Android. Può essere usata come unica attività nell'app o insieme ad altre attività Android.
Le schede personalizzate sono il metodo consigliato per aprire contenuti di terze parti progettati per la piattaforma web, nota anche come browser in-app.