Esercitazione: Inviare notifiche push alle app Xamarin.iOS con Hub di notifica di Azure

Panoramica

Questa esercitazione illustra come usare Hub di notifica di Azure per inviare notifiche push a un'applicazione per iOS. Creare un'app Xamarin.iOS vuota che riceve notifiche push mediante Apple Push Notification Service (APNS).

Al termine è possibile usare l'hub di notifica per trasmettere le notifiche push a tutti i dispositivi che eseguono l'app. Il codice compilato è disponibile nell'esempio di app NotificationHubs.

In questa esercitazione si crea/aggiorna il codice per eseguire le attività seguenti:

  • Generare il file della richiesta di firma del certificato
  • Registrare l'app per le notifiche push
  • Creare un profilo di provisioning per l'app
  • Configurare l'hub di notifica per l'invio di notifiche push di iOS
  • Inviare notifiche push di prova

Prerequisiti

  • Sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

  • Ultima versione di Xcode

  • Dispositivo compatibile con iOS 10 o versione successiva

  • Apple Developer Program .

  • Visual Studio per Mac

    Nota

    Considerati i requisiti di configurazione delle notifiche push di iOS, è necessario distribuire e testare l'applicazione di esempio in un dispositivo iOS, iPhone o iPad, anziché in un simulatore.

Il completamento di questa esercitazione costituisce un prerequisito per tutte le altre esercitazioni di Hub di notifica relative ad app Xamarin.iOS.

Generare il file della richiesta di firma del certificato

Apple Push Notification Service (servizio APN) usa i certificati per autenticare le notifiche push. Seguire queste istruzioni per creare il certificato push necessario per inviare e ricevere notifiche. Per altre informazioni su questi concetti, vedere la documentazione ufficiale Apple Push Notification Service.

Generare il file della richiesta di firma del certificato usato da Apple per la generazione di un certificato push firmato.

  1. Sul Mac eseguire lo strumento Accesso Portachiavi. Può essere aperto dalla cartella Utilities (Utility) o Other (Altro) nella finestra di avvio.

  2. Selezionare Accesso Portachiavi, espandere Certificate Assistant (Assistente certificati) e quindi selezionare Request a Certificate from a Certificate Authority (Richiedi certificato da Autorità di certificazione).

    Use Keychain Access to request a new certificate

    Nota

    Per impostazione predefinita, lo strumento seleziona la prima voce dell'elenco. Ciò potrebbe causare problemi se la prima voce dell'elenco nella sezione Certificates (Certificati) non è Apple Worldwide Developer Relations Certification Authority (Autorità di certificazione relazioni sviluppatori Apple a livello mondiale). Prima di generare la richiesta di firma del certificato, verificare che sia presente una voce non di chiave oppure che sia selezionata la chiave Apple Worldwide Developer Relations Certification Authority.

  3. Selezionare User Email Address (Indirizzo di posta elettronica utente), immettere il valore Common Name (Nome comune), assicurarsi di specificare Saved to disk (Salvata su disco) e quindi selezionare Continue (Continua). Lasciare vuoto il campo CA Email Address (Indirizzo di posta elettronica CA), in quanto non è obbligatorio.

    Required certificate information

  4. Immettere un nome per il file CSR in Save As (Salva con nome), selezionare il percorso in Where (Percorso) e quindi selezionare Save (Salva).

    Choose a file name for the certificate

    Questa azione consente di salvare il file CSR nel percorso selezionato. Il percorso predefinito è Desktop. Tenere a mente il percorso scelto per il file.

A questo punto registrare l'app con Apple, abilitare le notifiche push e caricare il file CSR esportato per creare un certificato push.

Registrare l'app per le notifiche push

Per inviare notifiche push a un'app per iOS, registrare l'applicazione con Apple ed eseguire un'altra registrazione per abilitare le notifiche push.

  1. Se l'app non è stata ancora registrata, passare al portale di provisioning iOS in Apple Developer Center. Accedere al portale con l'ID Apple e selezionare Identifiers (Identificatori). Selezionare quindi + per registrare una nuova app.

    iOS Provisioning Portal App IDs page

  2. Nella schermata Register a New Identifier (Registra un nuovo identificatore) selezionare il pulsante di opzione App IDs (ID app). Selezionare quindi Continua.

    iOS Provisioning Portal register new ID page

  3. Aggiornare i tre valori seguenti per la nuova app e quindi selezionare Continue (Continua).

    • Descrizione: digitare un nome descrittivo per l'app.

    • Bundle ID: immettere un valore di ID bundle nel formato Organization Identifier.Product Name come indicato nella guida alla distribuzione di app. I valori Organization Identifier (Identificatore organizzazione) e Product Name (Nome prodotto) devono corrispondere all'identificatore dell'organizzazione e al nome del prodotto usati nella creazione del progetto Xcode. Nello screenshot seguente il valore NotificationHubs viene usato come identificatore dell'organizzazione e il valore GetStarted viene usato come nome del prodotto. Assicurarsi che il valore Bundle Identifier (Identificatore bundle) corrisponda al valore nel progetto Xcode, affinché Xcode usi il profilo di pubblicazione corretto.

      iOS Provisioning Portal register app ID page

    • Push Notifications (Notifiche Push): selezionare l'opzione Push Notifications (Notifiche push) nella sezione Capabilities (Funzionalità).

      Form to register a new App ID

      Questa azione consente di generare l'ID app e richiede all'utente di confermare le informazioni. Fare clic su Continue (Continua) e quindi selezionare Register per confermare il nuovo ID app.

      Confirm new App ID

      Dopo aver selezionato Registra,il nuovo ID app viene visualizzato come voce nella pagina Certificates, Identifiers Profiles (Certificati, profili identificatori).

  4. Nella pagina Certificates, Identifiers Profiles (Certificati, profili identificatori), in Identifiers(Identificatori), individuare la voce App ID (ID app) appena creata e selezionare la relativa riga per visualizzare la schermata Edit your App ID Configuration (Modifica configurazione ID app).

Creazione di un certificato per Hub di notifica

Per consentire all'hub di notifica di usare APNS, è necessario un certificato. Questa operazione può essere eseguita in uno dei due modi seguenti:

  1. Creare un file con estensione .p12 che può essere caricato direttamente in Hub di notifica.
  2. Creare un file con estensione .p8 che può essere usato per l'autenticazione basata su token (approccio più recente).

L'approccio più recente presenta diversi vantaggi rispetto all'uso dei certificati, come documentato in autenticazione basata su token (HTTP/2) per APNS. Sono state però fornite le procedure relative a entrambi gli approcci.

OPZIONE 1: Creazione di un certificato push con estensione .p12 che può essere caricato direttamente in Hub di notifica

  1. Scorrere verso il basso fino all'opzione Push Notifications (Notifiche push) selezionata, quindi selezionare Configure (Configura) per creare il certificato.

    Edit App ID page

  2. Verrà visualizzata la finestra Apple Push Notification service SSL Certificates (Certificati SSL di Apple Push Notification Service). Fare clic sul pulsante Create Certificate (Crea certificato) nella sezione Development SSL Certificate (Certificato SSL per lo sviluppo).

    Create certificate for App ID button

    Verrà visualizzata la schermata Create a new Certificate (Crea un nuovo certificato).

    Nota

    Questa esercitazione usa un certificato di sviluppo usato dall'app per generare un token univoco del dispositivo. La stessa procedura viene usata per registrare un certificato di produzione. Per l'invio delle notifiche, assicurarsi di usare lo stesso tipo di certificato.

  3. Selezionare Choose File (Scegli file), passare al percorso in cui è stato salvato il file CSR creato durante la prima attività e quindi fare doppio clic sul nome del certificato per caricarlo. Selezionare quindi Continua.

  4. Dopo che il portale avrà creato il certificato, fare clic sul pulsante Download (Scarica). Salvare il certificato e prendere nota del percorso di salvataggio.

    Generated certificate download page

    Il certificato viene scaricato e salvato nel computer nella cartella Download.

    Locate certificate file in the Downloads folder

    Nota

    Per impostazione predefinita, il certificato di sviluppo scaricato viene denominato aps_development.cer.

  5. Fare doppio clic sul certificato push scaricato aps_development.cer. Questa azione consente di installare il nuovo certificato in Keychain, come illustrato nell'immagine seguente:

    Keychain access certificates list showing new certificate

    Nota

    Anche se il nome del certificato potrebbe essere diverso, verrà preceduto da Apple Development iOS Push Services (Servizi push iOS per lo sviluppo Apple).

  6. In Accesso portachiavi fare clic con il pulsante destro del mouse sul nuovo certificato push creato nella categoria Certificati . Selezionare Export (Esporta), assegnare un nome al file, selezionare il formato .p12 e quindi selezionare Save (Salva).

    Export certificate as p12 format

    È facoltativamente possibile scegliere di proteggere il certificato tramite una password. Fare clic su OK se si desidera ignorare la creazione della password. Prendere nota del nome del file e del percorso del certificato con estensione p12 esportato. Verranno usati per abilitare l'autenticazione con il servizio APN.

    Nota

    Il nome e il percorso del file. P12 potrebbero essere diversi rispetto a quelli illustrati in questa esercitazione.

OPZIONE 2: Creazione di un certificato con estensione .p8 che può essere usato per l'autenticazione basata su token

  1. Prendere nota dei dettagli seguenti:

    • App ID Prefix (Prefisso ID app); si tratta di un ID team
    • Bundle ID (ID bundle)
  2. Tornare a Certificati, Profili identificatori ,fare clic su Chiavi.

    Nota

    Se è già stata configurata una chiave per APNS, è possibile riutilizzare il certificato con estensione .p8 scaricato subito dopo la creazione. In tal caso, è possibile ignorare i passaggi da 3 a 5.

  3. Per creare una nuova chiave, fare clic sul pulsante + o sul pulsante + (Crea una chiave).

  4. Specificare un valore appropriato in Key Name (Nome chiave) e quindi selezionare l'opzione Apple Push Notifications service (APNs) e quindi fare clic su Continue (Continua), seguito da Register (Registra) nella schermata successiva.

  5. Fare clic su Download (Scarica) e quindi spostare il file con estensione .p8 (e prefisso AuthKey_ ) in una directory locale sicura, infine fare clic su Done (Fine).

    Nota

    Assicurarsi di conservare il file con estensione .p8 in un luogo sicuro e salvare un backup. Dopo aver scaricato la chiave, non è possibile scaricarla di nuovo perché la copia del server è stata rimossa.

  6. In Keys (Chiavi) fare clic sulla chiave appena creata (oppure su una chiave esistente se si è scelto di usare tale chiave).

  7. Prendere nota del valore di Key ID (ID chiave).

  8. Aprire il certificato con estensione .p8 in un'applicazione appropriata di propria scelta, ad esempio Visual Studio Code e quindi prendere nota del valore della chiave, ovvero del valore compreso tra -----BEGIN PRIVATE KEY----- e -----END PRIVATE KEY----- .

    -----BEGIN PRIVATE KEY-----
    <key_value>
    -----END PRIVATE KEY-----
    

    Nota

    Si tratta del valore del token che verrà usato in seguito per configurare Hub di notifica.

Al termine di questa procedura, è necessario disporre delle informazioni seguenti per usarle in un secondo momento in Configurare l'hub di notifica con le informazioni del servizio APN:

  • Team ID (ID team) (vedere il passaggio 1)
  • Bundle ID (ID bundle) (vedere il passaggio 1)
  • Key ID (ID chiave) (vedere il passaggio 7)
  • Token value (Valore del token), ad esempio il valore della chiave con estensione .p8 (vedere il passaggio 8)

Creare un profilo di provisioning per l'app

  1. Tornare al portale di provisioning iOS,selezionare Certificati, Profili identificatori, selezionare Profili dal menu a sinistra e quindi selezionare per creare un nuovo profilo. Verrà visualizzata la schermata Register a New Provisioning Profile (Registra un nuovo profilo di provisioning).

  2. In Development (Sviluppo) selezionare iOS App Development (Sviluppo app iOS) come tipo di profilo di provisioning e quindi Continue (Continua).

    Provisioning profile list

  3. Selezionare quindi l'ID app creata nell'elenco a discesa App ID (ID app) e selezionare Continue (Continua).

    Select the App ID

  4. Nella finestra Select certificates (Seleziona certificati) selezionare il certificato di sviluppo usato per la firma del codice e quindi fare clic su Continue (Continua). Questo non è il certificato push creato. Se non ne esiste uno, è necessario crearlo. Se esiste un certificato, andare al passaggio successivo. Per creare un certificato di sviluppo, se non ne esiste uno:

    1. Se viene visualizzato il messaggio No Certificates are available (Nessun certificato disponibile), selezionare Create Certificate (Crea certificato).
    2. Nella sezione Software selezionare Apple Development (Sviluppo Apple). Selezionare quindi Continua.
    3. Nella schermata Create a New Certificate (Crea un nuovo certificato) selezionare Choose File (Scegli file).
    4. Passare al certificato Certificate Signing Request (Richiesta di firma del certificato) creato in precedenza, selezionarlo e quindi scegliere Open (Apri).
    5. Selezionare Continua.
    6. Scaricare il certificato di sviluppo e prendere nota del percorso di salvataggio.
  5. Tornare alla pagina Certificates, Identifiers Profiles (Certificati, profili identificatori), selezionare Profiles (Profili) dal menu a sinistra e quindi selezionare per creare un nuovo profilo. Verrà visualizzata la schermata Register a New Provisioning Profile (Registra un nuovo profilo di provisioning).

  6. Nella finestra Select certificates (Seleziona certificati) selezionare il certificato di sviluppo appena creato. Selezionare quindi Continua.

  7. Selezionare quindi i dispositivi da usare per il test e selezionare Continue (Continua).

  8. Scegliere infine un nome per il profilo in Provisioning Profile Name (Nome profilo di provisioning) e selezionare Generate (Genera).

    Choose a provisioning profile name

  9. Quando viene creato il nuovo profilo di provisioning, selezionare Download. Prendere nota del percorso di salvataggio.

  10. Passare al percorso del profilo di provisioning e quindi fare doppio clic su di esso per installarlo nel computer di sviluppo Xcode.

Creare un hub di notifica

In questa sezione viene creato un hub di notifica e viene configurata l'autenticazione con il servizio APN usando il certificato push con estensione p12 o l'autenticazione basata su token. Se si vuole usare un hub di notifica che è già stato creato, è possibile ignorare il passaggio 5.

  1. Accedere al portale di Azure.

  2. Scegliere Tutti i servizi dal menu a sinistra e quindi selezionare Hub di notifica nella sezione Dispositivi mobili. Selezionare l'icona a forma di stella accanto al nome del servizio per aggiungere il servizio alla sezione PREFERITI nel menu a sinistra. Dopo aver aggiunto Hub di notifica a PREFERITI, selezionarlo nel menu a sinistra.

    Azure portal - select Notification Hubs

  3. Nella pagina Hub di notifica selezionare Crea sulla barra degli strumenti.

    Notification Hubs - Add toolbar button

  4. Nella scheda Informazioni di base della pagina Hub di notifica seguire questa procedura:

    1. In Sottoscrizioneselezionare il nome della sottoscrizione di Azure da usare e quindi selezionare un gruppo di risorse esistente o crearne uno nuovo.

    2. Immettere un nome univoco per il nuovo spazio dei nomi in Dettagli spazio dei nomi.

    3. Uno spazio dei nomi contiene uno o più hub di notifica, quindi digitare un nome per l'hub in Dettagli hub di notifica. In caso contrario, selezionare uno spazio dei nomi esistente nell'elenco a discesa.

    4. Selezionare un valore nell'elenco a discesa Posizione. Questo valore specifica la posizione in cui creare l'hub.

    5. Selezionare Crea.

      Azure portal - set notification hub properties

  5. Selezionare Notifiche (icona a forma di campanello) e quindi selezionare Vai alla risorsa. È anche possibile aggiornare l'elenco nella pagina Hub di notifica e selezionare l'hub.

    Azure portal - go to resource

  6. Selezionare Criteri di accesso dall'elenco. Prendere nota delle due stringhe di connessione disponibili. Sono necessarie in un secondo momento per gestire le notifiche push.

    Importante

    Non usare il criterio DefaultFullSharedAccessSignature nell'applicazione. Deve essere usato solo nel back-end.

    Azure portal - notification hub connection strings

Configurare l'hub di notifica con le informazioni del servizio APN

In Notification Services (Servizi di notifica) selezionare Apple (APNS) e quindi seguire i passaggi appropriati in base all'approccio scelto in precedenza nella sezione Creazione di un certificato per Hub di notifica.

Nota

Se si compila l'app con un profilo di distribuzione ad hoc o App Store, usare Produzione per Modalità applicazione. Ciò consentirà al dispositivo di inviare notifiche push agli utenti che hanno acquistato l'app dallo Store.

OPZIONE 1: Uso di un certificato push con estensione .p12

  1. Selezionare Certificate.

  2. Selezionare l'icona del file.

  3. Selezionare il file con estensione p12 esportato in precedenza e quindi selezionare Open (Apri).

  4. Se necessario, specificare la password corretta.

  5. Selezionare la modalità Sandbox.

    Configure APNs certification in Azure portal

  6. Selezionare Salva.

OPZIONE 2: Uso dell'autenticazione basata su token

  1. Selezionare Token.

  2. Immettere i valori seguenti acquisiti in precedenza:

    • Key ID (ID chiave)
    • Bundle ID (ID bundle)
    • Team ID (ID team)
    • Token
  3. Scegliere Sandbox

  4. Selezionare Salva.

L'hub di notifica è ora configurato con le informazioni del servizio APN. Sono presenti anche le stringhe di connessione per registrare l'app e inviare notifiche push.

Connettere l'app all'hub di notifica

Creare un nuovo progetto

  1. In Visual Studio creare un nuovo progetto iOS e selezionare il modello App visualizzazione singola, quindi fare clic su Avanti

    Visual Studio - Select Application Type

  2. Immettere il nome dell'app e l'identificatore dell'organizzazione, quindi fare clic su Avanti e su Crea

  3. Nella visualizzazione della soluzione fare doppio clic su Info.plist e in Identità assicurarsi che l'identificatore del bundle corrisponda a quello usato per la creazione del profilo di provisioning. In Firma accertarsi che sotto Team sia selezionato il proprio account per sviluppatore, che sia selezionato "Automatically manage signing" (Gestisci firma automaticamente) e che vengano automaticamente selezionati il certificato di firma e il profilo di provisioning.

    Visual Studio- iOS App Config

  4. Nella visualizzazione della soluzione fare doppio clic su Entitlements.plist e verificare che l'opzione Entitlements.plist sia selezionata.

    Visual Studio- iOS Entitlements Config

  5. Aggiungere il pacchetto di messaggistica di Azure. Nella visualizzazione della soluzione fare clic con il pulsante destro del mouse sul progetto e scegliere AggiungiAggiungi pacchetti NuGet. Cercare Xamarin.Azure.NotificationHubs.iOS e aggiungere il pacchetto al progetto.

  6. Aggiungere un nuovo file alla classe, assegnargli il nome Constants.cs, aggiungere le variabili seguenti e sostituire i segnaposto dei valori letterali stringa con i valori hubname e DefaultListenSharedAccessSignature annotati in precedenza.

    // Azure app-specific connection string and hub path
    public const string ListenConnectionString = "<Azure DefaultListenSharedAccess Connection String>";
    public const string NotificationHubName = "<Azure Notification Hub Name>";
    
  7. In AppDelegate.cs aggiungere l'istruzione using seguente:

    using WindowsAzure.Messaging.NotificationHubs;
    using UserNotifications
    
  8. Creare un'implementazione MSNotificationHubDelegate di in AppDelegate.cs :

    public class AzureNotificationHubListener : MSNotificationHubDelegate
    {
        public override void DidReceivePushNotification(MSNotificationHub notificationHub, MSNotificationHubMessage message)
        {
    
        }
    }
    
  9. In AppDelegate.cs aggiornare FinishedLaunching() in base al codice seguente:

    public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
    {
        // Set the Message listener
        MSNotificationHub.SetDelegate(new AzureNotificationHubListener());
    
        // Start the SDK
        MSNotificationHub.Start(ListenConnectionString, NotificationHubName);
    
        return true;
    }
    
  10. In AppDelegate.cs implementare il DidReceivePushNotification metodo per la AzureNotificationHubListener classe :

    public override void DidReceivePushNotification(MSNotificationHub notificationHub, MSNotificationHubMessage message)
    {
        // This sample assumes { aps: { alert: { title: "Hello", body: "World" } } }
        var alertTitle = message.Title ?? "Notification";
        var alertBody = message.Body;
    
        var myAlert = UIAlertController.Create(alertTitle, alertBody, UIAlertControllerStyle.Alert);
        myAlert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
        UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(myAlert, true, null);
    }
    
  11. Eseguire l'app sul dispositivo.

Inviare notifiche push di prova

È possibile testare rapidamente la ricezione di notifiche nell'app con l'opzione Invio di prova nel Azure portal. Verrà inviata una notifica push di prova al dispositivo.

Azure portal - Test Send

Le notifiche push vengono in genere inviate in un servizio back-end come App per dispositivi mobili o ASP.NET usando una libreria compatibile. Se non è disponibile una libreria per il back-end è anche possibile usare direttamente l'API REST per inviare messaggi di notifica.

Passaggi successivi

In questa esercitazione le notifiche sono state trasmesse a tutti i dispositivi iOS registrati con il back-end. Per informazioni sulle procedure per eseguire il push di notifiche a dispositivi iOS specifici, passare all'esercitazione seguente: