Esercitazione: eseguire il push di notifiche alle app Xamarin.iOS con Hub di notifica di AzureTutorial: Push notifications to Xamarin.iOS apps using Azure Notification Hubs

PanoramicaOverview

Questa esercitazione illustra come usare Hub di notifica di Azure per inviare notifiche push a un'applicazione per iOS.This tutorial shows you how to use Azure Notification Hubs to send push notifications to an iOS application. Si crea un'app Xamarin.iOS vuota che riceve notifiche push attraverso Apple Push Notification Service (APNS).You create a blank Xamarin.iOS app that receives push notifications by using the 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.When you're finished, you are able to use your notification hub to broadcast push notifications to all the devices running your app. Il codice compilato è disponibile nell'esempio di app NotificationHubs.The finished code is available in the NotificationHubs app sample.

In questa esercitazione si crea/aggiorna il codice per eseguire le attività seguenti:In this tutorial, you create/update code to do the following tasks:

  • Generare il file della richiesta di firma del certificatoGenerate the certificate signing request file
  • Registrare l'app per le notifiche pushRegister your app for push notifications
  • Creare un profilo di provisioning per l'appCreate a provisioning profile for the app
  • Configurare l'hub di notifica per l'invio di notifiche push di iOSConfigure your notification hub for iOS push notifications
  • Inviare notifiche push di provaSend test push notificaitons

prerequisitiPrerequisites

  • Sottoscrizione di Azure.Azure subscription. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.If you don't have an Azure subscription, create a free account before you begin.
  • Versione più recente di XcodeLatest version of XCode
  • Dispositivo compatibile con iOS 10 o versione successivaAn iOS 10 (or later version) compatible device
  • Apple Developer Program .Apple Developer Program membership.
  • Visual Studio per MacVisual Studio for 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.Because of configuration requirements for iOS push notifications, you must deploy and test the sample application on a physical iOS device (iPhone or iPad) instead of in the simulator.

Il completamento di questa esercitazione costituisce un prerequisito per tutte le altre esercitazioni di Hub di notifica relative ad app Xamarin.iOS.Completing this tutorial is a prerequisite for all other Notification Hubs tutorials for Xamarin.iOS apps.

Generare il file della richiesta di firma del certificatoGenerate the certificate signing request file

Il servizio Apple Push Notification Service (APNS) usa i certificati per autenticare le notifiche push.The Apple Push Notification Service (APNS) uses certificates to authenticate your push notifications. Seguire queste istruzioni per creare il certificato push necessario per inviare e ricevere notifiche.Follow these instructions to create the necessary push certificate to send and receive notifications. Per altre informazioni su questi concetti, vedere la documentazione ufficiale Apple Push Notification Service.For more information on these concepts, see the official Apple Push Notification Service documentation.

Generare il file della richiesta di firma del certificato usato da Apple per la generazione di un certificato push firmato.Generate the Certificate Signing Request (CSR) file, which is used by Apple to generate a signed push certificate.

  1. Sul Mac eseguire lo strumento Accesso Portachiavi.On your Mac, run the Keychain Access tool. Può essere aperto dalla cartella Utilities (Utility) o Other (Altro) nella finestra di avvio.It can be opened from the Utilities folder or the Other folder on the launch pad.
  2. Fare clic su Keychain Access (Accesso Portachiavi), espandere Certificate Assistant (Assistente Certificato), quindi fare clic su Request a Certificate from a Certificate Authority... (Richiedi un certificato da una Autorità di Certificazione...).Click Keychain Access, expand Certificate Assistant, then click Request a Certificate from a Certificate Authority....

  3. Selezionare User Email Address (Indirizzo e-mail utente) e Common Name (Nome comune), assicurarsi che l'opzione Saved to disk (Salvata sul disco) sia selezionata, quindi fare clic su Continue (Continua).Select your User Email Address and Common Name, make sure that Saved to disk is selected, and then click Continue. Lasciare vuoto il campo Indirizzo e-mail CA , in quanto non è obbligatorio.Leave the CA Email Address field blank as it is not required.

  4. Digitare un nome per il file della richiesta di firma del certificato (CSR) in Save As, (Salva col nome), selezionare il percorso in Where (Posizione), quindi fare clic su Save (Salva).Type a name for the Certificate Signing Request (CSR) file in Save As, select the location in Where, then click Save.

    Questa operazione consente di salvare il file CSR nel percorso selezionato. Il percorso predefinito è il Desktop.This action saves the CSR file in the selected location; the default location is in the Desktop. Tenere a mente il percorso scelto per il file.Remember the location chosen for the file.

A questo punto registrare l'app con Apple, abilitare le notifiche push e caricare il file CSR esportato per creare un certificato push.Next, you register your app with Apple, enable push notifications, and upload the exported CSR to create a push certificate.

Registrare l'app per le notifiche pushRegister your app for push notifications

Per poter inviare notifiche push a un'app per iOS, è necessario registrare l'applicazione con Apple ed eseguire un'altra registrazione per abilitare le notifiche push.To be able to send push notifications to an iOS app, you must register your application with Apple and also register for push notifications.

  1. Se l'app non è ancora stata registrata, accedere al portale di provisioning iOS su Apple Developer Center, eseguire l'accesso con il proprio ID Apple, fare clic su Identifiers, quindi su App IDs e infine fare sul segno + per registrare una nuova app.If you have not already registered your app, navigate to the iOS Provisioning Portal at the Apple Developer Center, sign in with your Apple ID, click Identifiers, then click App IDs, and finally click on the + sign to register a new app.

  2. Aggiornare i tre campi seguenti per la nuova app e quindi fare clic su Continue:Update the following three fields for your new app and then click Continue:

    • Name: digitare un nome descrittivo per l'app nel campo Name della sezione App ID Description.Name: Type a descriptive name for your app in the Name field in the App ID Description section.
    • Bundle Identifier: nella sezione Explicit App ID immettere un valore in Bundle Identifier nel formato <Organization Identifier>.<Product Name>, come indicato nel documento App Distribution Guide.Bundle Identifier: Under the Explicit App ID section, enter a Bundle Identifier in the form <Organization Identifier>.<Product Name> as mentioned in the App Distribution Guide. L'identificatore dell'organizzazione e il nome del prodotto usati devono corrispondere all'identificatore dell'organizzazione e al nome del prodotto usati nella creazione del progetto XCode.The Organization Identifier and Product Name you use must match the organization identifier and product name you use when you create your XCode project. Nello screenshot seguente NotificationHubs viene usato come identificatore dell'organizzazione e GetStarted viene usato come nome del prodotto.In the following screenshot NotificationHubs is used as an organization identifier and GetStarted is used as the product name. Verificare che questi valori corrispondano ai valori usati nel progetto XCode, in modo da usare il profilo di pubblicazione corretto con XCode.Making sure this value matches the value you use in your XCode project allows you to use the correct publishing profile with XCode.
    • Push Notifications (Notifiche Push): selezionare l'opzione Push Notifications nella sezione App Services (Servizi app).Push Notifications: Check the Push Notifications option in the App Services section.

      Questa azione consente di generare l'ID dell'app e richiede all'utente di confermare le informazioni.This action generates your App ID and requests you to confirm the information. Fare clic su Registra per confermare il nuovo ID app.Click Register to confirm the new App ID.

      Dopo aver fatto clic su Register (Registrazione) verrà visualizzata la schermata Registration complete (Registrazione completata), come mostrato nell'immagine seguente.Once you click Register, you see the Registration complete screen, as shown in the following image. Fare clic su Done.Click Done.

  3. In Developer Center (Centro per sviluppatori), individuare l'ID dell'app appena creata in App IDs (ID app) e fare clic sulla relativa riga.In the Developer Center, under App IDs, locate the app ID that you created, and click on its row.

    Se si fa clic sull'ID dell'app, verranno visualizzati i dettagli relativi all'app.Clicking on the app ID displays the app details. Fare clic sul pulsante Edit nella parte inferiore della schermata.Click the Edit button at the bottom.

  4. Scorrere fino alla fine della schermata e fare clic su Crea Certificato... nella sezione Development Push SSL Certificate.Scroll to the bottom of the screen, and click the Create Certificate... button under the section Development Push SSL Certificate.

    Verrà visualizzato l'assistente "Add iOS Certificate" (Aggiungi il certificato iOS).You see the "Add iOS Certificate" assistant.

    Nota

    Questa esercitazione usa un certificato di sviluppo.This tutorial uses a development certificate. La stessa procedura viene usata per registrare un certificato di produzione.The same process is used when registering a production certificate. Per l'invio delle notifiche, assicurarsi di usare lo stesso tipo di certificato.Just make sure that you use the same certificate type when sending notifications.

  5. Fare clic su Choose File, passare al percorso in cui è stato salvato il file CSR creato durante la prima attività, quindi fare clic su Generate.Click Choose File, browse to the location where you saved the CSR file that you created in the first task, then click Generate.

  6. Al termine della creazione del certificato nel portale, fare clic su Download e quindi su Done.After the certificate is created by the portal, click the Download button, and click Done.

    Il certificato di firma verrà scaricato e salvato nel computer nella cartella Download.It downloads the certificate and saves it to your computer in your Downloads folder.

    Nota

    Per impostazione predefinita, il file scaricato di un certificato di sviluppo è denominato aps_development.cer.By default, the downloaded file a development certificate is named aps_development.cer.

  7. Fare doppio clic sul certificato push scaricato aps_development.cer.Double-click the downloaded push certificate aps_development.cer.

    Questa azione consente di installare il nuovo certificato in Keychain, come illustrato nell'immagine seguente:This action installs the new certificate in the Keychain, as shown in the following image:

    Nota

    Il nome del certificato potrebbe essere diverso, ma verrà preceduto da Apple Development iOS Push Services (Servizi push iOS per lo sviluppo Apple).The name in your certificate might be different, but it will be prefixed with Apple Development iOS Push Services.

  8. In Accesso portachiavi fare clic con il pulsante destro del mouse sul nuovo certificato push creato nella categoria Certificati .In Keychain Access, right-click the new push certificate that you created in the Certificates category. Fare clic su Esporta, assegnare un nome al file, selezionare il formato .p12 e quindi fare clic su Salva.Click Export, name the file, select the .p12 format, and then click Save.

    Prendere nota del nome del file e del percorso del certificato con estensione p12 esportato.Make a note of the file name and location of the exported .p12 certificate. Viene usato per abilitare l'autenticazione con il servizio APN.It is used to enable authentication with APNS.

    Nota

    In questa esercitazione viene creato un file QuickStart.p12.This tutorial creates a QuickStart.p12 file. Il nome e il percorso del file potrebbero essere diversi.Your file name and location might be different.

Creare un profilo di provisioning per l'appCreate a provisioning profile for the app

  1. Nel portale di provisioning iOS selezionare Provisioning Profiles, quindi All e infine fare clic sul pulsante + per creare un nuovo profilo.Back in the iOS Provisioning Portal, select Provisioning Profiles, select All, and then click the + button to create a new profile. Viene visualizzata la procedura guidata Add iOS Provisioning Profile (Aggiungi profilo di provisioning iOS)You see the Add iOS Provisioning Profile Wizard

  2. Selezionare iOS App Development (Sviluppo app iOS) in Development (Sviluppo) come tipo di profilo di provisioning e fare clic su Continue (Continua).Select iOS App Development under Development as the provisioning profile type, and click Continue.
  3. Selezionare quindi l'ID dell'app creata nell'elenco a discesa App ID (ID app) e fare clic su Continue (Continua)Next, select the app ID you created from the App ID drop-down list, and click Continue

  4. Nella schermata Select certificates selezionare il solito certificato di sviluppo usato per la firma del codice e fare clic su Continue.In the Select certificates screen, select your usual development certificate used for code signing, and click Continue. Questo non è il certificato push creato.This certificate is not the push certificate you created.

  5. In Devices selezionare i dispositivi da usare per il test e fare clic su Continue.Next, select the Devices to use for testing, and click Continue

  6. Scegliere infine un nome per il profilo in Profile Name e fare clic su Generate.Finally, pick a name for the profile in Profile Name, click Generate.

  7. Una volta creato il nuovo profilo di provisioning, fare clic per scaricarlo e installarlo nel computer di sviluppo Xcode.When the new provisioning profile is created click to download it and install it on your Xcode development machine. Fare quindi clic su Done.Then click Done.

Configurare l'hub di notifica per l'invio di notifiche push di iOSConfigure your notification hub for iOS push notifications

Questa sezione illustra come creare un nuovo hub di notifica e configurare l'autenticazione con il servizio APN usando il certificato push .p12 creato in precedenza.This section walks you through the steps to create a new notification hub and configure authentication with APNS using the .p12 push certificate that you previously created. Se si vuole usare un hub di notifica che è già stato creato, è possibile ignorare il passaggio 5.If you want to use a notification hub that you have already created, you can skip to step 5.

  1. Accedere al portale di Azure.Sign in to the Azure portal.

  2. Selezionare Crea una risorsa > Dispositivi mobili > Hub di notifica.Select Create a resource > Mobile > Notification Hub.

    Portale di Azure: creare un hub di notifica

  3. Nella casella Hub di notifica digitare un nome univoco.In the Notification Hub box, type a unique name. Selezionare l'area, la sottoscrizione e il gruppo di risorse (se già disponibili).Select your Region, Subscription, and Resource Group (if you have one already).

    Se non si ha già uno spazio dei nomi del bus di servizio, è possibile usare il nome predefinito, che viene creato in base al nome dell'hub (se lo spazio dei nomi è disponibile).If you don't already have a service bus namespace, you can use the default name, which is created based on the hub name (if the namespace name is available).

    Se si ha già un spazio dei nomi del bus di servizio in cui si vuole creare l'hub, seguire questa proceduraIf you already have a service bus namespace that you want to create the hub in, follow these steps

    a.a. Nell'area Spazio dei nomi selezionare il collegamento Seleziona esistente.In the Namespace area, select the Select Existing link.

    b.b. Selezionare Create.Select Create.

    Portale di Azure: impostare le proprietà dell'hub di notifica

  4. Selezionare Notifiche (icona a forma di campanello) e selezionare Vai alla risorsa.Select Notifications (Bell icon), and select Go to resource.

    Portale di Azure - Notifiche -> Vai alla risorsa

  5. Selezionare Criteri di accesso dall'elenco.Select Access Policies from the list. Prendere nota delle due stringhe di connessione disponibili.Note the two connection strings that are available to you. Sono necessarie in un secondo momento per gestire le notifiche push.You need them to handle push notifications later.

    Importante

    NON usare DefaultFullSharedAccessSignature nell'applicazione.Do NOT use the DefaultFullSharedAccessSignature in your application. Deve essere usato solo nel back-end.This is meant to be used in your back-end only.

    Portale di Azure: stringhe di connessione dell'hub di notifica

Configurare le impostazioni di iOS per l'hub di notificaConfigure iOS settings for the notification hub

  1. Selezionare Apple (APNS) nel gruppo NOTIFICATION SETTINGS (IMPOSTAZIONI DI NOTIFICA).Select Apple (APNS) in the NOTIFICATION SETTINGS group.
  2. Selezionare Certificato, fare clic sull'icona del file e quindi selezionare il file con estensione p12 esportato in precedenza.Select Certificate, click the file icon, and select the .p12 file that you exported earlier.
  3. Immettere la password per il certificato.Specify the password for the certificate.
  4. Selezionare la modalità Sandbox.Select Sandbox mode. Usare la modalità Production (Produzione) solo se si vuole inviare notifiche push agli utenti che hanno acquistato l'app dallo Store.Use the Production mode only if you want to send push notifications to users who purchased your app from the store.

    Configurare il servizio APN nel portale di Azure

    Configurare il certificato APN nel portale di Azure

L'hub di notifica è ora configurato per l'uso con il servizio APN e sono disponibili le stringhe di connessione per la registrazione dell'app e l'invio di notifiche push.Your notification hub is now configured to work with APNS, and you have the connection strings to register your app and send push notifications.

Connettere l'app all'hub di notificaConnect your app to the notification hub

Creare un nuovo progettoCreate a new project

  1. In Visual Studio creare un nuovo progetto iOS e selezionare il modello App visualizzazione singola, quindi fare clic su AvantiIn Visual Studio, create a new iOS project and select the Single View App template, and click Next

    Visual Studio - Selezionare il tipo di applicazione

  2. Immettere il nome dell'app e l'identificatore dell'organizzazione, quindi fare clic su Avanti e su CreaEnter your App Name and Organization identifier, then hit Next, then Create

  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.From the Solution view, double-click Info.plist and under Identity make sure your Bundle Identifier matches the one used when creating your provisioning profile. 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.Under Signing ensure that your Developer account is selected under Team, "Automatically manage signing" is selected and your Signing Certificate and Provisioning Profile are automatically selected.

    Visual Studio - Configurazione di un'app iOS

  4. Nella visualizzazione della soluzione fare doppio clic su Entitlements.plist e verificare che l'opzione "Abilita Notifiche push" sia selezionata.From the Solution view, double-click Entitlements.plist and ensure that "Enable Push Notifications" is checked.

    Visual Studio - Configurazione di entitlement iOS

  5. Aggiungere il pacchetto di messaggistica di Azure.Add the Azure Messaging package. Nella visualizzazione della soluzione fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi > Aggiungi pacchetti NuGet.In the Solution view, right-click the project and select Add > Add NuGet Packages. Cercare Xamarin.Azure.NotificationHubs.iOS e aggiungere il pacchetto al progetto.Search for Xamarin.Azure.NotificationHubs.iOS and add the package to your project.

  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 il nome dell'hub e il valore DefaultListenSharedAccessSignature annotati in precedenza.Add a new file to your class, name it Constants.cs and add the following variables and replace the string literal placeholders with your hub name and the DefaultListenSharedAccessSignature noted earlier.

        // Azure app-specific connection string and hub path
        public const string ListenConnectionString = "<Azure connection string>";
        public const string NotificationHubName = "<Azure hub path>";
    
  7. In AppDelegate.csaggiungere l'istruzione using seguente:In AppDelegate.cs, add the following using statement:

        using WindowsAzure.Messaging;
    
  8. Dichiarare un'istanza di SBNotificationHub:Declare an instance of SBNotificationHub:

        private SBNotificationHub Hub { get; set; }
    
  9. In AppDelegate.cs aggiornare FinishedLaunching() in base al codice seguente:In AppDelegate.cs, update FinishedLaunching() to match the following code:

        public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
        {
            if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
            {
                UNUserNotificationCenter.Current.RequestAuthorization(UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.Sound,
                                                                      (granted, error) =>
                {
                    if (granted)
                        InvokeOnMainThread(UIApplication.SharedApplication.RegisterForRemoteNotifications);
                });
            } else if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
                var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
                       UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
                       new NSSet ());
    
                UIApplication.SharedApplication.RegisterUserNotificationSettings (pushSettings);
                UIApplication.SharedApplication.RegisterForRemoteNotifications ();
            } else {
                UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
                UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
            }
    
            return true;
        }
    
  10. Eseguire l'override del metodo RegisteredForRemoteNotifications() in AppDelegate.cs:Override the RegisteredForRemoteNotifications() method in AppDelegate.cs:

        public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
        {
            Hub = new SBNotificationHub(Constants.ListenConnectionString, Constants.NotificationHubName);
    
            Hub.UnregisterAllAsync (deviceToken, (error) => {
                if (error != null)
                {
                    Console.WriteLine("Error calling Unregister: {0}", error.ToString());
                    return;
                }
    
                NSSet tags = null; // create tags if you want
                Hub.RegisterNativeAsync(deviceToken, tags, (errorCallback) => {
                    if (errorCallback != null)
                        Console.WriteLine("RegisterNativeAsync error: " + errorCallback.ToString());
                });
            });
        }
    
  11. Eseguire l'override del metodo ReceivedRemoteNotification() in AppDelegate.cs:Override the ReceivedRemoteNotification() method in AppDelegate.cs:

        public override void ReceivedRemoteNotification(UIApplication application, NSDictionary userInfo)
        {
            ProcessNotification(userInfo, false);
        }
    
  12. Creare il metodo ProcessNotification() seguente in AppDelegate.cs:Create the following ProcessNotification() method in AppDelegate.cs:

        void ProcessNotification(NSDictionary options, bool fromFinishedLaunching)
        {
            // Check to see if the dictionary has the aps key.  This is the notification payload you would have sent
            if (null != options && options.ContainsKey(new NSString("aps")))
            {
                //Get the aps dictionary
                NSDictionary aps = options.ObjectForKey(new NSString("aps")) as NSDictionary;
    
                string alert = string.Empty;
    
                //Extract the alert text
                // NOTE: If you're using the simple alert by just specifying
                // "  aps:{alert:"alert msg here"}  ", this will work fine.
                // But if you're using a complex alert with Localization keys, etc.,
                // your "alert" object from the aps dictionary will be another NSDictionary.
                // Basically the JSON gets dumped right into a NSDictionary,
                // so keep that in mind.
                if (aps.ContainsKey(new NSString("alert")))
                    alert = (aps [new NSString("alert")] as NSString).ToString();
    
                //If this came from the ReceivedRemoteNotification while the app was running,
                // we of course need to manually process things like the sound, badge, and alert.
                if (!fromFinishedLaunching)
                {
                    //Manually show an alert
                    if (!string.IsNullOrEmpty(alert))
                    {
                        UIAlertView avAlert = new UIAlertView("Notification", alert, null, "OK", null);
                        avAlert.Show();
                    }
                }
            }
        }
    

    Nota

    È possibile scegliere di eseguire l'override di FailedToRegisterForRemoteNotifications() per gestire situazioni quali l'assenza di una connessione di rete.You can choose to override FailedToRegisterForRemoteNotifications() to handle situations such as no network connection. Questo risulta particolarmente importante nei casi in cui l'utente può avviare l'applicazione in modalità offline, ad esempio in aereo, e si vogliono gestire scenari di messaggistica push specifici per l'applicazione.This is especially important where the user might start your application in offline mode (for example, Airplane) and you want to handle push messaging scenarios specific to your app.

  13. Eseguire l'app sul dispositivo.Run the app on your device.

Inviare notifiche push di provaSend test push notifications

È possibile testare rapidamente la ricezione di notifiche nell'app con l'opzione Invio di prova nel portale di Azure.You can test receiving notifications in your app with the Test Send option in the Azure portal. Verrà inviata una notifica push di prova al dispositivo.It sends a test push notification to your device.

Portale di Azure - Invio di prova

Le notifiche push vengono in genere inviate in un servizio back-end come App per dispositivi mobili o ASP.NET usando una libreria compatibile.Push notifications are normally sent in a back-end service like Mobile Apps or ASP.NET using a compatible library. Se non è disponibile una libreria per il back-end è anche possibile usare direttamente l'API REST per inviare messaggi di notifica.If a library is not available for your back-end, you can also use the REST API directly to send notification messages.

Passaggi successiviNext steps

In questa esercitazione le notifiche sono state trasmesse a tutti i dispositivi iOS registrati con il back-end.In this tutorial, you sent broadcast notifications to all your iOS devices registered with the backend. Per informazioni sulle procedure per eseguire il push di notifiche a dispositivi iOS specifici, passare all'esercitazione seguente:To learn how to push notifications to specific iOS devices, advance to the following tutorial: