Anfordern, Erstellen und Speichern eines Benachrichtigungskanals

Sie können einen Kanal-URI (Uniform Resource Identifier) öffnen, über den Ihre App Pushbenachrichtigungen empfangen kann. Anschließend können Sie den Kanal an Ihren Server senden, der ihn zum Senden von Pushbenachrichtigungen verwendet, und ihn schließen, wenn Sie ihn nicht mehr benötigen. Ein Kanal ist eine eindeutige Adresse, die einen einzelnen Benutzer auf einem einzelnen Gerät für eine bestimmte App oder sekundäre Kachel darstellt.

Sie sollten bei jedem Start der App einen neuen Kanal anfordern und den Cloudserver aktualisieren, wenn sich der URI ändert. Ausführliche Informationen finden Sie unter Hinweise.

Wichtig

Benachrichtigungskanäle laufen nach 30 Tagen automatisch ab.

Wichtige Informationen

Technologie

  • Windows-Runtime

Voraussetzungen

  • Vertrautheit mit Konzepten, Anforderungen und Vorgängen der Windows-Pushbenachrichtigungsdienste (Windows Push Notification Services, WNS). Diese werden in der Übersicht über die Windows-Pushbenachrichtigungsdienste (Windows Push Notification Services, WNS) erläutert.

Anweisungen

Schritt 1: Hinzufügen von Namespacedeklarationen

Windows.UI.Notifications enthält die Popup-APIs.

using Windows.UI.Notifications;
using Windows.Data.Xml.Dom;
using Windows.Networking.PushNotifications;

Schritt 2: Anfordern eines Kanal-URI

In diesem Beispiel wird ein Kanal-URI angefordert. Die Anforderung wird an die Benachrichtigungsclientplattform gestellt, die wiederum den Kanal-URI von WNS anfordert. Wenn die Anforderung abgeschlossen ist, ist der zurückgegebene Wert ein PushNotificationChannel-Objekt , das den URI enthält.

PushNotificationChannel channel = null;

try
{
    channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
}

catch (Exception ex)
{ 
    // Could not create a channel. 
}

Schritt 3: Senden des Kanal-URI an Ihren Server

Der Kanal-URI wird in einer HTTP POST-Anforderung verpackt und an den Server gesendet.

Wichtig

Sie sollten diese Informationen auf sichere Weise an Ihren Server senden. Sie sollten erfordern, dass sich die App beim Übertragen des Kanal-URI bei dem Server authentifiziert. Verschlüsseln Sie die Informationen, und verwenden Sie ein sicheres Protokoll wie HTTPS.

String serverUrl = "http://www.contoso.com";

// Create the web request.
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(serverUrl);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
byte[] channelUriInBytes = System.Text.Encoding.UTF8.GetBytes("ChannelUri=" + channel.Uri);

// Write the channel URI to the request stream.
Stream requestStream = await webRequest.GetRequestStreamAsync();
requestStream.Write(channelUriInBytes, 0, channelUriInBytes.Length);

try
{
    // Get the response from the server.
    WebResponse response = await webRequest.GetResponseAsync();
    StreamReader requestReader = new StreamReader(response.GetResponseStream());
    String webResponse = requestReader.ReadToEnd();
}

catch (Exception ex)
{
    // Could not send channel URI to server.
}

Hinweise

Anfordern von Kanälen

Sie sollten jedes Mal, wenn Ihre App aufgerufen wird, einen neuen Kanal anfordern, indem Sie die folgende Logik verwenden:

  1. Fordern Sie einen Kanal an.
  2. Vergleichen Sie den neuen Kanal mit Ihrem vorherigen Kanal. Wenn der Kanal identisch ist, müssen Sie keine weiteren Maßnahmen ergreifen. Beachten Sie, dass Dies erfordert, dass Ihre App den Kanal bei jedem erfolgreichen Senden der App lokal an Ihren Dienst speichert, damit Sie den Kanal für einen späteren Vergleich verwenden können.
  3. Wenn sich der Kanal geändert hat, senden Sie den neuen Kanal an Ihren Webdienst. Schließen Sie in den folgenden Fällen Fehlerbehandlungslogik ein, die immer einen neuen Kanal sendet:
    • Ihre App hat noch nie einen Kanal an den Webdienst gesendet.
    • Der letzte Versuch Ihrer App, den Kanal an den Webdienst zu senden, war nicht erfolgreich.

Verschiedene Aufrufe der CreatePushNotificationChannelForApplicationAsync-Methode geben nicht immer einen anderen Kanal zurück. Wenn sich der Kanal seit dem letzten Aufruf nicht geändert hat, sollte Ihre App Aufwand und Internetdatenverkehr sparen, indem Sie diesen Kanal nicht erneut an Ihren Dienst senden. Eine App kann mehrere gültige Kanal-URIs gleichzeitig haben. Da jeder eindeutige Kanal bis zum Ablauf gültig bleibt, gibt es keinen Schaden beim Anfordern eines neuen Kanals, da er sich nicht auf die Ablaufzeit früherer Kanäle auswirkt.

Wenn Sie jedes Mal, wenn Ihre App aufgerufen wird, einen neuen Kanal anfordern, maximieren Sie die Chancen, immer Zugriff auf einen gültigen Kanal zu haben. Dies ist besonders wichtig, wenn es für Ihr Kachel- oder Popupszenario wichtig ist, dass Inhalte immer live sind. Wenn Sie befürchten, dass ein Benutzer Ihre App möglicherweise nicht mehr als einmal alle 30 Tage ausführt, können Sie eine Hintergrundaufgabe implementieren, um Ihren Kanalanforderungscode regelmäßig auszuführen.

Behandeln von Fehlern in Kanalanforderungen

Der Aufruf der CreatePushNotificationChannelForApplicationAsync-Methode kann fehlschlagen, wenn das Internet nicht verfügbar ist. Um dies zu behandeln, fügen Sie der code in Schritt 2 gezeigten Wiederholungslogik hinzu. Wir empfehlen drei Versuche mit einer Verzögerung von 10 Sekunden zwischen jedem erfolglosen Versuch. Wenn alle drei Versuche fehlschlagen, sollte Ihre App warten, bis der Benutzer es das nächste Mal startet, um es erneut zu versuchen.

Schließen von Kanälen

Ihre App kann die Übermittlung von Benachrichtigungen auf allen Kanälen sofort beenden, indem Sie die PushNotificationChannel.Close-Methode aufrufen. Es ist zwar nicht üblich, dass Ihre App dies tun kann, aber es gibt möglicherweise bestimmte Szenarien, in denen Sie die Gesamte Benachrichtigungsübermittlung an Ihre App beenden möchten. Wenn Ihre App beispielsweise über das Konzept von Benutzerkonten verfügt und sich ein Benutzer bei dieser App abmeldet, ist es sinnvoll zu erwarten, dass die Kachel nicht mehr die persönlichen Informationen des Benutzers anzeigt. Um die Kachel des Inhalts erfolgreich zu löschen und die Zustellung von Benachrichtigungen zu beenden, sollten Sie die folgenden Schritte ausführen:

  1. Beenden Sie alle Kachelaktualisierungen, indem Sie die PushNotificationChannel.Close-Methode für alle Benachrichtigungskanäle aufrufen, die Kachel-, Popup-, Signal- oder unformatierte Benachrichtigungen an einen Benutzer übermitteln. Durch Aufrufen der Close-Methode wird sichergestellt, dass keine weiteren Benachrichtigungen für diesen Benutzer an den Client übermittelt werden können.
  2. Löschen Sie den Inhalt der Kachel, indem Sie die TileUpdater.Clear-Methode aufrufen, um die Daten des vorherigen Benutzers aus der Kachel zu entfernen.