Öğretici: Evrensel Windows Platformu uygulamaları çalıştıran belirli cihazlara bildirimler gönderme

Genel Bakış

Bu öğreticide, son haberler bildirimleri yayınlamak için Azure Notification Hubs nasıl kullanılacağı gösterilmektedir. Bu öğretici, Windows Mağazası veya Windows Phone 8,1 (Silverlight olmayan) uygulamalarını içerir. Windows Phone 8,1 Silverlight 'ı hedefliyorsanız, bkz. Azure Notification Hubs kullanarak belirli Windows Phone cihazlara anında iletme bildirimleri gönderme.

Bu öğreticide, bir Evrensel Windows Platformu (UWP) uygulaması çalıştıran belirli Windows cihazlarına bildirimleri göndermek için Azure Notification Hubs kullanmayı öğreneceksiniz. Öğreticiyi tamamladıktan sonra ilgilendiğiniz son haber kategorilerine kaydolabilirsiniz. Yalnızca bu kategoriler için anında iletme bildirimleri alacaksınız.

Yayın senaryolarını etkinleştirmek için, Bildirim Hub 'ında bir kayıt oluştururken bir veya daha fazla etiket ekleyin. Bildirimler bir etikete gönderildiğinde, etiket için kaydedilen tüm cihazlar bildirimi alır. Etiketler hakkında daha fazla bilgi için bkz. Yönlendirme ve etiket ifadeleri.

Not

Windows Mağazası ve Windows Phone proje sürümleri 8,1 ve önceki sürümleri Visual Studio 2019 ' de desteklenmez. Daha fazla bilgi için bkz. Visual Studio 2019 Platform hedefleme ve uyumluluk.

Bu öğreticide, aşağıdaki görevleri gerçekleştirebilirsiniz:

  • Mobil uygulamaya kategori seçimi ekleme
  • Bildirimlere kaydolma
  • Etiketli bildirimler gönderme
  • Uygulamayı çalıştırma ve bildirimler oluşturma

Önkoşullar

Bu öğreticiye başlamadan önce Öğretici: Azure Notification Hubs kullanarak Evrensel Windows Platformu uygulamalarına bildirimler gönderme öğreticisini tamamlayın.

Uygulamaya kategori seçimi ekleme

İlk adım, mevcut ana sayfanıza kullanıcının kaydolmak için kategorileri seçebileceği UI öğeleri eklemektir. Seçilen kategoriler cihazda depolanır. Uygulama başlatıldığında, Bildirim Hub 'ında seçili kategorileri Etiketler olarak içeren bir cihaz kaydı oluşturur.

  1. MainPage. xaml proje dosyasını açın ve aşağıdaki kodu Grid öğesinde kopyalayın:

    <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. Çözüm Gezgini, projeye sağ tıklayın, sınıf Ekle' yi seçin > . Yeni öğe Ekle' de, sınıf bildirimlerini adlandırın ve Ekle' yi seçin. Gerekirse, public değiştiricisini sınıf tanımına ekleyin.

  3. Aşağıdaki using deyimlerini yeni dosyaya ekleyin:

    using Windows.Networking.PushNotifications;
    using Microsoft.WindowsAzure.Messaging;
    using Windows.Storage;
    using System.Threading.Tasks;
    
  4. Aşağıdaki kodu yeni Notifications sınıfa kopyalayın:

    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);
    }
    

    Bu sınıf, bu cihazın alması gereken haber kategorilerini depolamak için yerel depolamayı kullanır. Yöntemi çağırmak yerine RegisterNativeAsync , RegisterTemplateAsync bir şablon kaydı kullanarak kategorilere kaydolmak için çağırın.

    Birden fazla şablon kaydetmek istiyorsanız, bir şablon adı sağlayın (örneğin, simpleWNSTemplateExample). Şablonları güncelleştirebilmeniz veya silebilmeniz için adlandırmanız gerekir. Bildirim için bir tane ve bir kutucuk için bir tane olmak üzere birden fazla şablon kaydedebilirsiniz.

    Not

    Notification Hubs, bir cihaz aynı etiketi kullanarak birden çok şablonu kaydedebilir. Bu durumda, etiketi hedefleyen bir gelen ileti, her şablon için bir tane olmak üzere cihaza birden çok bildirim teslim edildiğinde oluşur. Bu işlem, bir Windows Mağazası uygulamasında hem rozet hem de bildirim olarak aynı iletiyi birden çok görsel bildirimde görüntülemenizi sağlar.

    Daha fazla bilgi için bkz. Şablonlar.

  5. App. xaml. cs proje dosyasında, sınıfına aşağıdaki özelliği ekleyin App :

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

    Bu özelliği kullanarak bir örnek oluşturup erişebilirsiniz Notifications .

    Kod içindeki <hub name> ve <connection string with listen access> yer tutucularını, daha önce edindiğiniz bildirim hub'ı adınız ve DefaultListenSharedAccessSignature bağlantı dizeniz ile değiştirin.

    Not

    Bir istemci uygulaması ile dağıtılmış kimlik bilgileri genellikle güvenli olmadığından yalnızca istemci uygulamanızla dinleme erişimi için anahtarı dağıtın. Dinleme erişimi ile uygulamanızın bildirimlere kaydolmasını sağlar, ancak mevcut kayıtlar değiştirilemez ve bildirimler gönderilemez. Tam erişim anahtarı, güvenli bir arka uç hizmetinde bildirimler göndermek ve mevcut kayıtları değiştirmek için kullanılır.

  6. MainPage. xaml. cs dosyasında aşağıdaki satırı ekleyin:

    using Windows.UI.Popups;
    
  7. MainPage. xaml. cs dosyasında aşağıdaki yöntemi ekleyin:

    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();
    }
    

    Bu yöntem, kategorilerin bir listesini oluşturur ve Notifications Listeyi yerel depolama alanında depolamak için sınıfını kullanır. Ayrıca ilgili etiketleri bildirim hub’ınıza kaydeder. Kategoriler değiştiğinde, kayıt yeni kategoriler ile yeniden oluşturulur.

Uygulamanız artık cihazın yerel depolama alanında bir kategori kümesini depolayabilir. Uygulama, kullanıcılar kategori seçimini her değiştirdiğinde bildirim hub’ına kaydolur.

Bildirimlere kaydolma

Bu bölümde, yerel depolama alanında depoladığınız kategorileri kullanarak başlatma sırasında bildirim hub’ına kaydolursunuz.

Not

Windows Bildirim Hizmeti (WNS) tarafından atanan kanal URI’si her zaman değişebileceğinden, bildirim hatalarını önlemek için sık sık bildirimlere kaydolmanız gerekir. Bu örnek, uygulama her başlatıldığında bildirimlere kaydolur. Sıklıkla çalıştırdığınız uygulamalar için günde bir kereden fazla, bir günden daha az bir kez geçtiğinde bant genişliğini korumak için kayıt işlemini atlayabilirsiniz.

  1. notificationsKategoriye göre abone olmak için sınıfını kullanmak üzere app. xaml. cs dosyasını açın ve sonra InitNotificationsAsync yöntemi güncelleştirin.

    // *** 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();
    

    Bu işlem, uygulama başlatıldığında yerel depolama alanından kategorileri alan bir zaman sağlar. Daha sonra bu kategorilerin kaydını ister. InitNotificationsAsyncYöntemi Azure Notification Hubs öğreticisi kullanarak Evrensel Windows platformu uygulamalara gönderilen bildirimlerin bir parçası olarak oluşturdunuz.

  2. MainPage. xaml. cs proje dosyasında yöntemine aşağıdaki kodu ekleyin 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;
    }
    

    Bu kod, önceden kaydedilmiş kategorilerin durumuna göre ana sayfayı güncelleştirir.

Uygulamanız artık tamamlandı. Cihaz yerel depolama alanında bir kategori kümesini depolayabilirler. Kullanıcılar kategori seçimini değiştirmişken, kaydedilen Kategoriler Bildirim Hub 'ına kaydolmak için kullanılır. Sonraki bölümde, bu uygulamaya kategori bildirimleri gönderebilen bir arka uç tanımlayacaksınız.

UWP uygulamasını çalıştırma

  1. Visual Studio’da F5 tuşunu seçerek uygulamayı derleyin ve başlatın. Uygulama kullanıcı arabirimi, abone olunacak kategorileri seçmenize olanak sağlayan iki durumlu düğmeler sağlar.

    Son Dakika Haberleri uygulaması

  2. Bir veya daha fazla kategori modunu etkinleştirin ve sonra abone ol' u seçin.

    Uygulama, seçilen kategorileri etiketlere dönüştürür ve bildirim hub’ından seçilen etiketler için yeni bir cihaz kaydı ister. Uygulama, kayıtlı kategorileri bir iletişim kutusunda görüntüler.

    Kategori iki durumlu düğmeleri ve Abone ol düğmesi

Etiketli bildirimler göndermek için bir konsol uygulaması oluşturma

Bu bölümde, son dakika haberlerini .NET konsol uygulamasından etiketli şablon bildirimleri olarak yollarsınız.

  1. Visual Studio'da yeni bir Visual C# konsol uygulaması oluşturun:

    1. Menüde Dosya > Yeni > Proje' yi seçin.
    2. Yeni proje oluştur' da, şablonlar listesinde C# için konsol uygulaması (.NET Framework) öğesini seçin ve İleri' yi seçin.
    3. Uygulama için bir ad girin.
    4. Çözüm için, çözüme Ekle' yi seçin ve projeyi oluşturmak için Oluştur ' u seçin.
  2. Araçlar > NuGet Paket Yöneticisi > Paket Yöneticisi konsolu ' nu seçin ve ardından konsol penceresinde aşağıdaki komutu çalıştırın:

    Install-Package Microsoft.Azure.NotificationHubs
    

    Bu eylem, [Microsoft. Azure. Notificationhub] paketini kullanarak Azure Notification Hubs SDK 'sına bir başvuru ekler.

  3. Program. cs dosyasını açın ve aşağıdaki using ifadeyi ekleyin:

    using Microsoft.Azure.NotificationHubs;
    
  4. Program sınıfında, aşağıdaki yöntemi ekleyin veya zaten mevcutsa değiştirin:

    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);
        }
    }
    

    Bu kod, dize dizisindeki altı etiketin her biri için bir şablon bildirimi gönderir. Etiketlerin kullanılması, cihazların yalnızca kayıtlı kategoriler için bildirim almasını sağlar.

  5. Önceki kodda, <hub name> ve <connection string with full access> yer tutucularını bildirim hub'ı adınız ve bildirim hub’ınızın panosundaki DefaultFullSharedAccessSignature bağlantı dizeniz ile değiştirin.

  6. Main()Yönteminde aşağıdaki satırları ekleyin:

     SendTemplateNotificationAsync();
     Console.ReadLine();
    
  7. Konsol uygulamasını oluşturun.

Etiketli bildirimler göndermek için konsol uygulamasını çalıştırma

Önceki bölümde oluşturulan uygulamayı çalıştırın. Seçili kategorilere ait bildirimler, bildirim olarak görünür.

Sonraki adımlar

Bu makalede, son dakika haberlerini kategoriye göre yayınlamayı öğrendiniz. Arka uç uygulaması, etiketlenmiş bildirimleri bu etikete yönelik bildirimler almak üzere kayıtlı cihazlara gönderir. Bildirimlerin kullandıkları cihazdan bağımsız olarak belirli kullanıcılara nasıl göndereceğinizi öğrenmek için aşağıdaki öğreticiye ilerleyin: