UWP Windows Push Notifications

Vor vielen Jahren habe ich mit Silverlight und den Live Services Push Nachrichten verschickt, um Server Push zu empfangen. 2012 habe ich dann mit Windows 8 die sogenannten Windows Push Notification Services genutzt. Da das Store App Modell sich von Desktop Anwendungen wesentlich unterscheidet, sind auch die nötigen Szenarien unterschiedlich.

Nachrichten können von einem Service verschickt werden an

  • die Kachel
  • als Toast Nachricht
  • ein App aktivieren
  • in eine laufende App Daten schicken

Gerade letzter Fall soll gelöst werden. Die Universal Windows Platform App soll sogenannte RAW Notifications empfangen.

Die folgende Beschreibung ist aus Selbstversuch entstanden und ist keine Gewähr für den optimalen Weg.

Im ersten Schritt wird eine Windows Store App mit dem Microsoft App Store verknüpft. Das kann direkt aus dem Visual Studio Projekt per rechtsklick auf das Projekt erfolgen (Store- App mit Store verknüpfen)

Der öffentliche Appname lässt sich in Visual Studio oder im Portal (https://developer.microsoft.com/de-de/windows) reservieren. Am Ende muss man ohnehin das Webportal im Browser öffnen. Dies bedeutet noch keine Veröffentlichung im eigentlichen Sinne.

In Developer Portal in den Einstellungen der App findet sich rechts unten ein Bereich Pushbenachrichtigungen. Dort steht ein Link auf erste Schritte. Schon hier erkennbar sind zwei verschiedene Push Dienste, die Microsoft Push Services (MPNS) und die Windows Notification (WNS) Services. Verwendet wird hier letzterer

push1

Nach Auswahl des Links- Live Services Site –werden das Fromular mit  Daten zur App ergänzt die zur Registrierung nötig sind.

push3_Ink_LI

Das Secret und die App ID sind dann sozusagen der Benutzer Account der App. Am besten die Browserseite offen lassen. Für den Push benötigt man aber eine Azure App. Diese wird im Azure Portal angelegt https://portal.azure.com/ Azure App Service + hinzufügen. Allerdings muss dann die Option Push konfiguriert werden

push4

Die Warnmeldung besagt, das ein Azure Notification Hub erstellt werden muss. Diesem Hub gibt man einen Namen den man später noch benötigt.

push5

Der Zusatz Hub im Namen wurde gewählt um in den viele Begriffen später den Überblick zu behalten. Woher kommt’s oder wo ist es konfiguriert? Die Anzahl der Dialoge ist recht umfangreich.

Im nächsten Untermenü - Pushbenachrichtigung konfigurieren - kann aus einer Reihe von Push Diensten man auswählen wie Google, Amazon, Apple der eben WNS.

push7

Die Sache mit den Tags ignoriert man am besten für den ersten Test. Kurz gesagt lassen sich damit Benachrichtigungsgruppen organisieren.

Es werden vorhin erwähnte Authentifizierungsdaten eingetragen bzw rüberkopiert

push9_Ink_LI

Woher nehmen und nicht stehlen? Hoffentlich sind die Browser Fenster noch offen, so dass man Application Secret und App ID rauskopieren kann.

push8_Ink_LI

Nun wird wieder nach Visual Studio gewechselt um UWP Code zu schreiben der Notifications empfangen kann. Dazu wir das Nuget Paket Microsoft.Azure.Notificationhub dem Projekt hinzugefügt

push10

Aus den C# Beispielen zusammenkopiert. Wichtig sind der Hubname, der Endpunkt und der SharedAccessKey. Kombiniert Connection String genannt.

   1:     Private Async Sub InitNotificationsAsync()
   2:          Dim channel = Await PushNotificationChannelManager.
CreatePushNotificationChannelForApplicationAsync()
   3:          Dim Hub = New NotificationHub("ppedvhub1",
   4:  "Endpoint=sb://ppedvpush.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=b8aJdXHX/….X4dxaVDEWnbI4=")
   5:          Await Hub.RegisterNativeAsync(channel.Uri)
   6:          AddHandler channel.PushNotificationReceived, 
AddressOf channel_PushNotificationReceived
   7:      End Sub
   8:   
   9:      Private Sub channel_PushNotificationReceived(sender As PushNotificationChannel,
args As PushNotificationReceivedEventArgs)
  10:   
  11:      End Sub

 

Wo kommen nun diese Daten wieder her? Im Azure Portal können alle eingerichteten Ressourcen aufgelistet werden. Der Notification Hub taucht als oranges Icon auf.

image

In - Verwalten – Zugriffsrichtlinien - finden sich zwei Endpunkte mit Rechten für Lesen oder Schreiben.

push12

Die Endpunkte unterscheiden sich von den Service URIs durch den Präfix sb: Dieser Endpunkt kommt im vorigen Code Schnippsel zur Anwendung.

Die Rechte der Endpoints können natürlich auch konfiguriert werden.

push13

Nun kann der Push getestet werden. Auch diese Funktion findet sich im Azure Portal

push11

Es wird eine Raw Notification geschickt. Der Inhalt steht dann in den Eventargs der UWP App zur Verfügung.

Nun kommt noch eine Winforms Anwendung hinzu, die Nachrichten an per Service Bus an die Verbunden Client schicken kann.

   1:              NotificationHubClient hub = NotificationHubClient
   2:              .CreateClientFromConnectionString(
"Endpoint=sb://ppedvpush.servicebus.windows.net/;
SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=b8aJdX nbI4="
   3:                 , "ppedvhub1");
   4:              
   5:                 try
   6:              {
   7:                  Notification no = new WindowsNotification("Burghausen");
   8:                  no.Headers.Add("X-WNS-Type", @"wns/raw");
   9:                 var result=await hub.SendNotificationAsync(no);
  10:                  Console.WriteLine(result.State.ToString());
  11:              }
  12:              catch (System.Exception ex)
  13:              {
  14:              }
  15:          }

Völlig unlogisch sind nun die Parameter beim Verbindungsaufbau “Connection String” und Hub vertauscht im vergleich zum vorigen Code Beispiel. Da es sich um eine Raw Nachricht handelt, muss noch ein passender Header eingefädelt werden.

Im Erfolgsfall wird nach einem Post mit einer HTTP 201 Statusmeldung geantwortet. Per Fiddlertool kann man sich für die Fehlersuche dazwischen schalten

push20_Ink_LI

Eine weitere nicht leicht zu findende Möglichkeit der Analyse von ein und ausgehenden Nachrichten befindet sich nur im alten Azure Portal

push19

Man erkennt die eingegangen Nachrichten und die versendeten auf der Zeitachse. Selbst die einzelnen Geräte (Devices) lassen sich herausfinden. Das auch über Visual Studio und dem Server Explorer. Der Screenshot stammt aus Visual Studio 2017 mit installieren Azure SDK.

push16_Ink_LI

Nach Rechtsklick auf den Hub erscheint per Popup Dialog auch die Möglichkeit Nachrichten zu versenden

push17

Im zweiten Dialog kann man die Anzahl der registrierten Geräte erkennen und auch verwalten

push18

In Summe ist es mit viel Aufwand verbunden, eine UWP Anwendung NWS Push zu aktualisieren. Eine Reihe von ID’s, Secrets und Urls. App Services, Service Bus und Notification Hub. Keine durchgängig Wizard gesteuerte UI. Als Alternative könnte man mit SignalR das gleich in wenigen Minuten umsetzen.

Kommentare sind geschlossen