Share via


So wird's gemacht: 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 automatisch nach 30 Tagen ab.

Wichtige Informationen

Technologien

  • Windows-Runtime

Voraussetzungen

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 gesendet, 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 eine HTTP POST-Anforderung verpackt und an den Server gesendet.

Wichtig

Sie sollten diese Informationen auf sichere Weise an Ihren Server senden. Sie sollten verlangen, dass sich die App beim Server authentifiziert, wenn sie den Kanal-URI überträgt. 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 bei jedem Aufruf Ihrer App 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 Ihre App den Kanal jedes Mal lokal speichern muss, wenn die App ihn erfolgreich an Ihren Dienst sendet, sodass Sie den Kanal haben, mit dem Sie später vergleichen können.
  3. Wenn sich der Kanal geändert hat, senden Sie den neuen Kanal an Ihren Webdienst. Schließen Sie eine Fehlerbehandlungslogik ein, die in den folgenden Fällen 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 sendet. Eine App kann mehrere gültige Kanal-URIs gleichzeitig haben. Da jeder eindeutige Kanal gültig bleibt, bis er abläuft, entsteht kein Schaden beim Anfordern eines neuen Kanals, da er sich nicht auf die Ablaufzeit vorheriger Kanäle auswirkt.

Wenn Sie bei jedem Aufruf Ihrer App einen neuen Kanal anfordern, maximieren Sie Ihre 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 bedenken, 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 dem in Schritt 2 gezeigten Code 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 sie 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 aufruft. Es ist zwar nicht üblich, dass Ihre App dies tut, aber es kann in bestimmten Szenarien vorkommen, in denen Sie die übermittlung von Benachrichtigungen an Ihre App beenden möchten. Wenn Ihre App über das Konzept von Benutzerkonten verfügt und sich ein Benutzer bei dieser App abmeldet, ist für instance davon auszugehen, dass auf der Kachel nicht mehr die persönlichen Informationen des Benutzers angezeigt werden. Gehen Sie wie folgt vor, um die Kachel des Inhalts zu löschen und die Zustellung von Benachrichtigungen zu beenden:

  1. Beenden Sie alle Kachelupdates, indem Sie die PushNotificationChannel.Close-Methode für jeden Ihrer 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.