Windows 8 Push Notification Services WNS

In frühen Windows Versionen war einen Nachricht vom Betriebssystem ein übliches Szenario für den Entwickler. Gängige Anwendungen stellen dazu eine dauerhafte Verbindung (Connection) zu z.B. einer Datenbank her. Solche statefull Szenarien brachten schnell die Server Dienste an die physikalischen Leistungsgrenzen, so das auf einen asynchronen Ansatz gewechselt wurde. Webserver sind ein klassischer Ansatz dafür. Aber plötzlich fehlt die Möglichkeit dem Client etwas mitzuteilen ohne das dieser einen kontinuierlichen Pull oder Request ausführen muss. Im Web Umfeld gibt es nun die neuen Websockets, die man auch in Windows 8 METRO Anwendungen u.a. für Push  verwenden kann.

Windows 8 hat aber andere Anforderungen., die mit Windows Push Notification Services gelöst werden können

  • Push in eine laufende METRO Anwendung
  • Push auf eine inaktive METRO Anwendung auf die Tiles, Badges, und MessageDialog PopUp
  • Push auf Lockscreen um z.B neue Mails anzuzeigen

Die Dokumentation zum Thema ist durchaus umfangreich für mich aber verwirrend. Ein Fundstück behandelt die Erstellung eines Azure Beispiels in nur 4 Minuten und Techno Musik hinterlegt. Das dort angesprochene Windows Azure Toolkit for Windows 8 , lässt sich weder installieren noch ist es überhaupt nötig.

Für einen minimalistischen Prototyp braucht man drei Dinge

  1. Registrierung bei Push Service
  2. METRO Anwendung die den Push Kanal abonniert
  3. Testanwendung um Push Nachrichten u versenden.(zb WPF)

 

Um das ganze einfach zu gestalten, lasse ich Punkt drei weg, Sie lernen nur das Konzept und nicht die Anwendung kennen.

Es gibt wohl mehrerer Möglichkeiten um einen Push Service anzulegen, ohne Windows 8 Developer Account ( und den aktuell   quasi keiner hat) muss man einen Live Service nutzen. Ist kostenfrei und kann 100 Kanäle veralten.

Ich gehe mal davon aus das den Wizard jeder bedienen kann.

image

Nachdem man seine Anwendung erzeugt hat. muss im Manifest der METRO APP die Infos aus der Website eingegeben werden,

image

image

Die (Punkt 3) Client Anwendung für das Senden der Push Nachrichten, benötigt für die oAuth Authentifizierung das SECRET und die SID aus dem Web Dialog.

Die Windows 8 METRO styled APP kann dann mit einer Zeile Code  aus dem WinRT Networking Namensraum  den Kanal öffnen.

 Dim op = Await Windows.Networking.PushNotifications.PushNotificationChannelManager.
CreatePushNotificationChannelForApplicationAsync()

 

Ganz wichtig ist der Kanalname, den man den man als Rückgabe (hier op.Uri) erhält.  Diesen braucht die Push Anwendung als dritten Parameter um auch mit dem richtigen Push Service zu kommunizieren.

Damit kann das Windows 8 System für Badge, Tile, Toast und Raw Nachrichten entgegen nehmen. Hier ein Screenshot für Badge. Es wurde der String 99 gesendet, der dann rechts unten im Eck erscheint.

image

Wenn auch die METRO APP das Event mitbekommen soll muss es registriert werden.

Private Async Function Button_Click_1(sender As Object, e As RoutedEventArgs) As Task
        Dim op = Await Windows.Networking.PushNotifications.PushNotificationChannelManager.
        CreatePushNotificationChannelForApplicationAsync()
        AddHandler op.PushNotificationReceived, AddressOf gepushed
        Layoutroot1.DataContext = op
End Function

Die Rücksprung Prozedur läuft natürlich im Background Thread und muss der Dispatcher erst synchronisiert werde um in der UI einen MessageDialog starten zu können.

Private Async Sub gepushed(sender As Windows.Networking.PushNotifications.PushNotificationChannel, args As 
Windows.Networking.PushNotifications.PushNotificationReceivedEventArgs) Select Case args.NotificationType Case Windows.Networking.PushNotifications.PushNotificationType.Badge Dispatcher.InvokeAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, Async Sub(s As Object, e As InvokedHandlerArgs) Dim msg As MessageDialog = New MessageDialog(args.BadgeNotification.Content.GetXml) Await msg.ShowAsync() End Sub, sender, args) End Select End Sub

 

Die Methode hat etwas Overhead. Der Case Selector filtert mit Badge schon eines der möglichen vier Notification Events heraus.

Nochmal zur Verdeutlichung Der Pusher (Punkt 3) kann mit jedwelcher Technologie geschrieben werden, Also z.B, ASP.NET, WPF, WInforms, Silverlight und co. Es gibt jeweils XML Formate mit denen die Push Nachrichten erstellt und per HTTP POST an den WNS gesendet werden müssen.

Einsatzzweck sind im begrenzten Umfang Benachrichtigungen wie neue SMS oder eMail. Windows 8 kennt einen Connected Stand-by Modus im de auch die WNS Nachrichten, mit technologobedingter Verzögerung zugestellt werden.

Kommentar schreiben