DATENSERIALISIERUNG & INTERNETZUGRIFF Am Beispiel einer RSS-Reader-App
AGENDA (1/2) Allgemeines Projekt Einführung Konzept Live Demo Ausblick
AGENDA (2/2) Unterrichtseinheit Serialisierung Lokales speichern Internetzugriff REST-Kommunikation
ALLGEMEINES - MOTIVATION Datenserialisierung & Internetzugriff in Kombination werden bei nahezu jeder App benötigt und gehören daher zu den wichtigsten Grundlagen!
ALLGEMEINES - MOTIVATION
ALLGEMEINES - AUFGABE Internetzugriff Wie wird eine Verbindung zum Internet bzw. zu einer API aufgebaut? Wie baue ich eine Verbindung auf, ohne das sie die App blockiert?
ALLGEMEINES - AUFGABE Datenserialisierung Wie können Daten serialisiert und wieder deserialisiert werden? Also, wie werden Objekte z.b. in JSON und XML umgewandelt und umgekehrt?
ALLGEMEINES - ZIELE Erstellen einer sinnvollen App Die App soll das Themengebiet vollständig abdecken Erlernen der wichtigsten Methodiken Bearbeiten des Inhalts zu den wichtigsten Methodiken in allgemeinen Beispielen Ausdenken von Übungseinheiten und Aufgaben
ALLGEMEINES - ZEITPLAN Ideenfindung: 22.9-2.10 Konzept: 6.10-17.10 Implementierung: 20.10-21.11 Webseite: 24.11-05.12 Poster 8.12-12.12 Präsentation: 15.12-19.12
PROJEKT - EINFÜHRUNG Warum ein RSS-Reader? ein RSS-Reader ist eine sinnvolle App er deckt das Themengebiete vollständig ab es werden keine aufwändigen, vom wesentlichen ablenkende, Funktionen benötigt
PROJEKT - EINFÜHRUNG Ziele - Themengebiete: parsen von XML und JSON Verbindung zu einer API lokales speichern von Daten
PROJEKT - EINFÜHRUNG Ziele - Funktionsumfang: Pull-to-Refresh Funktion beziehen von Feeds speichern und löschen von Websites
KONZEPT Funktionen der App Architektur Serveranbindung
FUNKTIONEN DER APP RSS-Reader-App RSSIt Anlegen und Darstellen von Websites Lokales Abspeichern Synchronisation mit einem Server Parsen des RSS-Feeds Anzeige einzelner Artikel
ANLEGEN VON WEBSITES Abspeichern von Titel und Feed-URL Beim Abspeichern wird WebsiteItem erzeugt
DARSTELLEN VON WEBSITES Anzeige eines Arrays aus WebsiteItem s Löschen durch bekannte Swipe-Geste Aktualisieren durch Pull-To- Refresh
LOKALES ABSPEICHERN Damit die angelegten Websites auch nach Beendigung der App auf dem Gerät vorhanden sind, müssen sie lokal gespeichert werden Entweder CoreData oder direkt als Datei Also zuerst Array aus WebsiteItems als JSON serialisieren und danach im Documents-Ordner ablegen
SYNCHRONISATION MIT EINEM SERVER Zusätzlich sollen die angelegten Websites auch auf einem Server abgespeichert werden Also, serialisierte WebsiteItem s an REST- Schnittstelle senden bzw. vom Server empfangen Bei Pull-To-Refresh-Event pullen und bei Anlegen neuer Seite an Server pushen
PARSEN DES RSS-FEEDS Beim Klick auf eine angelegte Website, sollen alle Artikel aus dem Feed geparsed und in einer Liste dargestellt werden Auch hier: Pull-To-Refresh zum aktualisieren der Liste
ANZEIGE EINZELNER ARTIKEL Wenn ein Artikel ausgewählt wird, öffnet sich eine Webview mit dem entsprechenden Inhalt
MODEL-VIEW-CONTROLLER
ARCHITEKTUR
SERVERANBINDUNG Zur Synchronisation der abgespeicherten Websites eine einfache REST-Api Auf Basis von PHP & MySQL
LIVEDEMO
AUSBLICK User-Accounts Speichern der Artikelliste bzw. der ganzen Artikel Cachen von Bildern UI-Verbesserungen
UNTERRICHTSEINHEIT Serialisierung RSS-Feed Lokales speichern Internetzugriff REST-Kommunikation
SERIALISIERUNG Idee: Einzelne Internetseiten als WebsiteItem abbilden Speichern dieser WebsiteItems auf dem Gerät, sowie senden/empfangen an/von Server
SERIALISIERUNG WebsiteItem Name URL ID WebsiteItem Name URL ID WebsiteItem Name URL ID
SERIALISIERUNG Klasse JSONHelper.swift mit Methoden zum umwandeln von AnyObject in JSON und umgekehrt
SERIALISIERUNG Sowie Methoden zum Mappen von WebsiteItem in AnyObject und umgekehrt
RSS-FEED Idee: Anzeige einer Liste von Artikeln und bei Auswahl, soll der entsprechende Artikel in einer Webview angezeigt werden
RSS-FEED ArticleItem Titel Datum Beschr. URL ArticleItem Titel Datum Beschr. URL ArticleItem Titel Datum Beschr. URL
RSS-FEED Klasse RSSDownloader.swift, die die nötigen Methoden zum parsen des Feeds zusammenfasst Implementieren von NSXMLParserDelegate um Zugriff auf die nötigen optionalen Methoden parse zu bekommen
RSS-FEED
LOKALES SPEICHERN Abspeichern der angelegten Websites lokal auf dem Gerät, damit nicht nach jedem Start neue Einträge angelegt werden müssen
LOKALES SPEICHERN Verschiedene Techniken CoreDate Framework zum persistenten speichern von Daten Grundsätzlich die richtige Wahl Abspeichern von Dateien auf dem Gerät Dokumente gefüllt mit String können direkt abgespeichert und gelesen werden Bietet sich an, um Serialisierung zu verdeutlichen
LOKALES SPEICHERN Die Klasse File.swift wird geschrieben mit Methoden zum lesen und schreiben von Strings in eine Datei. So soll später eine JSON-Datei mit den WebsiteItems abgelegt werden
LOKALES SPEICHERN
INTERNETZUGRIFF Viele mobile Apps benötigen Internetkommunikation z.b. zum synchronisieren von Texten oder Bildern, für ein Usermanagement, zur Darstellung von Inhalten
INTERNETZUGRIFF Problem: Die Dauer eines Internetzugriffs ist schwer einschätzbar -> langsame Internetverbindung oder Server Wenn Internetkommunikation auf dem Hauptthread stattfindet, wird die GUI für die Dauer des Zugriffs blockiert Also: Auslagerung in Hintergrundthreads, damit der Nutzer nicht irritiert ist
INTERNETZUGRIFF Verschiedene Techniken unter ios NSOperation Grand Central Dispatch
INTERNETZUGRIFF Grand Central Dispatch Sehr effizienter Weg, um verschiedene Arbeitseinheiten zu initialisieren und dann gleichzeitig auszuführen Wenn ein Abschnitt abgebrochen oder pausiert werden soll, bedeutet dies extra Aufwand für den Entwickler
INTERNETZUGRIFF NSOperation Bildet eine weitere Schicht über GCD und kümmert sich selbstständig um die vorher genannten Aufgaben Dafür etwas mehr Overhead und deswegen nicht ganz so effizient Bietet sich aber für normale Anwendungen an, da die Kapazitäten eh nicht benötigt werden
INTERNETZUGRIFF
INTERNETZUGRIFF
REST-KOMMUNIKATION Warum Synchronisation mit Server? Um die Persistenz von Daten sicherzustellen Synchronisation von verteilten Systemen
REST-KOMMUNIKATION Was gibt es für Konzepte? SOAP (Simple Object Access Protocol) RESTful (Representational State Transfer)
REST-KOMMUNIKATION Warum REST? bessere Performance und geringere Bandbreitennutzung von Menschen lesbar schnellere Lernkurve und einfacher umsetzbar
REST-KOMMUNIKATION Von der Api bereitgestellte Funktionen: deletewebsite setwebsites getwebsites
REST-KOMMUNIKATION
ÜBUNGSAUFGABEN Das erlangte Wissen soll nun mittels Aufgaben vertieft werden Dazu bitte folgenden Link aufrufen: robin-media.de/thm/fma