Esercitazione: Inviare notifiche push a specifici dispositivi che eseguono applicazioni della piattaforma UWP (Universal Windows Platform)Tutorial: Send notifications to specific devices running Universal Windows Platform applications

PanoramicaOverview

Questa esercitazione illustra come usare Hub di notifica di Azure per trasmettere notifiche relative alle ultime notizie.This tutorial shows you how to use Azure Notification Hubs to broadcast breaking news notifications. L'esercitazione riguarda applicazioni di Windows Store o di Windows Phone 8.1 (non Silverlight).This tutorial covers Windows Store or Windows Phone 8.1 (non-Silverlight) applications. Se la destinazione è Windows Phone 8.1 Silverlight, vedere Inviare notifiche push a specifici dispositivi Windows Phone con Hub di notifica di Azure.If you're targeting Windows Phone 8.1 Silverlight, see Push notifications to specific Windows Phone devices by using Azure Notification Hubs.

Questa esercitazione illustra come usare Hub di notifica di Azure per inviare notifiche push a specifici dispositivi Windows che eseguono un'applicazione della piattaforma UWP (Universal Windows Platform).In this tutorial, you learn how to use Azure Notification Hubs to push notifications to specific Windows devices running a Universal Windows Platform (UWP) application. Dopo aver completato l'esercitazione, è possibile registrarsi alle categorie di notizie a cui si è interessati.After you complete the tutorial, you can register for the breaking news categories that you're interested in. Si riceveranno notifiche push solo per tali categorie.You'll receive push notifications for those categories only.

Per abilitare scenari di trasmissione, includere uno o più tag durante la creazione di una registrazione nell'hub di notifica.To enable broadcast scenarios, include one or more tags when you create a registration in the notification hub. Quando le notifiche vengono inviate a un tag, tutti i dispositivi registrati per il tag le riceveranno.When notifications are sent to a tag, all devices that are registered for the tag receive the notification. Per altre informazioni sui tag, vedere Routing ed espressioni tag.For more information about tags, see Routing and tag expressions.

Nota

I progetti creati con Windows Store e Windows Phone versione 8.1 e precedenti non sono supportati in Visual Studio 2019.Windows Store and Windows Phone project versions 8.1 and earlier are not supported in Visual Studio 2019. Per altre informazioni, vedere Selezione della piattaforma e compatibilità di Visual Studio 2019.For more information, see Visual Studio 2019 Platform Targeting and Compatibility.

In questa esercitazione si eseguiranno le attività seguenti:In this tutorial, you do the following tasks:

  • Aggiungere la selezione delle categorie all'app per dispositivi mobiliAdd category selection to the mobile app
  • Registrazione per le notificheRegister for notifications
  • Inviare notifiche con tagSend tagged notifications
  • Eseguire l'app e generare notificheRun the app and generate notifications

PrerequisitiPrerequisites

Completare l'Esercitazione: Inviare notifiche alle app della piattaforma UWP (Universal Windows Platform) con Hub di notifica di Azure prima di iniziare questa esercitazione.Complete the Tutorial: Send notifications to Universal Windows Platform apps by using Azure Notification Hubs before starting this tutorial.

Aggiungere la selezione delle categorie all'appAdd category selection to the app

Il primo passaggio consiste nell'aggiunta degli elementi dell'interfaccia utente alla pagina principale esistente per permettere agli utenti di selezionare le categorie per le quali registrarsi.The first step is to add UI elements to your existing main page so that users can select categories to register. Le categorie selezionate vengono archiviate nel dispositivo.The selected categories are stored on the device. All'avvio dell'app, viene creata una registrazione del dispositivo nell'hub di notifica, con le categorie selezionate come tag.When the app starts, it creates a device registration in your notification hub, with the selected categories as tags.

  1. Aprire il file di progetto MainPage.xaml e quindi copiare il codice seguente nell'elemento Grid:Open the MainPage.xaml project file, and then copy the following code in the Grid element:

    <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. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi > Classe.In Solution Explorer, right-click the project, select Add > Class. In Aggiungi nuovo elemento assegnare alla classe il nome Notifications e selezionare Aggiungi.In Add New Item, name the class Notifications, and select Add. Se necessario, aggiungere il modificatore public alla definizione della classe.If necessary, add the public modifier to the class definition.

  3. Aggiungere le istruzioni using seguenti al nuovo file:Add the following using statements to the new file:

    using Windows.Networking.PushNotifications;
    using Microsoft.WindowsAzure.Messaging;
    using Windows.Storage;
    using System.Threading.Tasks;
    
  4. Copiare il codice seguente nella nuova classe Notifications:Copy the following code to the new Notifications class:

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

    Questa classe usa l'archiviazione locale per archiviare le categorie di notizie che devono essere ricevute dal dispositivo.This class uses the local storage to store the categories of news that this device must receive. Invece di chiamare il metodo RegisterNativeAsync, chiamare RegisterTemplateAsync per effettuare la registrazione per le categorie usando la registrazione di modelli.Instead of calling the RegisterNativeAsync method, call RegisterTemplateAsync to register for the categories by using a template registration.

    Se si vogliono registrare più modelli, specificare un nome di modello, ad esempio simpleWNSTemplateExample.If you want to register more than one template, provide a template name, for example, simpleWNSTemplateExample. È necessario denominare i modelli in modo da poterli aggiornare o eliminare.You name the templates so that you can update or delete them. Si potrebbe scegliere di registrare più modelli per averne uno per gli avvisi popup e un altro per i riquadri.You might register more than one template to have one for toast notifications and one for tiles.

    Nota

    Con Hub di notifica, un dispositivo può registrare più modelli con lo stesso tag.With Notification Hubs, a device can register multiple templates by using the same tag. In questo caso, un messaggio in arrivo destinato a tale tag determina il recapito di più notifiche al dispositivo, una per ogni modello.In this case, an incoming message that targets the tag results in multiple notifications being delivered to the device, one for each template. Questo processo consente di visualizzare lo stesso messaggio in più notifiche visive, ad esempio sia come notifica che come avviso popup in un'app di Windows Store.This process enables you to display the same message in multiple visual notifications, such as both as a badge and as a toast notification in a Windows Store app.

    Per altre informazioni, vedere Modelli.For more information, see Templates.

  5. Nel file di progetto App.xaml.cs aggiungere la proprietà seguente alla classe App:In the App.xaml.cs project file, add the following property to the App class:

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

    Usare questa proprietà per creare e accedere a un'istanza di Notifications.You use this property to create and access a Notifications instance.

    Nel codice sostituire i segnaposto <hub name> e <connection string with listen access> con il nome dell'hub di notifica e la stringa di connessione per DefaultListenSharedAccessSignature, ottenuti in precedenza.In the code, replace the <hub name> and <connection string with listen access> placeholders with your notification hub name and the connection string for DefaultListenSharedAccessSignature, which you obtained earlier.

    Nota

    Poiché le credenziali distribuite con un'app client in genere non sono sicure, distribuire solo la chiave per l'accesso in ascolto con l'app client.Because credentials that are distributed with a client app are not usually secure, distribute only the key for listen access with your client app. L'accesso in ascolto permette all'app di registrarsi per le notifiche, ma le registrazioni esistenti non possono essere modificate e le notifiche non possono essere inviate.With listen access, your app can register for notifications, but existing registrations cannot be modified, and notifications cannot be sent. La chiave di accesso completo viene usata in un servizio back-end sicuro per l'invio delle notifiche e la modifica delle registrazioni esistenti.The full access key is used in a secured back-end service for sending notifications and changing existing registrations.

  6. Nel file MainPage.xaml.cs aggiungere la riga seguente:In the MainPage.xaml.cs file, add the following line:

    using Windows.UI.Popups;
    
  7. Nel file MainPage.xaml.cs aggiungere il metodo seguente:In the MainPage.xaml.cs file, add the following method:

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

    Questo metodo crea un elenco di categorie e usa la classe Notifications per archiviare l'elenco nell'archiviazione locale.This method creates a list of categories and uses the Notifications class to store the list in the local storage. Registra inoltre i tag corrispondenti con l'hub di notifica.It also registers the corresponding tags with your notification hub. Se le categorie cambiano, la registrazione viene ricreata con le nuove categorie.When the categories change, the registration is re-created with the new categories.

L'app può ora archiviare un insieme di categorie nell'archiviazione locale del dispositivo.Your app can now store a set of categories in local storage on the device. L'app si registra con l'hub di notifica ogni volta che gli utenti modificano la selezione delle categorie.The app registers with the notification hub whenever users change the category selection.

Registrazione per le notificheRegister for notifications

In questa sezione si effettuerà la registrazione con l'hub di notifica all'avvio usando le categorie archiviate nell'archiviazione locale.In this section, you register with the notification hub on startup by using the categories that you've stored in local storage.

Nota

Poiché l'URI di canale assegnato dal servizio di notifica Windows può cambiare in qualsiasi momento, è consigliabile ripetere spesso la registrazione per le notifiche per evitare errori di notifica.Because the channel URI that's assigned by the Windows Notification Service (WNS) can change at any time, you should register for notifications frequently to avoid notification failures. In questo esempio viene effettuata la registrazione per le notifiche a ogni avvio dell'app.This example registers for notification every time that the app starts. Per le app che vengono eseguite di frequente, ad esempio più di una volta al giorno, probabilmente è possibile ignorare la registrazione per conservare la larghezza di banda nei casi in cui è trascorso meno di un giorno dalla registrazione precedente.For apps that you run frequently, say, more than once a day, you can probably skip registration to preserve bandwidth if less than a day has passed since the previous registration.

  1. Per usare la classe notifications per una sottoscrizione basata su categorie, aprire il file App.xaml.cs e quindi aggiornare il metodo InitNotificationsAsync.To use the notifications class to subscribe based on categories, open the App.xaml.cs file, and then update the InitNotificationsAsync method.

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

    Questo processo fa sì che quando viene avviata, l'app recupera le categorie dall'archiviazione localeThis process ensures that when the app starts, it retrieves the categories from local storage. e quindi richiede la registrazione per tali categorie.It then requests registration of these categories. Il metodo InitNotificationsAsync è stato creato nell'ambito dell'esercitazione Inviare notifiche alle app della piattaforma UWP (Universal Windows Platform) con Hub di notifica di Azure.You created the InitNotificationsAsync method as part of the Send notifications to Universal Windows Platform apps by using Azure Notification Hubs tutorial.

  2. Nel file di progetto MainPage.xaml.cs aggiungere il codice seguente nel metodo OnNavigatedTo:In the MainPage.xaml.cs project file, add the following code to the OnNavigatedTo method:

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

    Questo codice aggiorna la pagina principale in base allo stato delle categorie salvate in precedenza.This code updates the main page, based on the status of previously saved categories.

L'app è ora completa.The app is now complete. Può archiviare un insieme di categorie nello spazio di archiviazione locale del dispositivo.It can store a set of categories in the device local storage. Quando gli utenti cambiano la selezione di categorie, quelle salvate vengono usate per la registrazione nell'hub di notifica.When users change the category selection, the saved categories are used to register with the notification hub. Nella sezione seguente verrà definito un back-end per l'invio di notifiche delle categorie all'app.In the next section, you define a back end that can send category notifications to this app.

Eseguire l'app UWPRun the UWP app

  1. In Visual Studio premere F5 per compilare e avviare l'app.In Visual Studio, select F5 to compile and start the app. L'interfaccia utente dell'app fornisce un insieme di interruttori che permettono di scegliere le categorie per le quali registrarsi.The app UI provides a set of toggles that lets you choose the categories to subscribe to.

    App delle ultime notizie

  2. Abilitare uno o più interruttori delle categorie e quindi selezionare Sottoscrivi.Enable one or more category toggles, and then select Subscribe.

    L'app converte le categorie selezionate in tag e richiede una nuova registrazione del dispositivo per i tag selezionati dall'hub di notifica.The app converts the selected categories into tags and requests a new device registration for the selected tags from the notification hub. L'app visualizza le categorie registrate in una finestra di dialogo.The app displays the registered categories in a dialog box.

    Interruttori delle categorie e pulsante di sottoscrizione

Creare un'app console per inviare notifiche con tagCreate a console app to send tagged notifications

In questa sezione si invieranno notizie aggiornate come notifiche modello con tag da un'app console .NET.In this section, you send breaking news as tagged template notifications from a .NET console app.

  1. In Visual Studio creare una nuova applicazione console in Visual C#:In Visual Studio, create a new Visual C# console application:

    1. Nel menu selezionare File > Nuovo > Progetto.On the menu, select File > New > Project.
    2. In Crea un nuovo progetto selezionare App console (.NET Framework) per C# nell'elenco di modelli e scegliere Avanti.In Create a new project, select Console App (.NET Framework) for C# in the list of templates, and select Next.
    3. Immettere un nome per l'app.Enter a name for the app.
    4. Per Soluzione scegliere Aggiungi a soluzione e selezionare Crea per creare il progetto.For Solution, choose Add to solution, and select Create to create the project.
  2. Scegliere Strumenti, > Gestione pacchetti NuGet > Console di Gestione pacchetti e quindi eseguire il comando seguente nella finestra della console:Select Tools > NuGet Package Manager > Package Manager Console and then, in the console window, run the following command:

    Install-Package Microsoft.Azure.NotificationHubs
    

    Questa azione aggiunge un riferimento ad Azure Notification Hubs SDK usando il pacchetto Microsoft.Azure.NotificationHubs.This action adds a reference to the Azure Notification Hubs SDK by using the Microsoft.Azure.NotificationHubs package.

  3. Aprire il file Program.cs e aggiungere l'istruzione using seguente:Open the Program.cs file, and add the following using statement:

    using Microsoft.Azure.NotificationHubs;
    
  4. Nella classe Program aggiungere il metodo seguente oppure sostituirlo se esiste già:In the Program class, add the following method, or replace it if it already exists:

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

    Questo codice invia una notifica modello per ognuno dei sei tag nella matrice di stringhe.This code sends a template notification for each of the six tags in the string array. L'uso di tag garantisce che i dispositivi ricevano le notifiche solo per le categorie registrate.The use of tags ensures that devices receive notifications only for the registered categories.

  5. Nel codice precedente sostituire i segnaposto <hub name> e <connection string with full access> con il nome dell'hub di notifica e la stringa di connessione per DefaultFullSharedAccessSignature dal dashboard dell'hub di notifica.In the preceding code, replace the <hub name> and <connection string with full access> placeholders with your notification hub name and the connection string for DefaultFullSharedAccessSignature from the dashboard of your notification hub.

  6. Nel metodo Main() aggiungere le righe seguenti:In the Main() method, add the following lines:

     SendTemplateNotificationAsync();
     Console.ReadLine();
    
  7. Creare l'app console.Build the console app.

Eseguire l'app console per inviare notifiche con tagRun the console app to send tagged notifications

Eseguire l'app creata nella sezione precedente.Run the app created in the previous section. Le notifiche per le categorie selezionate vengono visualizzate come notifiche di tipo avviso popup.Notifications for the selected categories appear as toast notifications.

Passaggi successiviNext steps

In questo articolo si è appreso come trasmettere le ultime notizie divise per categoria.In this article, you learned how to broadcast breaking news by category. L'applicazione back-end effettua il push delle notifiche con tag ai dispositivi registrati per ricevere le notifiche per tale tag.The back-end application pushes tagged notifications to devices that have registered to receive notifications for that tag. Per informazioni su come inviare notifiche push a specifici utenti indipendentemente dal dispositivo che usano, passare all'esercitazione seguente:To learn how to push notifications to specific users independent of what device they use, advance to the following tutorial: