Übersicht über unformatierte Benachrichtigungen

Unformatierte Benachrichtigungen sind kurze, allgemeine Pushbenachrichtigungen. Sie dienen ausschließlich zu Anweisungszwecken und enthalten keine UI-Komponente. Wie bei anderen Pushbenachrichtigungen liefert das Feature Windows-Pushbenachrichtigungsdienste (Windows Push Notification Services, WNS) unformatierte Benachrichtigungen von Ihrem Clouddienst an Ihre App.

Sie können unformatierte Benachrichtigungen für eine Vielzahl von Zwecken verwenden, z. B. zum Auslösen der App zum Ausführen einer Hintergrundaufgabe, wenn der Benutzer die App dazu berechtigt hat. Wenn Sie WNS für die Kommunikation mit Ihrer App verwenden, können Sie den Verarbeitungsaufwand beim Erstellen persistenter Socketverbindungen, senden von HTTP GET-Nachrichten und anderen Dienst-zu-App-Verbindungen vermeiden.

Wichtig

Um unformatierte Benachrichtigungen zu verstehen, sollten Sie sich mit den konzepten vertraut machen, die in der Übersicht über die Windows-Pushbenachrichtigungsdienste (Windows Push Notification Services, WNS) erläutert werden.

 

Wie bei Popup-, Kachel- und Signal-Pushbenachrichtigungen wird eine unformatierte Benachrichtigung vom Clouddienst Ihrer App über einen zugewiesenen URI (Uniform Resource Identifier) an WNS gesendet. WNS übermittelt wiederum die Benachrichtigung an das Gerät und das Benutzerkonto, das diesem Kanal zugeordnet ist. Im Gegensatz zu anderen Pushbenachrichtigungen verfügen unformatierte Benachrichtigungen nicht über ein angegebenes Format. Der Inhalt der Nutzlast wird vollständig von der App definiert.

Als Abbildung einer App, die von unformatierten Benachrichtigungen profitieren könnte, sehen wir uns eine theoretische Dokumentzusammenarbeits-App an. Erwägen Sie zwei Benutzer, die dasselbe Dokument gleichzeitig bearbeiten. Der Clouddienst, der das freigegebene Dokument hostt, kann unformatierte Benachrichtigungen verwenden, um jeden Benutzer zu benachrichtigen, wenn Änderungen vom anderen Benutzer vorgenommen werden. Die unformatierten Benachrichtigungen enthalten nicht unbedingt die Änderungen am Dokument, sondern signalisieren stattdessen die Kopie der App, sich an den zentralen Speicherort zu wenden und die verfügbaren Änderungen zu synchronisieren. Durch die Verwendung von unformatierten Benachrichtigungen kann die App und ihr Clouddienst den Aufwand für die Aufrechterhaltung dauerhafter Verbindungen während des gesamten Öffnens des Dokuments sparen.

Funktionsweise von unformatierten Benachrichtigungen

Alle unformatierten Benachrichtigungen sind Pushbenachrichtigungen. Daher gilt das Setup, das zum Senden und Empfangen von Pushbenachrichtigungen erforderlich ist, auch für unformatierte Benachrichtigungen:

  • Sie müssen über einen gültigen WNS-Kanal verfügen, um unformatierte Benachrichtigungen zu senden. Weitere Informationen zum Abrufen eines Pushbenachrichtigungskanals finden Sie unter Anfordern, Erstellen und Speichern eines Benachrichtigungskanals.
  • Sie müssen die Internetfunktion im Manifest Ihrer App einschließen. Im Manifest-Editor von Microsoft Visual Studio finden Sie diese Option unter der Registerkarte "Funktionen" als Internet (Client). Weitere Informationen finden Sie unter Funktionen.

Der Textkörper der Benachrichtigung befindet sich in einem app-definierten Format. Der Client empfängt die Daten als mit Null beendete Zeichenfolge (HSTRING), die nur von der App verstanden werden muss.

Wenn der Client offline ist, werden unformatierte Benachrichtigungen nur dann von WNS zwischengespeichert, wenn der X-WNS-Cache-Policy-Header in der Benachrichtigung enthalten ist. Es wird jedoch nur eine unformatierte Benachrichtigung zwischengespeichert und übermittelt, sobald das Gerät wieder online ist.

Es gibt nur drei mögliche Pfade für eine unformatierte Benachrichtigung für den Client: Sie werden über ein Benachrichtigungsübermittlungsereignis an Ihre ausgeführte App übermittelt, an eine Hintergrundaufgabe gesendet oder verworfen. Wenn der Client offline ist und WNS versucht, eine unformatierte Benachrichtigung zu übermitteln, wird die Benachrichtigung gelöscht.

Erstellen einer unformatierten Benachrichtigung

Das Senden einer unformatierten Benachrichtigung ähnelt dem Senden einer Kachel-, Popup- oder Signal-Pushbenachrichtigung mit den folgenden Unterschieden:

  • Der HTTP-Inhaltstypheader muss auf "application/octet-stream" festgelegt werden.
  • Der HTTP X-WNS-Type-Header muss auf "wns/raw" festgelegt werden.
  • Der Benachrichtigungstext kann eine beliebige Zeichenfolgennutzlast enthalten, die kleiner als 5 KB ist, darf jedoch keine leere Zeichenfolge sein.

Unformatierte Benachrichtigungen sollen als kurze Nachrichten verwendet werden, die Ihre App auslösen, um eine Aktion auszuführen, z. B. direkt mit dem Dienst in Verbindung zu treten, um eine größere Datenmenge zu synchronisieren oder basierend auf dem Benachrichtigungsinhalt eine lokale Zustandsänderung vorzunehmen. Beachten Sie, dass WNS-Pushbenachrichtigungen nicht garantiert werden können, sodass Ihre App und Der Clouddienst die Möglichkeit berücksichtigen müssen, dass die unformatierte Benachrichtigung den Client möglicherweise nicht erreicht, z. B. wenn der Client offline ist.

Weitere Informationen zum Senden von Pushbenachrichtigungen finden Sie unter Schnellstart: Senden einer Pushbenachrichtigung.

Empfangen einer unformatierten Benachrichtigung

Es gibt zwei Möglichkeiten, über die Ihre App unformatierte Benachrichtigungen empfangen kann:

Eine App kann beide Mechanismen verwenden, um unformatierte Benachrichtigungen zu empfangen. Wenn eine App sowohl den Ereignishandler für die Benachrichtigungsübermittlung als auch Hintergrundaufgaben implementiert, die durch unformatierte Benachrichtigungen ausgelöst werden, hat das Benachrichtigungsübermittlungsereignis Priorität, wenn die App ausgeführt wird.

  • Wenn die App ausgeführt wird, hat das Benachrichtigungsübermittlungsereignis Vorrang vor der Hintergrundaufgabe, und die App hat die erste Möglichkeit, die Benachrichtigung zu verarbeiten.
  • Der Ereignishandler für die Benachrichtigungsübermittlung kann durch Festlegen der PushNotificationReceivedEventArgs.Cancel-Eigenschaft des Ereignisses auf "true" festlegen, dass die unformatierte Benachrichtigung nicht an die Hintergrundaufgabe übergeben werden soll, nachdem der Handler beendet wurde. Wenn die Cancel-Eigenschaft auf "false " festgelegt ist oder nicht festgelegt ist (der Standardwert ist "false"), löst die unformatierte Benachrichtigung die Hintergrundaufgabe aus, nachdem der Ereignishandler für die Benachrichtigungsübermittlung seine Arbeit ausgeführt hat.

Benachrichtigungsübermittlungsereignisse

Ihre App kann ein Benachrichtigungsübermittlungsereignis (PushNotificationReceived) verwenden, um unformatierte Benachrichtigungen zu empfangen, während die App verwendet wird. Wenn der Clouddienst eine unformatierte Benachrichtigung sendet, kann die ausgeführte App sie empfangen, indem das Benachrichtigungsübermittlungsereignis im Kanal-URI behandelt wird.

Wenn Ihre App nicht ausgeführt wird und keine Hintergrundaufgaben verwendet, werden alle unformatierten Benachrichtigungen, die an diese App gesendet werden, beim Beleg von WNS gelöscht. Um zu vermeiden, dass die Ressourcen Ihres Clouddiensts geschwenkt werden, sollten Sie die Implementierungslogik für den Dienst erwägen, um nachzuverfolgen, ob die App aktiv ist. Es gibt zwei Quellen dieser Informationen: Eine App kann dem Dienst explizit mitteilen, dass er bereit ist, Benachrichtigungen zu empfangen, und WNS kann dem Dienst mitteilen, wann er beendet wird.

  • Die App benachrichtigt den Clouddienst: Die App kann sich an den Dienst wenden, um sie darüber zu informieren, dass die App im Vordergrund ausgeführt wird. Der Nachteil dieses Ansatzes besteht darin, dass die App am Ende sehr häufig mit Ihrem Dienst in Kontakt treten kann. Es hat jedoch den Vorteil, dass der Dienst immer weiß, wann die App bereit ist, eingehende unformatierte Benachrichtigungen zu empfangen. Ein weiterer Vorteil ist, dass der Dienst, wenn die App mit seinem Dienst kontaktiert, unformatierte Benachrichtigungen an die spezifische Instanz dieser App senden kann, anstatt zu übertragen.

  • Der Clouddienst antwortet auf WNS-Antwortnachrichten : Ihr App-Dienst kann die von WNS-DeviceConnectionStatus zurückgegebenen X-WNS-NotificationStatus - und X-WNS-DeviceConnectionStatus-Informationen verwenden, um festzustellen, wann das Senden unformatierter Benachrichtigungen an die App beendet werden soll. Wenn Ihr Dienst eine Benachrichtigung als HTTP POST an einen Kanal sendet, kann er eine der folgenden Nachrichten in der Antwort empfangen:

    • X-WNS-NotificationStatus: abgelegt: Dies gibt an, dass die Benachrichtigung nicht vom Client empfangen wurde. Es ist eine sichere Annahme, dass die verworfene Antwort durch ihre App verursacht wird, die nicht mehr im Vordergrund auf dem Gerät des Benutzers liegt.
    • X-WNS-DeviceConnectionStatus: disconnected or X-WNS-DeviceConnectionStatus: tempconnected: This indicates that the Windows client no longer has a connection to WNS. Beachten Sie, dass Sie diese Nachricht von WNS erhalten möchten, indem Sie den X-WNS-RequestForStatus-Header im HTTP POST der Benachrichtigung festlegen.

    Der Clouddienst Ihrer App kann die Informationen in diesen Statusmeldungen verwenden, um Kommunikationsversuche über unformatierte Benachrichtigungen zu beenden. Der Dienst kann das Senden unformatierter Benachrichtigungen fortsetzen, sobald er von der App kontaktiert wird, wenn die App wieder in den Vordergrund wechselt.

    Beachten Sie, dass Sie sich nicht auf X-WNS-NotificationStatus verlassen sollten, um festzustellen, ob die Benachrichtigung erfolgreich an den Client übermittelt wurde.

    Weitere Informationen finden Sie unter Anforderungs- und Antwortheader des Pushbenachrichtigungsdiensts

Hintergrundaufgaben, die durch unformatierte Benachrichtigungen ausgelöst werden

Wichtig

Bevor Hintergrundaufgaben für unformatierte Benachrichtigungen verwendet werden, muss eine App über BackgroundExecutionManager.RequestAccessAsync Hintergrundzugriff gewährt werden.

 

Ihre Hintergrundaufgabe muss bei einem PushNotificationTrigger registriert werden. Wenn sie nicht registriert ist, wird die Aufgabe nicht ausgeführt, wenn eine unformatierte Benachrichtigung empfangen wird.

Eine Hintergrundaufgabe, die durch eine unformatierte Benachrichtigung ausgelöst wird, ermöglicht es dem Clouddienst Ihrer App, sich an Ihre App zu wenden, auch wenn die App nicht ausgeführt wird (obwohl sie möglicherweise ausgelöst wird, dass sie ausgeführt wird). Dies geschieht, ohne dass die App eine kontinuierliche Verbindung beibehalten muss. Unformatierte Benachrichtigungen sind der einzige Benachrichtigungstyp, der Hintergrundaufgaben auslösen kann. Während Popup-, Kachel- und Signal-Pushbenachrichtigungen jedoch keine Hintergrundaufgaben auslösen können, können Hintergrundaufgaben, die durch unformatierte Benachrichtigungen ausgelöst werden, Kacheln aktualisieren und Popupbenachrichtigungen über lokale API-Aufrufe aufrufen.

Als Abbildung der Funktionsweise von Hintergrundaufgaben, die durch unformatierte Benachrichtigungen ausgelöst werden, betrachten wir eine App, die zum Lesen von E-Books verwendet wird. Zuerst kauft ein Benutzer ein Buch online, möglicherweise auf einem anderen Gerät. Als Reaktion darauf kann der Clouddienst der App eine unformatierte Benachrichtigung an jedes der Geräte des Benutzers senden, mit einer Nutzlast, die besagt, dass das Buch gekauft wurde und die App sie herunterladen sollte. Die App kontaktiert dann direkt den Clouddienst der App, um einen Hintergrunddownload des neuen Buchs zu starten, damit das Buch später, wenn der Benutzer die App startet, bereits vorhanden ist und zum Lesen bereit ist.

Um eine unformatierte Benachrichtigung zum Auslösen einer Hintergrundaufgabe zu verwenden, muss Ihre App Folgendes ausführen:

  1. Anfordern der Berechtigung zum Ausführen von Aufgaben im Hintergrund (die der Benutzer jederzeit widerrufen kann) mithilfe von BackgroundExecutionManager.RequestAccessAsync.
  2. Implementieren Sie die Hintergrundaufgabe. Weitere Informationen finden Sie unter "Unterstützen Ihrer App mit Hintergrundaufgaben"

Ihre Hintergrundaufgabe wird dann als Reaktion auf den PushNotificationTrigger aufgerufen, jedes Mal, wenn eine unformatierte Benachrichtigung für Ihre App empfangen wird. Ihre Hintergrundaufgabe interpretiert die appspezifische Nutzlast der unformatierten Benachrichtigung und wirkt darauf.

Für jede App kann jeweils nur eine Hintergrundaufgabe ausgeführt werden. Wenn eine Hintergrundaufgabe für eine App ausgelöst wird, für die bereits eine Hintergrundaufgabe ausgeführt wird, muss die erste Hintergrundaufgabe abgeschlossen werden, bevor die neue ausgeführt wird.

Weitere Ressourcen

Weitere Informationen erhalten Sie, indem Sie das Beispiel für unformatierte Benachrichtigungen für Windows 8.1 und das Beispiel für Push- und regelmäßige Benachrichtigungen für Windows 8.1 herunterladen und den Quellcode in Ihrer Windows 10-App erneut verwenden.