Sono uno sviluppatore mobile che ha trascorso molto tempo a considerare questo problema.
Perché lo chiedi?
Molto probabilmente, speri di ridurre i costi di sviluppo delle app:
- Utilizzo delle competenze di sviluppo HTML5 / Javascript esistenti
- Targeting per più piattaforme senza scrivere più app da zero
- Non dover mantenere più codebase in futuro
I motivi possono anche includere:
- Sviluppo HTML5 / Javascript percepito come "più semplice" rispetto allo sviluppo della piattaforma nativa
- Evitare il pagamento delle tasse di registrazione del programma per sviluppatori
- Evitare le restrizioni sui contenuti dell'appstore (gioco d'azzardo ecc.)
- Evitare l'acquisto di hardware di sviluppo (ad es. Mac per lo sviluppo di iPhone)
definizioni
Stabiliamo esattamente cosa intendiamo per ciascuno dei tre approcci citati:
Nativa
Un'app installata su un dispositivo, in genere dal suo app store (anche se a volte può essere sideloaded). Ai fini di questa discussione, l'interfaccia utente di un'app nativa di solito non consiste solo in una visualizzazione Web a schermo intero.
Web mobile
In realtà questa può essere qualsiasi pagina Web, tuttavia per questa discussione consideriamo un'app Web a pagina singola che tenta di imitare l'aspetto di un'app nativa. Non è un'app nativa, ma viene eseguita nel browser del dispositivo.
Applicazione
ibrida instanceof
nativa per app ibrida .
La maggior parte delle persone probabilmente capisce che un'app ibrida è un'app Web mobile a pagina singola (ancora una volta molto probabilmente imitando l'aspetto di un'app nativa), ma confezionata come un'app nativa con accesso ai servizi nativi (à la Phonegap).
Tuttavia, esiste in effetti uno spettro tra il modello Phonegap e quello completamente nativo, a cui verrò più avanti.
Web mobile
Restrizioni tecniche Per
prima cosa elenchiamo alcune restrizioni tecniche sulle app Web per dispositivi mobili che potrebbero di per sé essere determinanti a seconda di ciò che stai facendo:
- Solo interfaccia utente HTML / canvas
- Nessun accesso a determinati eventi e servizi del dispositivo (questi sono ampiamente documentati)
- Non può essere elencato negli app store (influendo sulla rilevabilità)
- Può diventare a schermo intero e avere l'icona homescreen su iOS, tuttavia questa è un'esperienza insolita e non familiare per la maggior parte degli utenti
Se riesci a convivere con tutto quanto sopra, continua a leggere per saperne di più sulle sfide delle app Web in stile nativo a pagina singola. Tuttavia questa sezione non sarebbe completa senza riferimento all'app FT.
Financial Times
L' app web FT è un famoso esempio di questo stile di app. Ecco una caratteristica interessante del quotidiano The UK Guardian al riguardo.
È certamente una straordinaria impresa di ingegneria. Si noti che al momento è ancora disponibile solo solo su iOS - questo mi dice che stanno scoprendo che risolvere le sfide dello sviluppo avanzato tra browser è davvero molto difficile.
App Web in stile nativo a pagina singola
Questa sezione si applica sia al Web mobile che alle app in stile Phonegap.
L'aspetto nativo all'interno di un'app Web viene solitamente ottenuto con un framework come Sencha Touch che fornisce una suite di componenti dell'interfaccia utente che è possibile utilizzare.
Tali framework vanno bene per interfacce utente molto semplici. Tuttavia mancano di flessibilità. Non sarai in grado di implementare alcun design di app nativo utilizzando Sencha, dovrai adattare il tuo design a ciò che il framework può ospitare.
Il modo principale in cui soffrono questi framework è nel tentativo di emulare le complessità dell'interfaccia utente della piattaforma. Quel piccolo effetto di rimbalzo che ottieni quando hai fatto scorrere fino alla fine di un elenco su iPhone? Il tuo framework deve emularlo in Javascript. È impossibile ricrearlo completamente, sarà incline a rallentare e i tuoi utenti rimarranno bloccati nella "valle misteriosa" di un'app che sembra un po 'come nativa, ma chiaramente non lo è e non è tecnica l'utente non sarà in grado di mettere il dito esattamente sul perché.
Il mito "HTML5 / Javascript è facile"
La frammentazione dei dispositivi nei browser Web è diffusa e quando si supera l'HTML e i CSS più elementari, si noterà che le cose non funzionano come ci si aspetterebbe. Potresti ritrovarti a dedicare più tempo a risolvere problemi di interfaccia utente complicati di quanto avresti risparmiato facendolo due volte in modo nativo. Se stai diventando nativo, tieni presente che le visualizzazioni Web delle app native non sono le stesse dei browser dei dispositivi e hanno i loro problemi di frammentazione.
E man mano che la tua app diventa più complessa dal punto di vista funzionale, scoprirai che hai bisogno di qualcosa di più delle semplici competenze jquery per mantenere il tuo Javascript pulito e gestibile.
Detto questo, è perfettamente possibile creare app semplici e funzionali abbastanza rapidamente con questo approccio. Ma è abbastanza ovvio quando un'app lo sta facendo.
Più avanti lungo lo spettro
Quindi, vogliamo una UX migliore di quella che le app in stile Phonegap possono offrire, senza scrivere assolutamente da zero più volte. Cosa possiamo fare?
Condividi codice non UI
Sono disponibili diverse tecniche per la condivisione della logica di business su più piattaforme native. Google ha lanciato J2ObjC che traduce Java in Objective-C. Con un attento factoring del codice, una libreria Java potrebbe essere utilizzata sia su Android che su iOS.
Librerie come Calatrava e Kirin consentono di manipolare basi di codice scritte in Javascript (e quindi tutto ciò che può essere compilato in Javascript) da codice nativo. Disclaimer: lavoro per Future Platforms che hanno creato Kirin; abbiamo avuto un grande successo nell'usarlo su iOS con Javascript generato da Java con GWT, con il codice Java eseguito anche nativamente su Android.
Utilizzare le visualizzazioni Web ... ove appropriato
Le visualizzazioni Web a schermo intero hanno molto lavoro da fare per poter imitare le transizioni dello schermo e gli effetti di rimbalzo. Ma una visualizzazione web all'interno dell'app nativa di Chrome può essere indistinguibile da quella nativa.
Esistono metodi standard e ben documentati per la comunicazione tra app native e visualizzazioni Web.
Gli elenchi e le tabelle possono funzionare particolarmente bene se eseguiti in questo modo, tuttavia l'immissione di testo è un esempio di qualcosa che può essere gestito in modo nativo (per il pieno controllo della tastiera).
In sintesi
L'approccio giusto per te dipende da quanto è complicata la tua app e da quale livello di polacco dell'interfaccia utente sarai soddisfatto.
Il mio motto: utilizzare le visualizzazioni Web ovunque sia possibile, ma assicurarsi che gli utenti non possano dirlo .