Eine mobile App alleine macht noch keinen Sommer. Sie benötigt in der Regel auch eine Cloud-Anbindung.
Das Backend macht's
- dotnetpro 06/2017
Einen ersten Einblick in Azure Mobile Apps in Verbindung mit der Entwicklung von Xamarin-Apps hat die dotnetpro bereits in der Ausgabe 11/2016 gegeben. Der Artikel legte den Schwerpunkt eher auf das Entwickeln einer App. Hier soll nun ein tieferer Einblick in die Backend-Entwicklung mit Azure im Mittelpunkt stehen, da heute nahezu jede Anwendung ein Backend benötigt.
Dabei geht es aber um viel mehr als nur eine Datenbank, die ein paar Daten liefert. Wichtig bei der App-Entwicklung sind hierbei Funktionen wie Offline-Synchronisierung oder Push-Benachrichtigungen. Kein Entwickler, der eine moderne Anwendung erstellen will, kommt darum herum, sich mit diesen Themen zu beschäftigen.
Die Anforderungen, die an ein Backend gestellt werden, fasst Bild 1 zusammen: Der wichtigste Punkt dürfte die Datenhaltung und deren Bereitstellung sein. Diesen Punkt hat der oben genannte Artikel bereits erläutert und er wird deshalb hier nicht weiter betrachtet.
Neu hinzu kommen nun noch die Anforderungen Serverlogik und Benachrichtigungen sowie Authentifizierung und Autorisierung des Anwenders. Für die Auswertung des Nutzerverhaltens und für das Bugfixing sind auch noch das Logging und die Diagnose wichtig. Außerdem sollte das Backend skalieren, sprich es sollte möglich sein, ohne viel Arbeit das Backend dem gesteigerten Datenaufkommen von mehr Nutzern anzupassen.
Um all diese Themen zu beleuchten, würde ein Artikel sicher nicht ausreichen. Deswegen konzentriert sich dieser Beitrag auf zwei Themen, die auch in der App-Entwicklung einen hohen Stellwert haben: Push-Benachrichtigungen (Notifications) und Offline-Synchronisierung.
Bild 1: Die heutigen Anforderungen an ein Backend
Bild 2: Das Prinzip der Push-Benachrichtigungen unter Azure
Push-Benachrichtigungen
Was wäre WhatsApp ohne Push-Benachrichtigungen (PNs)?
Stellen Sie sich vor, Sie müssten jedes Mal erst die App öffnen, um zu sehen, ob und was Ihnen jemand geschrieben hat.
Würden Sie dann noch WhatsApp nutzen? Wahrscheinlich würden Sie auf einen Konkurrenten wechseln. Daher sind PNs ein Thema, mit dem sich App-Entwickler auf jeden Fall beschäftigen sollten.
Die Einsatzszenarien sind vielseitig. Nicht nur Messenger wie WhatsApp, Facebook und Co. benötigen Benachrichtigungen, auch Kalender, Nachrichten oder Börsen-Anwendungen nutzen PNs, um wichtige Ereignisse schnell zur Verfügung zu stellen, ohne dass der Nutzer gezwungen ist, die App zu öffnen und manuell zu kontrollieren, ob sich etwas für ihn Wichtiges ereignet hat.
Um PNs in eine App einbauen zu können, gilt es zuerst, das Prinzip zu verstehen (siehe Bild 2):
- Nachdem eine App installiert wurde, fragt der Push-Notification-Client des Betriebssystems beim jeweiligen Push-Notification-Dienst (Push Notification Service, PNS) nach einem Handle und gibt dieses zurück an die App.
- Die App gibt das Handle an das Backend weiter, das diesen wieder an den Azure Notification Hub (ANH) weiterreicht und sich dort registriert. Zu dem Device-Handle werden Tags wie zum Beispiel Nutzername oder Gruppen gespeichert.
- Soll eine Benachrichtigung an einen Nutzer geschickt werden, sendet das Backend eine Anfrage inklusive eines Tags an den Azure Notification Hub. Dieser sucht zu dem Tag das passende Handle heraus.
- Der Azure Notification Hub schickt die Benachrichtigung an den zum Handle passenden Push Notification Service, der die Benachrichtigung wiederum an den entsprechenden Client weiterleitet.
- Der Notification Hub löscht abgelaufene Handles, wenn der PNS diese als nicht mehr aktuell zurückliefert.
Um für eine Anwendung Push-Benachrichtigungen verwenden zu können, muss das unter Azure gehostete Backend (Azure Mobile Apps) dafür vorbereitet werden. Wie dieses Backend angelegt wird, hat wieder bereits der genannte Artikel erklärt [1]. Folgende Schritte sind nun notwendig, um das Backend für PNs zu konfigurieren:
- Einen neuen Hub für Benachrichtigungen anlegen: In den Einstellung kann unter Push ein neuer Azure Notification Hub hinzugefügt werden.
- Die App beim Push-Benachrichtigungsdienst registrieren: Für jedes Betriebssystem (für Android [2], iOS [3] oder Windows [4]) muss die App einzeln beim jeweiligen Push-Benachrichtigungsdienst registriert werden. Firebase, der entsprechende Android-Dienst, gibt daraufhin einen APISchlüssel zurück, der in Azure im Hub einzutragen ist. Auch die PN-Dienste von Windows und iOS liefern ähnliche Schlüssel, die ebenso im Notification Hub hinterlegt werden.
- Das Backend-Projekt erweitern: Das Backend-Projekt muss nun noch ergänzt werden, um das Versenden von Benachrichtigungen zu bestimmten Zeitpunkten zu ermöglichen, zum Beispiel wenn ein neues Item gespeichert wird (siehe den Beispielcode in Listing 1). Wie diese Benachrichtigungen aussehen sollen, ist dem Entwickler freigestellt. In dem Beispiel wird einfach unter dem Namen messageParam ein Text zusammengestellt.
Nachdem das Backend für das Versenden von Push-Nachrichten vorbereitet ist, muss die App für den Empfang von PNs erweitert werden. Als Beispiel dient die Xamarin-App, die ebenfalls wie das beispielhafte Backend-Projekt im Azure-Portal zur Verfügung steht, wenn Sie eine Azure-Mobile-Anwendung anlegen. Mit ihr lassen sich Aufgaben verwalten und sie soll Benachrichtigung anzeigen, sobald eine neue Aufgabe angelegt wird.
Folgende Schritte müssen für jedes Betriebssystem ausgeführt werden, hier am Beispiel der notwendigen Schritte für Android:
Zuerst muss die App für PNs registriert werden. Dazu ist…