Cara meminta, membuat, dan menyimpan saluran pemberitahuan

Anda dapat membuka saluran Pengidentifikasi Sumber Daya Seragam (URI) tempat aplikasi Anda dapat menerima pemberitahuan push. Anda kemudian dapat mengirim saluran ke server Anda yang menggunakannya untuk mengirim pemberitahuan push, dan menutupnya ketika Anda tidak lagi membutuhkannya. Saluran adalah alamat unik yang mewakili satu pengguna pada satu perangkat, untuk aplikasi tertentu atau petak sekunder.

Anda harus meminta saluran baru setiap kali aplikasi Anda diluncurkan, dan memperbarui server cloud saat URI berubah. Untuk mengetahui detail selengkapnya, harap lihat Keterangan.

Penting

Saluran pemberitahuan secara otomatis kedaluwarsa setelah 30 hari.

Apa yang perlu Anda ketahui

Teknologi

  • Windows Runtime

Prasyarat

Petunjuk

Langkah 1: Menambahkan deklarasi namespace

Windows.UI.Notifications menyertakan API toast.

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

Langkah 2: Meminta URI saluran

Contoh ini meminta URI saluran. Permintaan dibuat ke Platform Klien Pemberitahuan, yang pada gilirannya meminta URI saluran dari WNS. Ketika permintaan selesai, nilai yang dikembalikan adalah objek PushNotificationChannel yang berisi URI.

PushNotificationChannel channel = null;

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

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

Langkah 3: Kirim URI saluran ke server Anda

URI saluran dimas dalam permintaan HTTP POST dan dikirim ke server.

Penting

Anda harus mengirim informasi ini ke server Anda dengan cara yang aman. Anda harus mengharuskan aplikasi untuk mengautentikasi dirinya dengan server saat mengirimkan URI saluran. Enkripsi informasi dan gunakan protokol aman seperti 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.
}

Keterangan

Meminta saluran

Anda harus meminta saluran baru setiap kali aplikasi dipanggil, dengan menggunakan logika berikut:

  1. Meminta saluran.
  2. Bandingkan saluran baru dengan saluran Anda sebelumnya. Jika salurannya sama, Anda tidak perlu mengambil tindakan lebih lanjut. Perhatikan bahwa ini mengharuskan aplikasi Anda untuk menyimpan saluran secara lokal setiap kali aplikasi berhasil mengirimkannya ke layanan Anda, sehingga Anda memiliki saluran untuk dibandingkan nanti.
  3. Jika saluran telah berubah, kirim saluran baru ke layanan web Anda. Sertakan logika penanganan kesalahan yang selalu mengirim saluran baru dalam kasus berikut:
    • Aplikasi Anda belum pernah mengirim saluran ke layanan web sebelumnya.
    • Upaya terakhir aplikasi Anda untuk mengirim saluran ke layanan web tidak berhasil.

Panggilan yang berbeda ke metode CreatePushNotificationChannelForApplicationAsync tidak selalu mengembalikan saluran yang berbeda. Jika saluran belum berubah sejak panggilan terakhir, aplikasi Anda harus menghemat upaya dan lalu lintas Internet dengan tidak mengirim ulang saluran yang sama ke layanan Anda. Aplikasi dapat memiliki beberapa URI saluran yang valid secara bersamaan. Karena setiap saluran unik tetap valid sampai kedaluwarsa, tidak ada salahnya meminta saluran baru karena tidak memengaruhi waktu kedaluwarsa saluran sebelumnya.

Dengan meminta saluran baru setiap kali aplikasi dipanggil, Anda memaksimalkan kemungkinan Anda untuk selalu memiliki akses ke saluran yang valid. Ini sangat penting jika sangat penting untuk skenario petak peta atau toast Anda bahwa konten selalu ditayangkan. Jika Anda khawatir bahwa pengguna mungkin tidak menjalankan aplikasi Anda lebih dari sekali setiap 30 hari, Anda dapat menerapkan tugas latar belakang untuk menjalankan kode permintaan saluran Anda secara teratur.

Menangani kesalahan dalam permintaan saluran

Panggilan ke metode CreatePushNotificationChannelForApplicationAsync dapat gagal jika Internet tidak tersedia. Untuk menangani ini, tambahkan logika coba lagi ke kode yang diperlihatkan di langkah 2. Kami merekomendasikan tiga upaya dengan penundaan 10 detik antara setiap upaya yang gagal. Jika ketiga upaya gagal, aplikasi Anda harus menunggu hingga kali berikutnya pengguna meluncurkannya untuk mencoba lagi.

Menutup saluran

Aplikasi Anda dapat segera menghentikan pengiriman pemberitahuan di semua saluran dengan memanggil metode PushNotificationChannel.Close . Meskipun tidak akan umum bagi aplikasi Anda untuk melakukannya, mungkin ada skenario tertentu di mana Anda ingin menghentikan semua pengiriman pemberitahuan ke aplikasi Anda. Misalnya, jika aplikasi Anda memiliki konsep akun pengguna dan pengguna keluar dari aplikasi tersebut, masuk akal untuk mengharapkan bahwa petak peta tidak lagi menunjukkan informasi pribadi pengguna tersebut. Agar berhasil menghapus ubin konten dan menghentikan pengiriman pemberitahuan, Anda harus melakukan hal berikut:

  1. Hentikan semua pembaruan petak peta dengan memanggil metode PushNotificationChannel.Close di salah satu saluran pemberitahuan Anda yang mengirimkan petak peta, toast, lencana, atau pemberitahuan mentah kepada pengguna. Memanggil metode Tutup memastikan bahwa tidak ada pemberitahuan lebih lanjut untuk pengguna tersebut yang dapat dikirimkan ke klien.
  2. Hapus konten petak peta dengan memanggil metode TileUpdater.Clear untuk menghapus data pengguna sebelumnya dari petak peta.