Uso di Hub di notifica per inviare notifiche agli utenti tra piattaforme diverseSend cross-platform notifications to users with Notification Hubs

In un'esercitazione precedente relativa all'invio di notifiche agli utenti con Hub di notifica si è appreso come eseguire il push di notifiche a tutti i dispositivi registrati per uno specifico utente autenticato.In a previous tutorial, [Notify users with Notification Hubs], you learned how to push notifications to all devices that are registered to a specific authenticated user. In tale esercitazione vengono utilizzate più richieste per inviare una notifica a ogni piattaforma client supportata.In that tutorial, multiple requests were required to send a notification to each supported client platform. Hub di notifica di Azure supporta modelli che consentono di specificare il modo in cui un determinato dispositivo vuole ricevere notifiche.Azure Notification Hubs supports templates, with which you can specify how a specific device wants to receive notifications. Questo metodo semplifica l'invio di notifiche multipiattaforma.This method simplifies sending cross-platform notifications.

Questo articolo illustra come sfruttare i modelli per inviare, in un'unica richiesta, una notifica indipendente dalla piattaforma destinata a tutte le piattaforme.This article demonstrates how to take advantage of templates to send, in a single request, a platform-agnostic notification that targets all platforms. Per informazioni dettagliate sui modelli, vedere Panoramica dell'Hub di notifica.For more detailed information about templates, see Azure Notification Hubs Overview.

Importante

I progetti Windows Phone 8.1 e versioni precedenti non sono supportati in Visual Studio 2017.Windows Phone projects 8.1 and earlier are not supported in Visual Studio 2017. Per altre informazioni, vedere Selezione della piattaforma e compatibilità di Visual Studio 2017.For more information, see Visual Studio 2017 Platform Targeting and Compatibility.

Nota

Con Hub di notifica, un dispositivo può registrare più modelli con lo stesso tag.With Notification Hubs, a device can register multiple templates with the same tag. In questo caso, un messaggio in arrivo destinato a tale tag determina il recapito al dispositivo di più notifiche, una per ogni modello.In this case, an incoming message that targets the tag results in multiple notifications 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 inviare notifiche multipiattaforma usando i modelli, seguire questa procedura:To send cross-platform notifications by using templates, do the following:

  1. In Esplora soluzioni in Visual Studio espandere la cartella Controller e quindi aprire il file RegisterController.cs.In the Solution Explorer in Visual Studio, expand the Controllers folder, and then open the RegisterController.cs file.

  2. Trovare il blocco di codice nel metodo Put che crea una nuova registrazione e quindi sostituire il contenuto di switch con il codice seguente:Locate the block of code in the Put method that creates a new registration, and then replace the switch content with the following code:

     switch (deviceUpdate.Platform)
     {
         case "mpns":
             var toastTemplate = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                 "<wp:Notification xmlns:wp=\"WPNotification\">" +
                    "<wp:Toast>" +
                         "<wp:Text1>$(message)</wp:Text1>" +
                    "</wp:Toast> " +
                 "</wp:Notification>";
             registration = new MpnsTemplateRegistrationDescription(deviceUpdate.Handle, toastTemplate);
             break;
         case "wns":
             toastTemplate = @"<toast><visual><binding template=""ToastText01""><text id=""1"">$(message)</text></binding></visual></toast>";
             registration = new WindowsTemplateRegistrationDescription(deviceUpdate.Handle, toastTemplate);
             break;
         case "apns":
             var alertTemplate = "{\"aps\":{\"alert\":\"$(message)\"}}";
             registration = new AppleTemplateRegistrationDescription(deviceUpdate.Handle, alertTemplate);
             break;
         case "gcm":
             var messageTemplate = "{\"data\":{\"message\":\"$(message)\"}}";
             registration = new GcmTemplateRegistrationDescription(deviceUpdate.Handle, messageTemplate);
             break;
         default:
             throw new HttpResponseException(HttpStatusCode.BadRequest);
     }
    

    In questo codice viene chiamato il metodo specifico della piattaforma per creare una registrazione modello anziché una registrazione nativa.This code calls the platform-specific method to create a template registration instead of a native registration. Dato che le registrazioni dei modelli derivano da registrazioni native, non è necessario modificare le registrazioni esistenti.Because template registrations derive from native registrations, you don't need to modify existing registrations.

  3. Nel controller Notifications sostituire il metodo sendNotification con il codice seguente:In the Notifications controller, replace the sendNotification method with the following code:

     public async Task<HttpResponseMessage> Post()
     {
         var user = HttpContext.Current.User.Identity.Name;
         var userTag = "username:" + user;
    
         var notification = new Dictionary<string, string> { { "message", "Hello, " + user } };
         await Notifications.Instance.Hub.SendTemplateNotificationAsync(notification, userTag);
    
         return Request.CreateResponse(HttpStatusCode.OK);
     }
    

    Questo codice invia una notifica a tutte le piattaforme contemporaneamente, senza che sia necessario specificare un payload nativo.This code sends a notification to all platforms at the same time, without your having to specify a native payload. Gli hub di notifica creano il payload corretto e lo distribuiscono a tutti i dispositivi con il valore tag specificato, come indicato nei modelli registrati.Notification Hubs builds and delivers the correct payload to every device with the provided tag value, as specified in the registered templates.

  4. Pubblicare di nuovo il progetto back-end WebApi.Re-publish your WebApi back-end project.

  5. Eseguire nuovamente l'app client e quindi verificare che la registrazione abbia avuto esito positivo.Run the client app again, and then verify that the registration has succeeded.

  6. (Facoltativo) Distribuire l'app client in un secondo dispositivo e quindi eseguirla.(Optional) Deploy the client app to a second device, and then run the app. Si noti che verrà visualizzata una notifica su ogni dispositivo.Note that a notification is displayed on each device.

Passaggi successiviNext steps

Dopo avere completato questa esercitazione, è possibile reperire altre informazioni su Hub di notifica e sui modelli nei seguenti argomenti:Now that you have completed this tutorial, find out more about Notification Hubs and templates in these topics: