Tutorial: Mengirim pemberitahuan ke perangkat tertentu yang menjalankan aplikasi Universal Windows Platform

Catatan

Microsoft Push Notification Service (MPNS) telah dihentikan dan tidak lagi didukung.

Gambaran Umum

Tutorial ini menunjukkan kepada Anda cara menggunakan Microsoft Azure Notification Hubs untuk menyiarkan pemberitahuan berita terkini. Tutorial ini mencakup aplikasi Windows Store atau Windows Phone 8.1 (non-Silverlight). Jika Anda menargetkan Windows Phone 8.1 Silverlight, lihat Pemberitahuan push ke perangkat Windows Phone tertentu dengan menggunakan Microsoft Azure Notification Hubs.

Dalam tutorial ini, Anda mempelajari cara menggunakan Microsoft Azure Notification Hubs untuk mendorong pemberitahuan ke perangkat Windows tertentu yang menjalankan aplikasi Universal Windows Platform (UWP). Setelah Anda menyelesaikan tutorial, Anda dapat mendaftar untuk kategori berita terkini yang Anda minati. Anda hanya akan menerima pemberitahuan push untuk kategori tersebut.

Untuk mengaktifkan skenario siaran, sertakan satu atau beberapa tag saat Anda membuat pendaftaran di hub pemberitahuan. Ketika pemberitahuan dikirim ke tag, semua perangkat yang terdaftar untuk tag menerima pemberitahuan. Untuk informasi selengkapnya tentang tag, lihat Perutean dan ekspresi tag.

Catatan

Proyek Windows Store dan Windows Phone versi 8.1 dan yang lebih lama tidak didukung di Visual Studio 2019. Untuk informasi selengkapnya, lihat Penargetan dan Kompatibilitas Platform Visual Studio 2019.

Dalam tutorial ini, Anda melakukan tugas-tugas berikut:

  • Menambahkan pilihan kategori ke aplikasi ponsel
  • Mendaftar untuk pemberitahuan
  • Mengirim pemberitahuan bertag
  • Menjalankan aplikasi dan membuat pemberitahuan

Prasyarat

Selesaikan Tutorial: Mengirim pemberitahuan ke aplikasi Universal Windows Platform dengan menggunakan Microsoft Azure Notification Hubs sebelum memulai tutorial ini.

Tambahkan pilihan kategori ke aplikasi seluler

Langkah pertama adalah menambahkan elemen UI ke halaman utama Anda yang sudah ada sehingga pengguna dapat memilih kategori untuk mendaftar. Kategori yang dipilih disimpan di perangkat. Saat aplikasi dimulai, aplikasi akan membuat pendaftaran perangkat di hub pemberitahuan Anda, dengan kategori yang dipilih sebagai tag.

  1. Buka file proyek MainPage.xaml, lalu salin kode berikut dalam elemen Grid:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"  TextWrapping="Wrap" Text="Breaking News" FontSize="42" VerticalAlignment="Top" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="World" Name="WorldToggle" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Politics" Name="PoliticsToggle" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Business" Name="BusinessToggle" Grid.Row="3" Grid.Column="0" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Technology" Name="TechnologyToggle" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Science" Name="ScienceToggle" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Sports" Name="SportsToggle" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Center"/>
        <Button Name="SubscribeButton" Content="Subscribe" HorizontalAlignment="Center" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Click="SubscribeButton_Click"/>
    </Grid>
    
  2. Di Penjelajah Solusi, klik kanan proyek, pilih Tambahkan>Kelas. Di Tambahkan Item Baru, beri nama kelas Pemberitahuan, dan pilih Tambahkan. Jika perlu, tambahkan pengubah public ke definisi kelas.

  3. Tambahkan pernyataan using berikut ke file baru:

    using Windows.Networking.PushNotifications;
    using Microsoft.WindowsAzure.Messaging;
    using Windows.Storage;
    using System.Threading.Tasks;
    
  4. Salin kode berikut ke kelas Notifications baru:

    private NotificationHub hub;
    
    public Notifications(string hubName, string listenConnectionString)
    {
        hub = new NotificationHub(hubName, listenConnectionString);
    }
    
    public async Task<Registration> StoreCategoriesAndSubscribe(IEnumerable<string> categories)
    {
        ApplicationData.Current.LocalSettings.Values["categories"] = string.Join(",", categories);
        return await SubscribeToCategories(categories);
    }
    
    public IEnumerable<string> RetrieveCategories()
    {
        var categories = (string) ApplicationData.Current.LocalSettings.Values["categories"];
        return categories != null ? categories.Split(','): new string[0];
    }
    
    public async Task<Registration> SubscribeToCategories(IEnumerable<string> categories = null)
    {
        var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
        if (categories == null)
        {
            categories = RetrieveCategories();
        }
    
        // Using a template registration to support notifications across platforms.
        // Any template notifications that contain messageParam and a corresponding tag expression
        // will be delivered for this registration.
    
        const string templateBodyWNS = "<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(messageParam)</text></binding></visual></toast>";
    
        return await hub.RegisterTemplateAsync(channel.Uri, templateBodyWNS, "simpleWNSTemplateExample",
                categories);
    }
    

    Kelas ini menggunakan penyimpanan lokal untuk menyimpan kategori berita yang harus diterima perangkat ini. Alih-alih memanggil metode RegisterNativeAsync, panggil RegisterTemplateAsync untuk mendaftar kategori dengan menggunakan pendaftaran templat.

    Jika Anda ingin mendaftarkan lebih dari satu templat, berikan nama templat, misalnya, simpleWNSTemplateExample. Anda memberi nama templat sehingga Anda bisa memperbarui atau menghapusnya. Anda mungkin mendaftarkan lebih dari satu templat untuk memiliki templat untuk pemberitahuan toast dan satu untuk petak peta.

    Catatan

    Dengan Notification Hubs, perangkat dapat mendaftarkan beberapa templat dengan menggunakan tag yang sama. Dalam hal ini, pesan masuk yang menargetkan tag menghasilkan beberapa pemberitahuan yang dikirimkan ke perangkat, satu untuk setiap templat. Proses ini memungkinkan Anda untuk menampilkan pesan yang sama dalam beberapa pemberitahuan visual, seperti lencana dan sebagai pemberitahuan toast di aplikasi Windows Store.

    Untuk informasi selengkapnya, lihat Templat.

  5. Di file proyek App.xaml.cs, tambahkan properti berikut ke kelas App:

    public Notifications notifications = new Notifications("<hub name>", "<connection string with listen access>");
    

    Anda menggunakan properti ini untuk membuat dan mengakses instans Notifications.

    Dalam kode, ganti tempat penampung <hub name> dan <connection string with listen access> dengan nama hub pemberitahuan Anda dan string koneksi untuk DefaultListenSharedAccessSignature, yang Anda peroleh sebelumnya.

    Catatan

    Karena kredensial yang didistribusikan dengan aplikasi klien biasanya tidak aman, hanya distribusikan kunci untuk mendengarkan akses dengan aplikasi klien Anda. Dengan akses mendengarkan, aplikasi Anda dapat mendaftar pemberitahuan, tetapi pendaftaran yang ada tidak dapat dimodifikasi, dan pemberitahuan tidak dapat dikirim. Kunci akses lengkap digunakan dalam layanan ujung belakang yang aman untuk mengirim pemberitahuan dan mengubah pendaftaran yang ada.

  6. Dalam file MainPage.xaml.cs, tambahkan baris berikut:

    using Windows.UI.Popups;
    
  7. Dalam file MainPage.xaml.cs, tambahkan metode berikut:

    private async void SubscribeButton_Click(object sender, RoutedEventArgs e)
    {
        var categories = new HashSet<string>();
        if (WorldToggle.IsOn) categories.Add("World");
        if (PoliticsToggle.IsOn) categories.Add("Politics");
        if (BusinessToggle.IsOn) categories.Add("Business");
        if (TechnologyToggle.IsOn) categories.Add("Technology");
        if (ScienceToggle.IsOn) categories.Add("Science");
        if (SportsToggle.IsOn) categories.Add("Sports");
    
        var result = await ((App)Application.Current).notifications.StoreCategoriesAndSubscribe(categories);
    
        var dialog = new MessageDialog("Subscribed to: " + string.Join(",", categories) + " on registration Id: " + result.RegistrationId);
        dialog.Commands.Add(new UICommand("OK"));
        await dialog.ShowAsync();
    }
    

    Metode ini membuat daftar kategori dan menggunakan kelas Notifications untuk menyimpan daftar di penyimpanan lokal. Ini juga mendaftarkan tag yang sesuai dengan hub pemberitahuan Anda. Ketika kategori berubah, pendaftaran dibuat ulang dengan kategori baru.

Aplikasi Anda kini dapat menyimpan set kategori di penyimpanan lokal di perangkat. Aplikasi ini mendaftar dengan hub pemberitahuan setiap kali pengguna mengubah pilihan kategori.

Mendaftar untuk pemberitahuan

Di bagian ini, Anda mendaftar dengan hub pemberitahuan pada saat mulai dengan menggunakan kategori yang telah Anda simpan di penyimpanan lokal.

Catatan

Karena saluran URI yang ditetapkan oleh Layanan Pemberitahuan Windows (WNS) dapat berubah kapan saja, Anda harus sering mendaftar untuk notifikasi untuk menghindari kegagalan notifikasi. Contoh ini mendaftar untuk pemberitahuan setiap kali aplikasi dimulai. Untuk aplikasi yang sering Anda jalankan, katakanlah, lebih dari sekali sehari, Anda mungkin dapat melewati pendaftaran untuk mempertahankan bandwidth jika kurang dari sehari telah berlalu sejak pendaftaran sebelumnya.

  1. Untuk menggunakan kelas notifications untuk berlangganan berdasarkan kategori, buka file App.xaml.cs, lalu perbarui metode InitNotificationsAsync.

    // *** Remove or comment out these lines ***
    //var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    //var hub = new NotificationHub("your hub name", "your listen connection string");
    //var result = await hub.RegisterNativeAsync(channel.Uri);
    
    var result = await notifications.SubscribeToCategories();
    

    Proses ini memastikan bahwa ketika aplikasi dimulai, aplikasi akan mengambil kategori dari penyimpanan lokal. Kemudian kirim permintaan pendaftaran kategori ini. Anda membuat metode InitNotificationsAsync sebagai bagian dari Kirim pemberitahuan ke aplikasi Universal Windows Platform dengan menggunakan tutorial Microsoft Azure Notification Hubs.

  2. Dalam file proyek MainPage.xaml.cs, tambahkan kode berikut ke metode OnNavigatedTo:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var categories = ((App)Application.Current).notifications.RetrieveCategories();
    
        if (categories.Contains("World")) WorldToggle.IsOn = true;
        if (categories.Contains("Politics")) PoliticsToggle.IsOn = true;
        if (categories.Contains("Business")) BusinessToggle.IsOn = true;
        if (categories.Contains("Technology")) TechnologyToggle.IsOn = true;
        if (categories.Contains("Science")) ScienceToggle.IsOn = true;
        if (categories.Contains("Sports")) SportsToggle.IsOn = true;
    }
    

    Kode ini memperbarui halaman utama, berdasarkan status kategori yang disimpan sebelumnya.

Aplikasi ini sekarang selesai. Ini dapat menyimpan satu set kategori di penyimpanan lokal perangkat. Saat pengguna mengubah pilihan kategori, kategori yang disimpan digunakan untuk mendaftar di hub pemberitahuan. Di bagian berikutnya, Anda menentukan ujung belakang yang dapat mengirim pemberitahuan kategori ke aplikasi ini.

Jalankan aplikasi UWP

  1. Di Visual Studio, pilih F5 untuk mengkompilasi dan memulai aplikasi. UI aplikasi menyediakan set pengalih yang memungkinkan Anda memilih kategori untuk berlangganan.

    Aplikasi Berita Terkini

  2. Aktifkan satu atau beberapa pengalih kategori, lalu pilih Berlangganan.

    Aplikasi ini mengkonversi kategori yang dipilih menjadi tag dan meminta pendaftaran perangkat baru untuk tag yang dipilih dari hub pemberitahuan. Aplikasi menampilkan kategori terdaftar dalam kotak dialog.

    Tombol alih kategori dan Berlangganan

Buat aplikasi konsol untuk mengirim pemberitahuan bertag

Di bagian ini, Anda mengirim berita terbaru sebagai notifikasi templat bertag dari aplikasi konsol .NET.

  1. Di Visual Studio, buat aplikasi konsol Visual Studio C# baru:

    1. Pada menu, pilih File>Baru>Proyek.
    2. Di Tambahkan proyek baru, pilih Aplikasi Konsol (.NET Framework) untuk C# di daftar templat, lalu pilih Berikutnya.
    3. Masukkan nama untuk aplikasi.
    4. Untuk Solusi, pilih Tambahkan ke solusi, dan pilih Buat untuk membuat proyek.
  2. Pilih Alat>Pengelola Paket NuGet>Konsol Pengelola Paket lalu, di jendela konsol jalankan perintah berikut:

    Install-Package Microsoft.Azure.NotificationHubs
    

    Tindakan ini menambahkan referensi ke SDK Microsoft Azure Notification Hubs dengan menggunakan paket Microsoft.Azure.NotificationHubs.

  3. Buka file program.cs, lalu tambahkan penyataan using berikut:

    using Microsoft.Azure.NotificationHubs;
    
  4. Di kelas Program, tambahkan metode berikut atau ganti jika sudah ada:

    private static async void SendTemplateNotificationAsync()
    {
        // Define the notification hub.
        NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("<connection string with full access>", "<hub name>");
    
        // Apple requires the apns-push-type header for all requests
        var headers = new Dictionary<string, string> {{"apns-push-type", "alert"}};
    
        // Create an array of breaking news categories.
        var categories = new string[] { "World", "Politics", "Business", "Technology", "Science", "Sports"};
    
        // Send the notification as a template notification. All template registrations that contain
        // "messageParam" and the proper tags will receive the notifications.
        // This includes APNS, GCM/FCM, WNS, and MPNS template registrations.
    
        Dictionary<string, string> templateParams = new Dictionary<string, string>();
    
        foreach (var category in categories)
        {
            templateParams["messageParam"] = "Breaking " + category + " News!";
            await hub.SendTemplateNotificationAsync(templateParams, category);
        }
    }
    

    Kode ini mengirimkan pemberitahuan templat untuk masing-masing dari enam tag dalam array string. Penggunaan tag memastikan bahwa perangkat hanya menerima notifikasi untuk kategori yang terdaftar.

  5. Di kode sebelumnya, ganti tempat penampung <hub name> dan <connection string with full access> dengan nama hub notifikasi dan string koneksi untuk DefaultFullSharedAccessSignature dari dasbor hub notifikasi Anda.

  6. Dalam metode Main(), tambahkan baris berikut:

     SendTemplateNotificationAsync();
     Console.ReadLine();
    
  7. Membangun aplikasi konsol.

Jalankan aplikasi konsol untuk mengirim pemberitahuan bertag

Jalankan aplikasi yang dibuat di bagian sebelumnya. Pemberitahuan untuk kategori yang dipilih muncul sebagai pemberitahuan toast.

Langkah berikutnya

Dalam artikel ini, Anda belajar cara menyiarkan berita terkini berdasarkan kategori. Aplikasi ujung belakang mendorong pemberitahuan yang ditandai ke perangkat yang telah mendaftar untuk menerima pemberitahuan untuk tag tersebut. Untuk mempelajari cara mendorong pemberitahuan kepada pengguna tertentu yang independen dari perangkat apa yang mereka gunakan, lanjutkan ke tutorial berikut: