Aerogear Unified Push Server (UPS) macht es möglich über einen Aufruf Push-Nachrichten an verschiedene Gerätefamilien zu versenden. Dadurch spielt UPS ideal mit Xamarin zusammen. Es können Geräte mit iOS, Android und Windows Betriebssystem registriert werden. Aerogear bietet auch noch andere Push-Nachrichten Dienste, die jedoch für Xamarin keine Rolle spielen.

Leider bietet Aerogear keine Anleitung für Xamarin. Es gibt jedoch ein Modul für c#, aus dem man viel Sourcecode herausziehen und etwas abändern kann, um sich beim UPS zu registrieren.

Andere Blogs zum Thema Aerogear:

Registrieren des Gerätes beim Push-Nachrichten Dienst (APNS, GCM, WNS)

Zunächst ist die Registrierung des Gerätes beim jeweiligen Push Service nötig. Dies kann nach Anleitung von Xamarin erfolgen:

APNS (Apple Push Notification Service):
https://developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/ios/remote_notifications_in_ios/

https://developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/android/remote_notifications_in_android/

GCM (Goolge Cloud Messaging), inkl. Kapitel „Register with GCM“:
https://developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/android/google-cloud-messaging/

WNS (Windows Push Notification Service):

Haben wir selber noch nicht getestet, aber man sollte der Anleitung von Aerogear folgen können, da diese ja für c# geschrieben wurden:
https://aerogear.org/docs/unifiedpush/aerogear-push-windows/guides/#windows-setup

Auch das Modul für Windows, das wir ja auch als Vorlage verwendet haben, kann über NuGet installiert und verwendet werden:
https://aerogear.org/windows/

(Falls wir in Zukunft Push-Nachrichten für Windows implementieren werden und es hier zu Problemen kommt, wird es ein Update dieses Blog Eintrags geben)

Exemplarisch die Registrierung beim APNS.
In der AppDelegate.cs.
APNS kontaktieren unter FinishedLaunching:

Antwort von APNS empfangen und DeviceToken speichern.

 

RegisterUPS() stößt nun die Registrierung des Geräts beim UPS an.

Hat die Registrierung mit dem jeweiligen Dienst geklappt, liefert dieser einen DeviceToken zurück, den wir dann an Aerogear übergeben müssen.

Registrierung beim Aerogear UPS

Voraussetzung für die Kommunikation mit dem Aerogear Server sind folgende Pakete, die in Xamarin hinzugefügt werden müssen:

DeviceInfo (Xam.Plugin.DeviveInfo)
Json (Newtonsoft.Json)

Wie schon erwähnt übernehmen wir Funktionen auf dem Aerogear Windows Modul und passen diese leicht an. Genauer gesagt geht es um den UPSHttpClient, den man sich hier auf GitHub ansehen kann:
https://github.com/aerogear/aerogear-windows-push/blob/master/aerogear-windows-push/UPSHttpClient.cs

Wir erstellen eine neue C# Klasse mit dem Namen UPSRegister.

Sourcecode der Klasse:

Die Klasse sollte weitgehend selbsterklärend sein. Was wir der Klasse hinzugefügt haben, ist die Möglichkeit auch Anfragen an einen Server zu senden, der nur über ein selbstsigniertes SSL Zertifikat verfügt.

Die Funktion Validator bestätigt, dass die Verbindung zum Server vertrauenswürdig ist. In Zeile XX wird diese verwendet:

ServicePointManager.ServerCertificateValidationCallback = Validator;

Ohne diese Ergänzung wird die Registrierung scheitern und das wahrscheinlich ohne eindeutige Fehlermeldung. Hat man ein bestätigtes SSL Zertifikat auf dem Server, dann sind diese Ergänzung unnötig und können herausgenommen werden.

Jetzt können wir die neue Klasse instanziieren und die Registrierung anstoßen. Hierfür gehen wir zurück in die AppDelegate.cs für iOS bzw. RegistrationIntentService.cs (siehe Xamarin GCM Anleitung) für Android und implementieren die Methode RegisterUPS(). Diese haben wir ja schon in RegisteredForRemoteNotifications im iOS Beispiel verwendet.

RegisterUPS Sourcecode:

Unter Android wird RegisterUPS in der Methode SendRegistrationToAppServer (string token) aufgerufen.

In den Zeilen 4-6 müssen die Platzhalter mit den Informationen aus Aerogear im der jeweiligen Variant zum benutzten OS ersetzt werden.

Hat alles geklappt, kann man sein Gerät nun bei Aerogear registrieren und es ist bereit, Push-Nachrichten zu empfangen.

Empfangen von Push-Nachrichten

Das Empfangen von Push-Nachrichten kann wieder analog der jeweiligen Anleitungen von Xamarin(iOS, Andoid) und Aerogear (Windows) erfolgen.

Beispiel iOS in AppDelegate.cs:

Die Methode ProcessNotifocation kann auf verschiedene Weisen implementiert werden.

Ein Beispiel:

Die eigentliche Nachricht liegt verschachtelt im NSDictionary options. Unter dem Schlüssel aps gibt es noch einmal ein NSDictionary das wiederum unter dem Schlüssel alert ein weiteres NSDictionary enthält. Dort liegt nun die Nachricht unter dem Schlüssel body.

Die Nachricht kann nun nach Wunsch verarbeitet werden. Beispielsweise als Alert ausgegeben, wie es im Beispiel geschieht.