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 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.

    • ID bundle: immettere un ID bundle del formato Identificatore organizzazione.Nome prodotto come indicato nella Guida alla distribuzione dell'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

    • Notifiche push: selezionare l'opzione Notifiche push nella sezione 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 Register (Registra), il nuovo ID app viene visualizzato come una voce nella pagina Certificates, Identifiers & Profiles (Certificati, identificatori e profili).

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

Creazione di un certificato per Hub di notifica

Per consentire all'hub di notifica di usare APNS, è necessario un certificato. A tale scopo si può procedere 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 nell'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 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. In Certificates, Identifiers & Profiles (Certificati, identificatori e profili) fare clic su Keys (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 Create a key (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 a iOS Provisioning Portal (Portale di provisioning di iOS), selezionare Certificates, Identifiers & Profiles (Certificati, identificatori e profili), quindi Profiles (Profili) dal menu a sinistra e infine 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 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, identificatori e profili), selezionare Profiles (Profili) dal menu a sinistra e infine 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 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. A screenshot showing select All Services for an existing namespace.

  3. Digitare Hub di notifica nella casella di testo Filtra servizi. Selezionare l'icona a forma di stella accanto al nome del servizio per aggiungere il servizio alla sezione PREFERITI nel menu a sinistra. Selezionare Hub di notifica.

    A screenshot showing how to filter for notification hubs.

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

    A screenshot showing how to create a new notification hub.

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

    1. In Sottoscrizione selezionare il nome della sottoscrizione di Azure che si vuole 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.

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

      Screenshot showing notification hub details.

    5. Esaminare l'opzione zone di disponibilità. Se si sceglie un'area con zone di disponibilità, la casella di controllo è selezionata per impostazione predefinita. zone di disponibilità è una funzionalità a pagamento, quindi viene aggiunta una tariffa aggiuntiva al livello.

    6. Scegliere un'opzione di ripristino di emergenza: Nessuna, Area di ripristino abbinata o Area di ripristino flessibile. Se si sceglie Area di ripristino abbinata, viene visualizzata l'area di failover. Se si seleziona Area di ripristino flessibile, usare l'elenco a discesa per scegliere tra un elenco di aree di ripristino.

      Screenshot showing availability zone details.

    7. Seleziona Crea.

  6. Al termine della distribuzione, selezionare Vai alla risorsa.

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. Seleziona 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. Seleziona 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

Crea 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 Abilita notifiche push 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 Aggiungi>Aggiungi 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 di MSNotificationHubDelegate 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.csimplementare 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 portale di Azure. 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: