Ich bin ein mobiler Entwickler, der sich intensiv mit diesem Thema beschäftigt hat.
Warum fragst du?
Höchstwahrscheinlich möchten Sie die Kosten für die App-Entwicklung senken, indem Sie:
- Nutzung vorhandener HTML5 / Javascript-Entwicklungsfähigkeiten
- Auf mehrere Plattformen abzielen, ohne mehrere Apps von Grund auf neu zu schreiben
- In Zukunft müssen nicht mehrere Codebasen verwaltet werden
Gründe können auch sein:
- HTML5 / Javascript-Entwicklung wird als "einfacher" empfunden als native Plattformentwicklung
- Vermeidung der Zahlung von Registrierungsgebühren für Entwicklerprogramme
- Vermeidung von Beschränkungen für Appstore-Inhalte (Glücksspiele usw.)
- Vermeiden des Kaufs von Entwicklungshardware (zB Mac für iPhone-Entwicklung)
Definitionen
Lassen Sie uns genau festlegen, was wir mit jedem der drei genannten Ansätze meinen:
Native
Eine App, die auf einem Gerät installiert ist, normalerweise aus dem App Store (obwohl sie manchmal von der Seite geladen werden kann). Für die Zwecke dieser Diskussion besteht die Benutzeroberfläche einer nativen App normalerweise nicht nur aus einer Vollbild-Webansicht.
Mobiles Web
Dies kann in der Tat eine beliebige Webseite sein. In dieser Diskussion wird jedoch eine einseitige Web-App betrachtet, die versucht, das Erscheinungsbild einer nativen App zu imitieren. Es ist keine native App, sondern wird im Browser des Geräts ausgeführt.
Hybrid
Hybrid App instanceof
native App.
Die meisten Leute verstehen eine Hybrid-App wahrscheinlich als eine einseitige mobile Web-App (die wahrscheinlich das Erscheinungsbild einer nativen App imitiert), aber als native App mit Zugriff auf native Services (à la Phonegap).
Tatsächlich gibt es jedoch ein Spektrum zwischen dem Phonegap-Modell und dem vollständig nativen, auf das ich später noch eingehen werde.
Mobiles Web
Technische Einschränkungen
Lassen Sie uns zunächst einige technische Einschränkungen für mobile Web-Apps auflisten, die für sich genommen, abhängig von Ihren Aktivitäten, zu Bruch gehen können:
- Nur HTML / Canvas-Benutzeroberfläche
- Kein Zugriff auf bestimmte Geräteereignisse und -dienste (diese sind weitgehend dokumentiert)
- Kann nicht in App Stores aufgeführt werden (Auswirkungen auf die Erkennbarkeit)
- Unter iOS können Vollbild- und Startbildschirmsymbole angezeigt werden. Dies ist jedoch für die meisten Benutzer eine ungewöhnliche und ungewohnte Erfahrung
Wenn Sie mit all dem leben können, lesen Sie weiter, um mehr über die Herausforderungen von einseitigen nativen Web-Apps zu erfahren. Dieser Abschnitt wäre jedoch ohne Bezugnahme auf die FT-App nicht vollständig.
Financial Times
Die FT-Web-App ist ein bekanntes Beispiel für diesen App-Stil. Hier ist ein interessantes Feature der britischen Guardian-Zeitung dazu.
Es ist sicherlich eine bemerkenswerte Leistung der Technik. Beachten Sie, dass es derzeit nur noch auf iOS verfügbar ist. Dies zeigt, dass es für sie sehr schwierig ist, die Herausforderungen der fortschrittlichen browserübergreifenden Entwicklung zu lösen.
Einseitige Web-Apps im einheitlichen Stil
Dieser Abschnitt gilt sowohl für mobile Webanwendungen als auch für Apps im Phonegap-Stil.
Das native Erscheinungsbild einer Web-App wird normalerweise mit einem Framework wie Sencha Touch erzielt , das eine Reihe von UI-Komponenten zur Verfügung stellt.
Solche Frameworks eignen sich gut für sehr einfache Benutzeroberflächen. Ihnen fehlt jedoch Flexibilität. Mit Sencha können Sie kein natives App-Design implementieren. Sie müssen Ihr Design an die Anforderungen des Frameworks anpassen.
Die Hauptursache für diese Frameworks ist der Versuch, die Feinheiten der Benutzeroberfläche der Plattform zu emulieren. Welchen netten kleinen Springeffekt bekommst du, wenn du auf dem iPhone zum Ende einer Liste gescrollt hast? Ihr Framework muss dies in Javascript emulieren. Es ist unmöglich, es vollständig neu zu erstellen, es wird sich verlangsamen und Ihre Benutzer werden im "unheimlichen Tal" einer App gefangen sein, die ein bisschen wie einheimisch aussieht, es aber eindeutig nicht ist und nicht technisch ist Der Benutzer kann nicht genau sagen, warum.
Der Mythos "HTML5 / Javascript ist einfach"
Die Fragmentierung von Geräten in Webbrowsern ist weit verbreitet, und wenn Sie über das grundlegendste HTML und CSS hinausgehen, werden Sie feststellen, dass die Dinge nicht so funktionieren, wie Sie es erwarten. Möglicherweise verbringen Sie mehr Zeit mit der Lösung umständlicher Benutzeroberflächenprobleme, als Sie es sich zweimal erspart hätten. Wenn Sie nativ werden, beachten Sie, dass native App-Webviews nicht mit Gerätebrowsern identisch sind und ihre eigenen Fragmentierungsprobleme haben.
Und da Ihre App immer komplexer wird, werden Sie feststellen, dass Sie mehr als nur grundlegende JQuery-Kenntnisse benötigen, um Ihr Javascript sauber und wartbar zu halten.
Mit diesem Ansatz ist es jedoch durchaus möglich, recht schnell einfache, funktionierende Apps zu erstellen. Aber es ist ziemlich offensichtlich, wann eine App es tut.
Weiter entlang des Spektrums
Wir wollen also ein besseres UX, als es Apps im Phonegap-Stil bieten können, ohne absolut alles von Grund auf neu zu schreiben. Was können wir tun?
Teilen Sie Nicht-UI-Code
Für die gemeinsame Nutzung der Geschäftslogik auf mehreren nativen Plattformen stehen verschiedene Techniken zur Verfügung. Google hat J2ObjC gestartet, das Java in Objective-C übersetzt. Unter sorgfältiger Berücksichtigung von Code kann eine Java-Bibliothek sowohl auf Android als auch auf iOS verwendet werden.
Mit Bibliotheken wie Calatrava und Kirin können in Javascript geschriebene Codebasen (und damit alles, was mit Javascript kompiliert werden kann) aus nativem Code manipuliert werden. Haftungsausschluss: Ich arbeite für Future Platforms, die Kirin erstellt haben. Wir hatten großen Erfolg damit auf iOS mit Javascript, das aus Java mit GWT generiert wurde, wobei Java-Code auch nativ auf Android ausgeführt wird.
Verwenden Sie gegebenenfalls Webviews
Vollbild-Webviews haben viel zu tun, um Bildschirmübergänge und Bounce-Effekte zu imitieren. Eine Webansicht in nativem App-Chrom kann jedoch nicht von nativem unterschieden werden.
Es gibt Standardmethoden und gut dokumentierte Methoden für die Kommunikation mit nativen Apps und Webviews.
Auf diese Weise können Listen und Tabellen besonders gut funktionieren. Die Texteingabe ist jedoch ein Beispiel für eine native Vorgehensweise (für die vollständige Kontrolle über die Tastatur).
Zusammenfassend
Welcher Ansatz für Sie am besten geeignet ist, hängt davon ab, wie kompliziert Ihre App ist und mit welcher Oberflächenpolitur Sie zufrieden sind.
Mein Motto: Verwenden Sie Webviews, wo immer Sie können, aber stellen Sie sicher, dass Ihre Benutzer es nicht wissen .