Inviare notifiche multipiattaforma con Hub di notifica di Azure

Questa esercitazione si basa sull'esercitazione precedente, Inviare notifiche a utenti specifici usando Hub di notifica di Azure. Questa esercitazione descrive come eseguire il push delle notifiche a tutti i dispositivi registrati a un utente autenticato specifico. Questo approccio richiede più richieste per inviare una notifica a ogni piattaforma client supportata. Hub di notifica di Azure supporta modelli che consentono di specificare il modo in cui un determinato dispositivo vuole ricevere notifiche. Questo metodo semplifica l'invio di notifiche multipiattaforma.

Questo articolo illustra come sfruttare i modelli per inviare una notifica destinata a tutte le piattaforme. Questo articolo usa una singola richiesta per inviare una notifica neutrale della piattaforma. Per informazioni più dettagliate sui modelli, vedere Panoramica di Hub di notifica.

Importante

Windows Phone progetti 8.1 e versioni precedenti non sono supportati in Visual Studio 2019. Per altre informazioni, vedere Destinazione e compatibilità della piattaforma di Visual Studio 2019.

Nota

Con Hub di notifica, un dispositivo può registrare più modelli con lo stesso tag. In questo caso, un messaggio in arrivo destinato a tale tag determina il recapito di più notifiche al dispositivo, una per ogni modello. 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.

Inviare notifiche multipiattaforma usando i modelli

Nota

Microsoft Push Notification Service (MPNS) è stato deprecato e non è più supportato.

Questa sezione usa il codice di esempio compilato nell'esercitazione Invia notifiche a utenti specifici usando l'esercitazione Hub di notifica di Azure . È possibile scaricare l'esempio completo da GitHub.

Per inviare notifiche multipiattaforma usando modelli, eseguire le operazioni seguenti:

  1. In Visual Studio in Esplora soluzioni espandere la cartella Controller e quindi aprire il file RegisterController.cs.

  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:

    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 "fcm":
            var messageTemplate = "{\"data\":{\"message\":\"$(message)\"}}";
            registration = new FcmTemplateRegistrationDescription(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. Dato che le registrazioni dei modelli derivano da registrazioni native, non è necessario modificare le registrazioni esistenti.

  3. In Esplora soluzioni, nella cartella Controller aprire il file NotificationsController.cs. Sostituire il metodo Post con il codice seguente:

    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. Non si specifica un payload nativo. 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.

  4. Ripubblicare il progetto API Web.

  5. Eseguire di nuovo l'app client per verificare che la registrazione sia riuscita.

  6. Facoltativamente, distribuire l'app client in un secondo dispositivo e quindi eseguire l'app. Verrà visualizzata una notifica su ogni dispositivo.

Passaggi successivi

Dopo aver completato questa esercitazione, vedere altre informazioni su Hub di notifica e modelli in questi articoli: