Slide 1

Slide 1 text

Christian Liebel @chris_liebel Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop – hands-on Manuel Rauber @ManuelRauber Architect Christian Weyer @christianweyer CTO Consultant

Slide 2

Slide 2 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on https://www.thinktecture.com Sprecher Christian Liebel Christian Weyer Manuel Rauber

Slide 3

Slide 3 text

Prepare it Code it Build it Deploy it Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on

Slide 4

Slide 4 text

08:30–10:00 Prepare it 10:00-10:30 Pause 10:30-12:00 Code it 12:00-13:00 Mittagessen 13:00-14:30 Build it 14:30-15:00 Kuchenbuffet 15:00-16:30 Deploy it Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Zeitplan

Slide 5

Slide 5 text

08:30–10:00 Prepare it 10:00-10:30 Pause 10:30-12:00 Code it 12:00-12:45 Mittagessen 12:45-14:15 Build it 14:15-14:45 Kuchenbuffet 14:45-16:15 Deploy it Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Zeitplan (Vorschlag)

Slide 6

Slide 6 text

Willkommen Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on

Slide 7

Slide 7 text

Prepare it • Cross-Platform • HTML5, CSS3, JavaScript • Zielarchitektur Code it • TypeScript • Angular Build it • Electron • Cordova Deploy it • Windows, macOS, Linux • iOS, Android • Ausblick Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on

Slide 8

Slide 8 text

Nintendo DS Windows Windows Mobile iOS Android BlackBerry 10 FireOS macOS Linux Fernseher Kühlschrank Browser Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Single-, Multi- und Cross-Plattform Cross-Plattform == Cross-Plattform?

Slide 9

Slide 9 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on „Das sieht ja aber gar nicht wie eine native Anwendung aus!“

Slide 10

Slide 10 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on https://spotifyblogcom.files.wordpress.com/2014/12/overview.png

Slide 11

Slide 11 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on http://media.idownloadblog.com/wp-content/uploads/2014/06/Google-Docs-Sheets-Slides-teaser-001.jpg

Slide 12

Slide 12 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Single-Page Web Applications Cross-Plattform-Technologiestack

Slide 13

Slide 13 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Zielarchitektur • REST APIs, HTTP APIs, “irgendwas APIs” • Use Case orientierte Modellierung: Funktionale Services mit einem dedizierten Interface • Kann weitere Datenquellen (Dateisystem, Datenbank, …) anbinden • Abgesichert via Tokens • Kann von jedem HTTPS-sprechenden Client konsumiert werden • Nutzung von WebSocket für Echtzeitkommunikation HTTP HTTPS WebSocket Web API HTML5-Application (Single-Page Application) Web Cordova Electron Node.js .NET Core

Slide 14

Slide 14 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Wir schreiben heute eine App… • auf Basis von Angular, TypeScript und HTML • die sich an die Bildschirmabmessungen anpasst (Responsive Design) • auf unterschiedlichen Geräten und Plattformen funktioniert (Cross-Platform) • die native Plattformfeatures nutzt Demo LIVE DEMO

Slide 15

Slide 15 text

git clone https://github.com/thinktecture/basta-herbst-2017- xplatform-ws.git cd basta-herbst-2017-xplatform-ws npm install # Hat es geklappt? ng version npm start Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Repository-Setup

Slide 16

Slide 16 text

git pull git reset --hard Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Hilfreiche Git-Befehle

Slide 17

Slide 17 text

Prepare it • Cross-Platform • HTML5, CSS3, JavaScript • Zielarchitektur Code it (Teil I) • TypeScript • Angular Build it • Electron • Cordova Deploy it • Windows, macOS, Linux • iOS, Android • Ausblick Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on

Slide 18

Slide 18 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on TypeScript

Slide 19

Slide 19 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on macOS iOS Windows Mobile Android Windows Desktop Windows 10/UWP Linux Browser

Slide 20

Slide 20 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on • Open-Source-Entwicklung von Microsoft • Superset von JavaScript • Statische Typisierung • Bietet diverse Features von ECMAScript 2017+ • Transpilierung nach JavaScript • TypeScript Compiler CLI • Vielseitiger IDE Support: Visual Studio (Code), WebStorm/IntelliJ IDEA, Atom, … TypeScript

Slide 21

Slide 21 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on • Open-Source-Projekt von Google • Entwicklungsplattform für Desktop- und Web-Apps • Framework für Web und Mobile optimiert • Angular CLI: Zentraler Ausgangspunkt für Angular-Projekte Angular

Slide 22

Slide 22 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Komponentenorientierung • Erlaubt Entwicklung nach dem MV*-Entwurfsmuster • Ziel: Reusability, Skalierung • Konstrukte • Komponente: Abgeschlossener und wiederverwendbarer Softwarebaustein • eigene UI • eigenes Routing, … • Service: Wiederverwendbare Klassen ohne UI • Bspw. für clientseitige Businesslogik Angular

Slide 23

Slide 23 text

Features • Besonders einfaches und schnelles Setup • Keine Konfiguration notwendig • Unterstützung für E2E- und Unit-Tests • Der zentrale Ausgangspunkt unter anderem • zum Lernen von Angular • für schnelle Ergebnisse Angular CLI Cross-Plattform Workshop - hands-on Lösungen für alle mit Angular, HTML5, CSS3 und Co.

Slide 24

Slide 24 text

Verwendung Bootstrapping • ng new project Buildprozess • ng build Entwicklungsserver • ng serve Angular CLI Cross-Plattform Workshop - hands-on Lösungen für alle mit Angular, HTML5, CSS3 und Co.

Slide 25

Slide 25 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Und jetzt Sie! Binden Sie das Poké API (https://pokeapi.co/) in die Anwendung ein. Auf den folgenden Slides finden Sie zusätzliche Informationen zu allen Punkten, die Sie beachten müssen: 1. Datenmodell 2. Service 3. Komponente 4. Routing 5. Verlinkung im Menü Poké API

Slide 26

Slide 26 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Datenmodell • Daten sind der eigentliche Kraftstoff jeder App. Im nächsten Schritt wollen wir mit der PokéAPI einen Webservice anbinden, der uns diese Daten liefert. Einer der Vorteile von TypeScript ist die optionale statische Typisierung. In TypeScript können Sie die Datenstruktur mithilfe von Interfaces oder Klassen modellieren. • Legen Sie ein Interface für das Modell eines Pokémon an • Die Eigenschaften eines Pokémon können Sie sich auf der Website zur PokéAPI anschauen: https://pokeapi.co/ • Gibt es Tools, die eine TypeScript-Klasse oder ein -Interface aus JSON-Daten heraus generieren können? Poké API

Slide 27

Slide 27 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service • Das Konstrukt, um wiederverwendbare nicht-UI-bezogene Funktionalität in Angular zu kapseln, wird als Service bezeichnet. Services dienen der horizontalen Segmentierung Ihrer Anwendung. Denken Sie sich einen Service als Gegenstück zu Ihrem Controller in ASP.NET MVC: Er schachtelt alle HTTP-Anfragen, die zu einem bestimmten Teilbereich Ihrer Problemdomäne gehören. • Legen Sie einen Service zum Zugriff auf die PokéAPI an • Folgende Liste muss beim Entwickeln des Services beachtet werden, welche auf den nachfolgenden Slides beschrieben sind: • Injecting des HTTP-Services • Abruf der Pokémon-Liste • Abruf eines einzelnen Pokémons • Einhängen des Services in die Dependency Injection Poké API

Slide 28

Slide 28 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service – Injecting des HTTP-Services • Zum Konsumieren von Abhängigkeiten können Sie sich diese einfach in Ihren Konstruktor einreichen lassen. Die Konstruktorinjektion ist typbasiert. Der HTTP-Service, der von Angular bereitgestellt wird, heißt "Http". Lassen Sie sich diesen in Ihren neuen Service einreichen. Zu aller Not können Sie beim StarWarsService spicken. • Achtung: Http künftig deprecated. Aufgabe für Profis: Den neueren „HttpClient“ verwenden. Poké API

Slide 29

Slide 29 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service – Abrufen der Pokémon-Liste • Entwickeln Sie eine Methode "list()", welche eine Liste aller Pokémon abruft. Welcher Endpunkt zu wählen ist, erfahren Sie auf https://pokeapi.co/ • Der Http-Service kapselt die verschiedenen HTTP-Verben (GET, POST, etc.) durch gleichnamige Methoden: Http.get() • Diese Methode liefert ein Observable zurück. Darunter versteht man einen (oder mehrere) Wert(e), die erst in der Zukunft feststehen. Ein Observable hat einen generischen Typparameter: Http.get() liefert etwa ein Observable zurück, das eine HTTP-Response enthält. Um auf die Nutzlast der Antwort zuzugreifen, müssen Sie diese zunächst entsprechend der Antwort des Servers transformieren. Die Poké API gibt JSON zurück, aber es könnte auch Plain-Text sein. • Hierbei hilft Ihnen der Rx.js-Operator map: return http.get(…).map(response => response.json()) • Geben Sie das Ergebnis als Observable einer Liste von Instanzen des Interfaces, das sie vorhin definiert haben, zurück. Das geht ganz einfach: public list(): Observable { … } – ein Type-Cast ist hier nicht erforderlich. Poké API

Slide 30

Slide 30 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service – Abrufen eines einzelnen Pokémons • Entwickeln Sie analog zu oben eine Methode "get()", die ein bestimmtes Pokémon unter Angabe seiner Nummer im nationalen Pokédex (seiner ID). • Die Implementierung wird sich ähnlich gestalten wie bei der Liste, nur dass diesmal eine ID übergeben und die URL entsprechend zusammengesetzt werden muss. • Zum Konkatenieren von Zeichenketten gibt es ab ECMAScript 2015 die sogenannten Template Literal Strings. Auch in .NET sind sie bekannt, denn dort haben sie mit C# 6 unter dem Namen String Interpolation Einzug gehalten, wenn auch mit abweichender Syntax. In JavaScript geht das so: `http://example.com/${id}` – achten Sie auf die Backticks. • Beachten Sie ebenfalls, dass sich der generische Typparameter des Observables ändert: Wir geben nun kein Array, sondern einen einzelnen Datensatz zurück. Poké API

Slide 31

Slide 31 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service – Konfiguration der Dependency Injection • Vorsicht: Services werden nicht automatisch in Ihre Anwendung eingebunden. Stellen Sie nun den Service über die Dependency-Injection bereit. Finden Sie in der Datei module.ts die richtige Stelle? Poké API

Slide 32

Slide 32 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Komponente • Der Begriff der Komponente ist so alt wie der Begriff des Software-Engineering selbst. Unter einer Komponente versteht man wiederverwendbare, einfach kombinierbare Softwarebausteine. Im Falle von Angular sind diese UI-bezogen. Sie bringen also ein eigenes Template mit. Erzeugen Sie eine neue Komponente. • Vergessen Sie nicht, die Komponente ebenfalls beim Anwendungsmodul zu registrieren. Poké API

Slide 33

Slide 33 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Komponente – Listenanzeige • Auch in Komponenten können Sie sich Abhängigkeiten einreichen lassen: Wieder über den Konstruktor und wieder über die Verwendung des Typs – hier also Ihrer Service-Klasse. • Legen Sie ein Feld an: public pokemon: Observable. • Führen Sie im Konstruktor folgende Zuweisung durch: this.pokemon = pokemonService.list(); • Kommen wir nun zum zugehörigen HTML-Template Ihrer Komponente: Legen Sie dort eine unsortierte Liste (ul) an und legen sie einen Listeneintrag (li) hinein. Zeichnen Sie das li-Element mit der Direktive *ngFor="let item of pokemon | async" aus. • Die async-Pipe wartet darauf, dass der Netzwerkrequest abgeschlossen wird. Sobald das der Fall ist, werden die Pokémon angezeigt und das li-Element für jedes Pokémon wiederholt. • Innerhalb des li-Tag können Sie nun Data-Binding anwenden. Das geht mithilfe der Moustache- Syntax: {{ item.name }} • Zeigen Sie mindestens Namen, Gewicht und Größe des Pokémon in der Liste an. • Sie können Ihre Komponente ausprobieren, indem Sie diese in Ihre HomeComponent einbetten: Poké API

Slide 34

Slide 34 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Komponente – Detailanzeige • Führen Sie nun ähnliche Schritte auch zur Implementierung einer Detail-Komponente durch. • Diesmal benötigen Sie aber keine Liste, sondern zeigen Details zu einem bestimmten Datensatz an. Da wir Data-Binding nur dann anwenden können, wenn auch ein Datensatz geladen wurde, schalten Sie die Anzeige der Daten nur bei Vorhandensein eines Datensatzes an:
{{ pokemon.name }}
• Innerhalb des "div" können Sie sicher auf das Pokémon zugreifen. Zeigen Sie mindestens Name, Gewicht, Größe und den Basiserfahrungswert an. • Verwenden Sie zum Abrufen von Daten zunächst eine statische ID, zum Beispiel 151 für Mew. Poké API

Slide 35

Slide 35 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Routing – Liste • Routing ist ein elementarer Bestandteil von Single-Page Web Applications. Fügen Sie in der Datei routes.ts eine neue Route für die Listenansicht der Pokémon-Liste ein. Parameter werden mit führendem Doppelpunkt (:) deklariert. • Falls nötig, lassen Sie sich inspirieren von der Route zur StarWars-API. Vernachlässigen Sie dabei die Angabe von "model" und "page". • Sie können die korrekte Umsetzung prüfen, indem Sie in Ihrem Browser die neue Route eingeben. Poké API

Slide 36

Slide 36 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Routing – Detailseite • Legen Sie nun auch eine Route für die Detail-Ansicht eines Pokémon an. Falls nötig, lassen Sie sich inspirieren von der Route zur StarWars-API. Vernachlässen Sie dabei die Angabe von "model". Die "id" wird allerdings benötigt. • Innerhalb Ihrer Komponente pokemonDetail müssen Sie nun an die ID kommen, die in der Route eingegeben wurde. Zugriff auf die Parameter erhalten Sie über den Service mit dem Typ ActivatedRouteSnapshot. Dieser Service bietet die Eigenschaft "params", auf dem die URL- Parameter abgelegt sind. Starten Sie abhängig davon die Abfrage gegen Ihren Pokémon- Service. • Sie können die korrekte Umsetzung prüfen, indem Sie in Ihrem Browser die neue Route eingeben. • Schauen Sie sich die Angular-Dokumentation zu "routerLink" an. Wie können Sie aus der Pokémon-Liste heraus auf die einzelnen Einträge verlinken? Poké API

Slide 37

Slide 37 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Verlinkung im Menü • Abschließend wollen wir die Pokémon-Liste noch im Menü referenzieren. • Navigieren Sie dazu zur Datei src/app/components/menu/menu.html • Fügen Sie einen neuen Menüeintrag analog zu den übrigen Menüeinträgen hinzu. Poké API

Slide 38

Slide 38 text

Prepare it • Cross-Platform • HTML5, CSS3, JavaScript • Zielarchitektur Code it • TypeScript • Angular Build it • Electron • Cordova Deploy it • Windows, macOS, Linux • iOS, Android • Ausblick Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on

Slide 39

Slide 39 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on • Nativer Anwendungsrahmen mit integriertem Web Browser • Android: Android spezifischer Browser / CrossWalk • iOS: UIWebView / WKWebView • Windows Mobile: Internet Explorer / Edge • HTML5 Anwendung wird innerhalb des integrierten Web Browsers gehostet • Der Anwendungsrahmen erlaubt Zugriff auf darunterliegende native Platform APIs via Plugins • Native SDKs werden zum Bauen der Apps benötigt Cordova

Slide 40

Slide 40 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Cordova Architektur Cordova Application Single-Page Application HTML JS CSS Assets Cordova Plugins Geolocation Notifications Media Camera Custom Plugins HTML Rendering Engine (WebView) Cordova Native APIs Cordova APIs HTML APIs Mobile OS Android iOS Windows 10 UWP and more… OS APIs OS APIs

Slide 41

Slide 41 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on • Erlaubt das Erstellen von echten Desktop Anwendungen (.exe, .app) • Kombiert einen “full-blown” Chomium Browser mit Node.js • Anwendung ist nicht abhängig von installierten Browsern des Zielgeräts • Benötigt keine nativen SDKs zum Bauen der Anwendung • Ermöglicht Zugriff auf native Plattform APIs • Electron API • Node.js Module • Bringt Features wie ein Auto-Updater oder einen Crash-Reporter mit Electron

Slide 42

Slide 42 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Electron Architektur Desktop OS Electron Renderer Process (technically Chromium) Electron Main Process (technically Node.js) macOS Windows Linux Single-Page Application Electron API Custom Node.js modules IPC Remote Node.js

Slide 43

Slide 43 text

Prepare it • Cross-Platform • HTML5, CSS3, JavaScript • Zielarchitektur Code it (Teil II) • TypeScript • Angular Build it • Electron • Cordova Deploy it • Windows, macOS, Linux • iOS, Android • Ausblick Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on

Slide 44

Slide 44 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Plattformerkennung • Entwickeln Sie einen Service "PlatformService" mit drei statischen Methoden, die zur Bestimmung der Plattform genutzt werden können: • "isBrowserApplication()": Liefert einen boolschen Wert, der true ist, wenn die Anwendung in einem Browser läuft. • "isCordovaApplication()": Liefert einen boolschen Wert, der true ist, wenn die Anwendung in Cordova ausgeführt wird. • "isElectronApplication()": Liefert einen boolschen Wert, der true ist, wenn die Anwendung in Electron ausgeführt wird. • Cordova schreibt auf das globale "window"-Objekt eine gleichnamige Property, wenn die Anwendung in Cordova ausgeführt wird. • Bei Electron lässt sich mit Hilfe des User Agents und dem Vorhandensein des Strings "Electron" prüfen, ob die Anwendung in Electron ausgeführt wird. Teilen mit Freu(n)de

Slide 45

Slide 45 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service – Schnittstellendefinition • Entwickeln Sie einen abstrakten Service, der die Schnittstelle zum Teilen von Inhalten definiert. • Definieren Sie ein abstrakte Methode "share()", die einen Titel und eine Beschreibung als String entgegennimmt. Teilen mit Freu(n)de

Slide 46

Slide 46 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service – Teilen im Browser • Entwickeln Sie Service, der den abstrakten Share Service ableitet und implementieren Sie die Methode "share()". • Im Falle des Browsers soll das E-Mail-Programm des Benutzers geöffnet werden und sowohl Titel als auch Inhalt der E-Mail vorausgefüllt werden. • Das E-Mail-Programm können Sie mit einem "mailto:"-Link öffnen. Teilen mit Freu(n)de

Slide 47

Slide 47 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service – Konfiguration der Dependency Injection • Entwickeln Sie eine Funktion "shareServiceFactory()", die eine Instanz des BrowserShareService erzeugt. • Fügen Sie diese Factory der Angular Dependency Injection hinzu: https://angular.io/guide/dependency-injection#factory-providers Teilen mit Freu(n)de

Slide 48

Slide 48 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Komponente – Erweiterung der Detailseite • Erweitern Sie die Detailseite mit einem "Share to a friend"-Button. • Bei Klick auf diesen Button soll eine Methode "share()" ausgeführt werden. • Die Methode "share()" benutzt den ShareService, um den Inhalt zu teilen. • Vergessen Sie nicht, den Service via Konstruktorinjektion anzufordern. Teilen mit Freu(n)de

Slide 49

Slide 49 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service – Teilen auf mobilen Geräten • Entwickeln Sie einen Service, der den abstrakten Share Service ableitet und implementieren Sie die Methode "share()". • Im Falle einer Cordova-basierten Ausführung kann die native "Teilen"-Oberfläche des Geräts benutzt werden. • Die Anwendung integriert bereits ein Plugin, um die native "Teilen"-Oberfläche anzusprechen: https://www.npmjs.com/package/cordova-plugin-x-socialsharing • Benutzen Sie die Funktionen des Plugins, um über JavaScript mit der nativen Funktion zu sprechen. • Erweitern Sie Ihre ShareServiceFactory und erzeugen Sie eine Instanz vom "CordovaShareService", wenn Sie erkennen, dass die Anwendung in Cordova ausgeführt wird. Teilen mit Freu(n)de

Slide 50

Slide 50 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service – Zugriff auf den Desktop • Entwickeln Sie einen Service, um Zugriff auf Electron zu erhalten. • Sie erhalten Zugriff auf Electron, in dem Sie die auf dem "window"-Objekte definierte Methode "require()" aufrufen und ihr als Parameter den Wert "electron" übergeben. • Achtung: Die Methode "require()" steht nur zur Verfügung, wenn die Anwendung in Electron ausgeführt Teilen mit Freu(n)de

Slide 51

Slide 51 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Service – Teilen auf dem Desktop • Entwickeln Sie einen Service, der den abstrakten Share Service ableitet und implementieren Sie die Methode "share()". • Im Falle einer Electron-basierten Ausführung soll, wie im Falle des Browsers, das E-Mail- Programm geöffnet werden. • Probieren Sie die Anwendung in Electron mit dem BrowserShareService aus. Was stellen Sie hier fest? • Benutzen Sie den ElectronService, um Zugriff auf "shell" zu erhalten, um externe Links zu öffnen: https://github.com/electron/electron/blob/master/docs/api/shell.md • Erweitern Sie Ihre ShareServiceFactory und erzeugen Sie eine Instanz vom "ElectronShareService", wenn Sie erkennen, dass die Anwendung in Electron ausgeführt wird. • Aufgemerkt: Ihre ShareServiceFactory benötigt eine Abhängigkeit, um den ElectronShareService zu erzeugen. Teilen mit Freu(n)de

Slide 52

Slide 52 text

Prepare it • Cross-Platform • HTML5, CSS3, JavaScript • Zielarchitektur Code it • TypeScript • Angular Build it • Electron • Cordova Deploy it • Windows, macOS, Linux • iOS, Android • Ausblick Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on

Slide 53

Slide 53 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Ihre Anwendung verpacken und bereitstellen • Inspizieren Sie die Datei package.json, die sich im Wurzelverzeichnis des Repositorys befindet. • In „scripts“ finden Sie verschiedene Skripte, die das Bauen Ihrer Anwendung für Desktop- und Mobilbetriebssysteme erlauben. • Diese Skripte erzeugen einen Build Ihrer Anwendung und verpacken diese anschließend für die verschiedenen Systeme. • Bringen Sie diese auf den Zielsystemen und -geräten, die Sie mitgebracht haben, zum Einsatz. Buildprozess

Slide 54

Slide 54 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Zusammenfassung Windows 10 Mobile iPhone, iPad Android Windows Store Windows Desktop Linux macOS App Node.js npm Gulp TypeScript ECMAScript 2016 HTML5 CSS3 Restify Token-Authentication SequelizeJS SQLite Electron NW.js Apache Cordova TACO Tools Angular Chrome Safari Firefox Edge WebStorm VS Code Atom vi Emacs Sublime Text Eine Codebasis ASP.NET Web API ASP.NET Core 1.0

Slide 55

Slide 55 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on • Chromium Embedded Framework (CefSharp) • Push • Applikation • Plattform • Touch-Interaktionen • Native Integrationen • Offline-Fähigkeit • Progressive Web Apps Ausblick

Slide 56

Slide 56 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on • Basiert auf CEF (Chromium Embedded Framework) • Wrapper um Chromium für WPF und WinForms als Web Browser Control • Kommunikation zwischen .NET und JavaScript Code über dediziertes API • Ermöglicht Migrationspfade • Anwendung nach und nach als SPA in JavaScript neu entwickeln • Oder nur Teilbereiche in der existierenden Anwendung in der neuen Welt bauen CefSharp

Slide 57

Slide 57 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Applikation • Echtzeit-Daten-Push direkt in die Anwendungen • Prinzip: Aufrechthalten einer Client-Serververbindung durch WebSockets • oder Fallback-Technologie, z.B. HTTP Long Polling • Für aktive, laufende Applikationen • ASP.NET SignalR oder socket.io Push

Slide 58

Slide 58 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on Plattform • Benutzung der nativen, herstellerspezifischen Push-Funktionen • Bspw. Azure App Services kombiniert iOS, Windows 10 Mobile und Android Push • Auch für inaktive Applikationen geeignet Push

Slide 59

Slide 59 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on • Native Touch Events vom Browser • Abstraktion über hammer.js möglich • Erkennung von Gesten • Pinch-to-Zoom • Rotate • Swipe Touchinteraktionen

Slide 60

Slide 60 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on • Integration plattformabhängiger APIs • Native Menüs • Geolocation • Globale Shortcuts Integration nativer Funktionen

Slide 61

Slide 61 text

Lösungen für alle mit Angular, HTML5, CSS3 und Co. Cross-Plattform Workshop - hands-on • Synchronisieren der Daten in einen lokalen Speicher • IndexedDB • HTML5 Web Storage • Bearbeiten der Daten ohne aktive Internetverbindung • Synchronisation zurück zum Server nach Wiederherstellen einer Verbindung Offlinefähigkeit

Slide 62

Slide 62 text

Das Web wird nativ(er) • Die Idee: Wir brauchen keine App-Stores mehr • Web-App entspricht der App-App • Feature Parity: Native Experience mit Pushbenachrichtigungen, Offlineverfügbarkeit, … • Angetrieben von Google, auf Android schon heute verfügbar • Abwärtskompatibel (Progressive Enhancement) • Progressive Web Apps sind keine Technologie, sondern eine Sammlung von Eigenschaften Apps von morgen… Cross-Plattform Workshop - hands-on Lösungen für alle mit Angular, HTML5, CSS3 und Co.

Slide 63

Slide 63 text

Vielen Dank! Fragen? Contact @chris_liebel [email protected] @christianweyer [email protected] @manuelrauber [email protected]