Bildirim kanalı isteme, oluşturma ve kaydetme

Uygulamanızın anında bildirim alabileceği bir tekdüzen Kaynak Tanımlayıcı (URI) kanalı açabilirsiniz. Ardından, kanalı sunucunuza gönderip, bu sunucu aracılığıyla push bildirimleri gönderebilir ve ihtiyaç kalmadığında kapatabilirsiniz. Kanal, belirli bir uygulama veya ikincil kutucuk için tek bir cihazdaki tek bir kullanıcıyı temsil eden benzersiz bir adrestir.

Uygulamanız her başlatıldığında yeni bir kanal istemeli ve URI değiştiğinde bulut sunucusunu güncelleştirmelisiniz. Daha fazla ayrıntı için bkz. Açıklamalar.

Important

Bildirim kanallarının süresi 30 gün sonra otomatik olarak dolar.

Bilmeniz gerekenler

Technologies

  • Windows Runtime

Prerequisites

Instructions

1. Adım: Ad alanı bildirimleri ekleme

Windows.UI.Notifications, toast bildirim API'lerini içerir.

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

2. Adım: Kanal URI'si isteme

Bu örnek bir kanal URI'si istemektedir. İstek Bildirim İstemci platformuna yapılır ve bu da WNS'den kanal URI'sini talep eder. İstek tamamlandığında, döndürülen değer URI'yi içeren bir PushNotificationChannel nesnesidir.

PushNotificationChannel channel = null;

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

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

3. Adım: Kanal URI'sini sunucunuza gönderme

Kanal URI'si bir HTTP POST isteğinde paketlenmiştir ve sunucuya gönderilir.

Important

Bu bilgileri sunucunuza güvenli bir şekilde göndermeniz gerekir. Uygulamanın kanal URI'sini iletirken sunucuyla kimliğini doğrulaması gerekir. Bilgileri şifreleyin ve HTTPS gibi güvenli bir protokol kullanın.

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.
}

Remarks

Requesting channels

Uygulamanız her çağrıldığında aşağıdaki mantığı kullanarak yeni bir kanal istemeniz gerekir:

  1. Bir kanal isteyin.
  2. Yeni kanalı önceki kanalınızla karşılaştırın. Kanal aynıysa başka bir işlem yapmanız gerekmez. Bunun için uygulamanızın kanalı hizmetinize başarıyla gönderdiği her seferde yerel olarak depolamasını gerektirdiğini unutmayın; böylece daha sonra karşılaştırabileceğiniz kanala sahip olursunuz.
  3. Kanal değiştiyse yeni kanalı web hizmetinize gönderin. Aşağıdaki durumlarda her zaman yeni bir kanal gönderen hata işleme mantığını ekleyin:
    • Uygulamanız daha önce web hizmetine hiç kanal göndermedi.
    • Uygulamanızın kanalı web hizmetine göndermeye çalıştığı son girişim başarısız oldu.

CreatePushNotificationChannelForApplicationAsync yöntemine yapılan farklı çağrılar her zaman farklı bir kanal döndürmez. Kanal son aramadan bu yana değişmediyse, uygulamanız aynı kanalı hizmetinize yeniden göndermeyerek çabayı ve İnternet trafiğini korumalıdır. Bir uygulamanın aynı anda birden çok geçerli kanal URI'si olabilir. Her benzersiz kanal süresi dolana kadar geçerli kaldığından, önceki kanalların sona erme süresini etkilemediğinden yeni kanal istemenin bir zararı olmaz.

Uygulamanız her çağrıldığında yeni bir kanal isteyerek, her zaman geçerli bir kanala erişme şansınızı en üst düzeye çıkarırsınız. Kutucuk veya bildirim senaryonuz için içeriğin her zaman canlı olması çok önemliyse bu özellikle önemlidir. Bir kullanıcının uygulamanızı 30 günde bir kereden daha az çalıştırabileceğinden endişeleniyorsanız, kanal isteği kodunuzu düzenli aralıklarla yürütmek için bir arka plan görevi uygulayabilirsiniz.

Kanal isteklerindeki hataları işleme

İnternet kullanılamıyorsa CreatePushNotificationChannelForApplicationAsync yöntemine yapılan çağrı başarısız olabilir. Bunu işlemek için 2. adımda gösterilen koda yeniden deneme mantığı ekleyin. Başarısız olan her girişim arasında 10 saniyelik gecikme süresi olan üç deneme önerilir. Üç denemenin tümü de başarısız olursa, uygulamanızın kullanıcı yeniden denemek için uygulamayı bir sonraki başlatışına kadar beklemesi gerekir.

Closing channels

Uygulamanız PushNotificationChannel.Close yöntemini çağırarak tüm kanallarda bildirimlerin teslimini hemen durdurabilir. Uygulamanızın bunu yapması yaygın olmasa da, uygulamanıza tüm bildirim teslimini durdurmak istediğiniz bazı senaryolar olabilir. Örneğin, uygulamanız kullanıcı hesapları kavramına sahipse ve bir kullanıcı bu uygulamanın oturumunu kapatmışsa kutucuğun artık kullanıcının kişisel bilgilerini göstermiyor olması mantıklıdır. İçerik kutucuğunu başarıyla temizlemek ve bildirimlerin teslimini durdurmak için aşağıdakileri yapmalısınız:

  1. Kullanıcıya kutucuk, bildirim, rozet veya ham bildirimler sunan bildirim kanallarınızda PushNotificationChannel.Close yöntemini çağırarak tüm kutucuk güncelleştirmelerini durdurun. Close yöntemini çağırmak, bu kullanıcı için istemciye başka bildirim teslim edilememesini sağlar.
  2. Kutucuktan önceki kullanıcının verilerini kaldırmak için TileUpdater.Clear yöntemini çağırarak kutucuğun içeriğini temizleyin.