Aggiungere notifiche push all'app Xamarin.FormsAdd push notifications to your Xamarin.Forms app

PanoramicaOverview

In questa esercitazione vengono aggiunte notifiche push a tutti i progetti creati nella guida introduttiva per Xamarin.Forms,In this tutorial, you add push notifications to all the projects that resulted from the Xamarin.Forms quick start. in modo che a ogni inserimento di record venga inviata una notifica push a tutti i client multipiattaforma.This means that a push notification is sent to all cross-platform clients every time a record is inserted.

Se non si usa il progetto server di avvio rapido scaricato, sarà necessario aggiungere il pacchetto di estensione di notifica push.If you do not use the downloaded quick start server project, you will need the push notification extension package. Per altre informazioni, vedere Usare l'SDK del server back-end .NET per App per dispositivi mobili di Azure.For more information, see Work with the .NET backend server SDK for Azure Mobile Apps.

prerequisitiPrerequisites

Per iOS sono necessari un dispositivo iOS fisico e un'appartenenza all'Apple Developer Program.For iOS, you will need an Apple Developer Program membership and a physical iOS device. Il simulatore iOS non supporta le notifiche push.The iOS simulator does not support push notifications.

Configurare un hub di notificaConfigure a notification hub

Poiché le funzioni delle app per dispositivi mobili del Servizio app di Azure usano Hub di notifica di Azure per inviare push, si dovrà configurare un hub di notifica per l'app per dispositivi mobili.The Mobile Apps feature of Azure App Service uses Azure Notification Hubs to send pushes, so you will be configuring a notification hub for your mobile app.

  1. Nel portale di Azure passare a Servizi app e quindi selezionare il back-end dell'app.In the Azure portal, go to App Services, and then select your app back end. In Impostazioni selezionare Push.Under Settings, select Push.
  2. Per aggiungere una risorsa hub di notifica all'app selezionare Connetti.To add a notification hub resource to the app, select Connect. È possibile creare un hub o connettersi a uno esistente.You can either create a hub or connect to an existing one.

    Configurare un hub

A questo punto un hub di notifica è stato connesso al progetto di back-end dell'app per dispositivi mobili.Now you have connected a notification hub to your Mobile Apps back-end project. In seguito si configurerà questo hub di notifica per la connessione a un sistema PNS (Platform Notification System) per eseguire il push ai dispositivi.Later you configure this notification hub to connect to a platform notification system (PNS) to push to devices.

Aggiornare il progetto server per l'invio di notifiche pushUpdate the server project to send push notifications

In questa sezione viene aggiornato il codice nel progetto di back-end dell'app per dispositivi mobili esistente per inviare una notifica push ogni volta che viene aggiunto un nuovo elemento.In this section, you update code in your existing Mobile Apps back-end project to send a push notification every time a new item is added. Questo processo si basa sulla funzionalità dei modelli di Hub di notifica di Azure, che abilita i push multipiattaforma.This process is powered by the template feature of Azure Notification Hubs, which enables cross-platform pushes. I diversi client vengono registrati per le notifiche push usando i modelli e un unico push universale può raggiungere tutte le piattaforme client.The various clients are registered for push notifications using templates, and a single universal push can get to all client platforms.

Scegliere una delle seguenti procedure che corrisponde al tipo di progetto di back-end—, che sia back-end .NET o back-end Node.js.Choose one of the following procedures that matches your back-end project type—either .NET back end or Node.js back end.

Progetto di back-end .NET.NET back-end project

  1. In Visual Studio fare clic con il pulsante destro del mouse sul progetto server.In Visual Studio, right-click the server project. Scegliere quindi Gestisci pacchetti NuGet.Then select Manage NuGet Packages. Cercare Microsoft.Azure.NotificationHubs e quindi selezionare Installa.Search for Microsoft.Azure.NotificationHubs, and then select Install. Questo processo installa la libreria Hub di notifica per l'invio di notifiche dal back-end.This process installs the Notification Hubs library for sending notifications from the back end.
  2. Nel progetto server aprire Controller > TodoItemController.cs.In the server project, open Controllers > TodoItemController.cs. Aggiungere quindi le istruzioni using seguenti:Then add the following using statements:

     using System.Collections.Generic;
     using Microsoft.Azure.NotificationHubs;
     using Microsoft.Azure.Mobile.Server.Config;
    
  3. Nel metodo PostTodoItem aggiungere il codice seguente dopo la chiamata a InsertAsync:In the PostTodoItem method, add the following code after the call to InsertAsync:

     // Get the settings for the server project.
     HttpConfiguration config = this.Configuration;
     MobileAppSettingsDictionary settings =
         this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings();
    
     // Get the Notification Hubs credentials for the mobile app.
     string notificationHubName = settings.NotificationHubName;
     string notificationHubConnection = settings
         .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString;
    
     // Create a new Notification Hub client.
     NotificationHubClient hub = NotificationHubClient
     .CreateClientFromConnectionString(notificationHubConnection, notificationHubName);
    
     // Send the message so that all template registrations that contain "messageParam"
     // receive the notifications. This includes APNS, GCM, WNS, and MPNS template registrations.
     Dictionary<string,string> templateParams = new Dictionary<string,string>();
     templateParams["messageParam"] = item.Text + " was added to the list.";
    
     try
     {
         // Send the push notification and log the results.
         var result = await hub.SendTemplateNotificationAsync(templateParams);
    
         // Write the success result to the logs.
         config.Services.GetTraceWriter().Info(result.State.ToString());
     }
     catch (System.Exception ex)
     {
         // Write the failure result to the logs.
         config.Services.GetTraceWriter()
             .Error(ex.Message, null, "Push.SendAsync Error");
     }
    

    Questo processo invia una notifica modello contenente item.Text quando viene inserito un nuovo elemento.This process sends a template notification that contains the item.Text when a new item is inserted.

  4. Pubblicare di nuovo il progetto server.Republish the server project.

Progetto di back-end Node.jsNode.js back-end project

  1. Se ancora non è stato fatto, scaricare il progetto di back-end di avvio rapido oppure usare l'editor online del Portale di Azure.If you haven't already done so, download the quickstart back-end project, or else use the online editor in the Azure portal.
  2. Sostituire il codice esistente in todoitem.js con il codice seguente:Replace the existing code in todoitem.js with the following code:

     var azureMobileApps = require('azure-mobile-apps'),
     promises = require('azure-mobile-apps/src/utilities/promises'),
     logger = require('azure-mobile-apps/src/logger');
    
     var table = azureMobileApps.table();
    
     table.insert(function (context) {
     // For more information about the Notification Hubs JavaScript SDK,
     // see http://aka.ms/nodejshubs.
     logger.info('Running TodoItem.insert');
    
     // Define the template payload.
     var payload = '{"messageParam": "' + context.item.text + '" }';  
    
     // Execute the insert. The insert returns the results as a promise.
     // Do the push as a post-execute action within the promise flow.
     return context.execute()
         .then(function (results) {
             // Only do the push if configured.
             if (context.push) {
                 // Send a template notification.
                 context.push.send(null, payload, function (error) {
                     if (error) {
                         logger.error('Error while sending push notification: ', error);
                     } else {
                         logger.info('Push notification sent successfully!');
                     }
                 });
             }
             // Don't forget to return the results from the context.execute().
             return results;
         })
         .catch(function (error) {
             logger.error('Error while running context.execute: ', error);
         });
     });
    
     module.exports = table;  
    

    Questo processo invia una notifica modello contenente item.text quando viene inserito un nuovo elemento.This process sends a template notification that contains the item.text when a new item is inserted.

  3. In caso di modifica del file nel computer locale, ripubblicare il progetto server.When you edit the file on your local computer, republish the server project.

Configurare ed eseguire il progetto Android (facoltativo)Configure and run the Android project (optional)

Completare questa sezione per abilitare le notifiche push per il progetto Xamarin.Forms Droid per Android.Complete this section to enable push notifications for the Xamarin.Forms Droid project for Android.

Abilitare Firebase Cloud Messaging (FCM)Enable Firebase Cloud Messaging (FCM)

  1. Accedere alla console di Firebase.Sign in to the Firebase console. Creare un nuovo progetto Firebase se non è già disponibile.Create a new Firebase project if you don't already have one.
  2. Dopo aver creato il progetto, selezionare Add Firebase to your Android app (Aggiungi Firebase all'app Android).After you create your project, select Add Firebase to your Android app. Seguire quindi le istruzioni visualizzate.Then follow the instructions that are provided. Scaricare il file google-services.json.Download google-services.json file.

    Aggiungere Firebase all'app Android

  3. Nella console di Firebase selezionare il file COG per il progetto.In the Firebase console, select the cog for your project. Selezionare quindi Project Settings (Impostazioni progetto).Then select Project Settings.

    Selezionare Project Settings (Impostazioni progetto)

  4. Selezionare la scheda General (Generale) nelle impostazioni del progetto.Select the General tab in your project settings. Scaricare quindi il file google-services.json che contiene la chiave API del server e l'ID client.Then download the google-services.json file that contains the Server API key and Client ID.
  5. Selezionare la scheda Cloud Messaging nelle impostazioni del progetto e quindi copiare il valore di Legacy server key (Chiave server legacy).Select the Cloud Messaging tab in your project settings, and then copy the value of the Legacy server key. Questo valore verrà usato per configurare i criteri di accesso all'hub di notifica.You use this value to configure the notification hub access policy.

Configurare il back-end dell'app per dispositivi mobili per inviare richieste push usando FCMConfigure the Mobile Apps back end to send push requests by using FCM

  1. Nel portale di Azure selezionare Esplora tutto > Servizi app.In the Azure portal, select Browse All > App Services. Selezionare quindi il back-end di App per dispositivi mobili.Then select your Mobile Apps back end.
  2. In Impostazioni selezionare Push.Under Settings, select Push. Selezionare quindi Configura servizi di notifica push.Then select Configure push notification services.
  3. Passare a Google (GCM).Go to Google (GCM). Immettere la chiave del server FCM legacy ottenuta dalla console Firebase e quindi selezionare Salva.Enter the FCM legacy server key that you obtained from the Firebase console, and then select Save.

Il servizio è ora configurato per l'uso di Firebase Cloud Messaging.Your service is now configured to work with Firebase Cloud Messaging.

Aggiungere notifiche push al progetto AndroidAdd push notifications to the Android project

Dopo aver configurato il back-end con FCM, è possibile aggiungere componenti e codici al client per la registrazione in FCM,With the back end configured with FCM, you can add components and codes to the client to register with FCM. iscriversi alle notifiche push con l'Hub di notifica di Azure tramite il back-end dell'app per dispositivi mobili e ricevere notifiche.You can also register for push notifications with Azure Notification Hubs through the Mobile Apps back end, and receive notifications.

  1. Nel progetto Droid fare clic con il pulsante destro del mouse su Riferimenti > Gestisci pacchetti NuGet.In the Droid project, right-click References > Manage NuGet Packages ....
  2. Nella finestra Gestione pacchetti NuGet cercare il pacchetto Xamarin.Firebase.Messaging e aggiungerlo al progetto.In the NuGet Package Manager window, search for the Xamarin.Firebase.Messaging package and add it to the project.
  3. Nelle proprietà del progetto Droid impostare la compilazione dell'app con Android 7.0 o versione successiva.In the project properies for the Droid project, set the app to compile using Android version 7.0 or higher.
  4. Aggiungere il file google-services.json, scaricato dalla console di Firebase, alla radice del progetto Droid e impostare la relativa azione di compilazione su GoogleServicesJson.Add the google-services.json file, downloaded from the Firebase console, to the root of the Droid project and set its build action to GoogleServicesJson. Per altre informazioni, vedere Add the Google Services JSON File (Aggiungere il file JSON dei servizi Google).For more information, see Add the Google Services JSON File.

Registrazione con Firebase Cloud MessagingRegistering with Firebase Cloud Messaging

  1. Aprire il file AndroidManifest.xml e inserire gli elementi <receiver> seguenti nell'elemento <application>:Open the AndroidManifest.xml file and insert the following <receiver> elements into the <application> element:

     <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
     <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
       <intent-filter>
         <action android:name="com.google.android.c2dm.intent.RECEIVE" />
         <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
         <category android:name="${applicationId}" />
       </intent-filter>
     </receiver>
    

Implementazione del servizio Instance ID di FirebaseImplementing the Firebase Instance ID Service

  1. Aggiungere una nuova classe denominata FirebaseRegistrationService al progetto Droid, quindi assicurarsi che le istruzioni using seguenti siano presenti all'inizio del file:Add a new class to the Droid project named FirebaseRegistrationService, and make sure that the following using statements are present at the top of the file:

     using System.Threading.Tasks;
     using Android.App;
     using Android.Util;
     using Firebase.Iid;
     using Microsoft.WindowsAzure.MobileServices;
    
  2. Sostituire la classe FirebaseRegistrationService vuota con il codice seguente:Replace the empty FirebaseRegistrationService class with the following code:

     [Service]
     [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
     public class FirebaseRegistrationService : FirebaseInstanceIdService
     {
         const string TAG = "FirebaseRegistrationService";
    
         public override void OnTokenRefresh()
         {
             var refreshedToken = FirebaseInstanceId.Instance.Token;
             Log.Debug(TAG, "Refreshed token: " + refreshedToken);
             SendRegistrationTokenToAzureNotificationHub(refreshedToken);
         }
    
         void SendRegistrationTokenToAzureNotificationHub(string token)
         {
             // Update notification hub registration
             Task.Run(async () =>
             {
                 await AzureNotificationHubService.RegisterAsync(TodoItemManager.DefaultManager.CurrentClient.GetPush(), token);
             });
         }
     }
    

    La classe FirebaseRegistrationService è responsabile della generazione di token di sicurezza che autorizzano l'accesso a FCM da parte dell'applicazione.The FirebaseRegistrationService class is responsible for generating security tokens that authorize the application to access FCM. Il metodo OnTokenRefresh viene richiamato quando l'applicazione riceve un token di registrazione da FCM.The OnTokenRefresh method is invoked when the application receives a registration token from FCM. Il metodo recupera il token dalla proprietà FirebaseInstanceId.Instance.Token, che viene aggiornata in modo asincrono da FCM.The method retrieves the token from the FirebaseInstanceId.Instance.Token property, which is asynchronously updated by FCM. Il metodo OnTokenRefresh viene richiamato raramente, perché il token viene aggiornato solo quando l'applicazione viene installata o disinstallata, l'utente elimina i dati dell'applicazione, l'applicazione cancella l'ID istanza o la sicurezza del token risulta compromessa.The OnTokenRefresh method is infrequently invoked, because the token is only updated when the application is installed or uninstalled, when the user deletes application data, when the application erases the Instance ID, or when the security of the token has been compromised. Inoltre, il servizio Instance ID di FCM richiederà all'applicazione l'aggiornamento periodico del token, in genere ogni 6 mesi.In addition, the FCM Instance ID service will request that the application refreshes its token periodically, typically every 6 months.

    Il metodo OnTokenRefresh richiama anche il metodo SendRegistrationTokenToAzureNotificationHub, che viene usato per associare il token di registrazione dell'utente all'Hub di notifica di Azure.The OnTokenRefresh method also invokes the SendRegistrationTokenToAzureNotificationHub method, which is used to associate the user's registration token with the Azure Notification Hub.

Registrazione con l'Hub di notifica di AzureRegistering with the Azure Notification Hub

  1. Aggiungere una nuova classe denominata AzureNotificationHubService al progetto Droid, quindi assicurarsi che le istruzioni using seguenti siano presenti all'inizio del file:Add a new class to the Droid project named AzureNotificationHubService, and make sure that the following using statements are present at the top of the file:

     using System;
     using System.Threading.Tasks;
     using Android.Util;
     using Microsoft.WindowsAzure.MobileServices;
     using Newtonsoft.Json.Linq;
    
  2. Sostituire la classe AzureNotificationHubService vuota con il codice seguente:Replace the empty AzureNotificationHubService class with the following code:

     public class AzureNotificationHubService
     {
         const string TAG = "AzureNotificationHubService";
    
         public static async Task RegisterAsync(Push push, string token)
         {
             try
             {
                 const string templateBody = "{\"data\":{\"message\":\"$(messageParam)\"}}";
                 JObject templates = new JObject();
                 templates["genericMessage"] = new JObject
                 {
                     {"body", templateBody}
                 };
    
                 await push.RegisterAsync(token, templates);
                 Log.Info("Push Installation Id: ", push.InstallationId.ToString());
             }
             catch (Exception ex)
             {
                 Log.Error(TAG, "Could not register with Notification Hub: " + ex.Message);
             }
         }
     }
    

    Il metodo RegisterAsync crea un modello di messaggio di notifica semplice come JSON ed esegue la registrazione per ricevere le notifiche modello dall'hub di notifica, usando il token di registrazione Firebase.The RegisterAsync method creates a simple notification message template as JSON, and registers to receive template notifications from the notification hub, using the Firebase registration token. In questo modo, le notifiche inviate dall'Hub di notifica di Azure saranno destinate al dispositivo rappresentato dal token di registrazione.This ensures that any notifications sent from the Azure Notification Hub will target the device represented by the registration token.

Visualizzazione del contenuto di una notifica pushDisplaying the Contents of a Push Notification

  1. Aggiungere una nuova classe denominata FirebaseNotificationService al progetto Droid, quindi assicurarsi che le istruzioni using seguenti siano presenti all'inizio del file:Add a new class to the Droid project named FirebaseNotificationService, and make sure that the following using statements are present at the top of the file:

     using Android.App;
     using Android.Content;
     using Android.Media;
     using Android.Support.V7.App;
     using Android.Util;
     using Firebase.Messaging;
    
  2. Sostituire la classe FirebaseNotificationService vuota con il codice seguente:Replace the empty FirebaseNotificationService class with the following code:

     [Service]
     [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
     public class FirebaseNotificationService : FirebaseMessagingService
     {
         const string TAG = "FirebaseNotificationService";
    
         public override void OnMessageReceived(RemoteMessage message)
         {
             Log.Debug(TAG, "From: " + message.From);
    
             // Pull message body out of the template
             var messageBody = message.Data["message"];
             if (string.IsNullOrWhiteSpace(messageBody))
                 return;
    
             Log.Debug(TAG, "Notification message body: " + messageBody);
             SendNotification(messageBody);
         }
    
         void SendNotification(string messageBody)
         {
             var intent = new Intent(this, typeof(MainActivity));
             intent.AddFlags(ActivityFlags.ClearTop);
             var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
    
             var notificationBuilder = new NotificationCompat.Builder(this)
                 .SetSmallIcon(Resource.Drawable.ic_stat_ic_notification)
                 .SetContentTitle("New Todo Item")
                 .SetContentText(messageBody)
                 .SetContentIntent(pendingIntent)
                 .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
                 .SetAutoCancel(true);
    
             var notificationManager = NotificationManager.FromContext(this);
             notificationManager.Notify(0, notificationBuilder.Build());
         }
     }
    

    Il metodo OnMessageReceived, che viene richiamato quando un'applicazione riceve una notifica da FCM, estrae il contenuto del messaggio e chiama il metodo SendNotification.The OnMessageReceived method, which is invoked when an application receives a notification from FCM, extracts the message content, and calls the SendNotification method. Questo metodo converte il contenuto del messaggio in una notifica locale, che viene avviata durante l'esecuzione dell'applicazione e visualizzata nell'area di notifica.This method converts the message content into a local notification that's launched while the application is running, with the notification appearing in the notification area.

È ora possibile testare le notifiche push nell'app in esecuzione su un dispositivo Android o nell'emulatore.Now, you are ready test push notifications in the app running on an Android device or the emulator.

Testare le notifiche push nell'app AndroidTest push notifications in your Android app

I primi due passaggi sono necessari solo per i test eseguiti in un emulatore.The first two steps are required only when you're testing on an emulator.

  1. Assicurarsi che l'operazione di distribuzione o debug venga eseguita su un dispositivo o un emulatore configurato con Google Play Services.Make sure that you are deploying to or debugging on a device or emulator that is configured with Google Play Services. Per eseguire questa verifica, controllare che le app Play siano installate nel dispositivo o emulatore.This can be verified by checking that the Play apps are installed on the device or emulator.
  2. Aggiungere un account Google al dispositivo Android facendo clic su App > Impostazioni > Aggiunti account.Add a Google account to the Android device by clicking Apps > Settings > Add account. Seguire quindi le istruzioni per aggiungere un account Google esistente al dispositivo o per crearne uno nuovo.Then follow the prompts to add an existing Google account to the device, or to create a new one.
  3. In Visual Studio o Xamarin Studio fare clic con il pulsante destro del mouse sul progetto Droid e scegliere Imposta come progetto di avvio.In Visual Studio or Xamarin Studio, right-click the Droid project and click Set as startup project.
  4. Fare clic su Esegui per creare il progetto e avviare l'app sul dispositivo Android o sull'emulatore.Click Run to build the project and start the app on your Android device or emulator.
  5. Nell'app digitare un'attività e fare clic sull'icona con il segno più (+).In the app, type a task, and then click the plus (+) icon.
  6. Assicurarsi di ricevere una notifica quando viene aggiunto un elemento.Verify that a notification is received when an item is added.

Configurare ed eseguire il progetto iOS (facoltativo)Configure and run the iOS project (optional)

Questa sezione illustra l'esecuzione del progetto Xamarin iOS per dispositivi iOS.This section is for running the Xamarin iOS project for iOS devices. Se non si usano dispositivi iOS, è possibile ignorare questa sezione.You can skip this section if you are not working with iOS devices.

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 APNSConfigure the notification hub for APNS

  1. In Mac avviare Keychain Access.On your Mac, launch Keychain Access. Aprire My Certificates (Certificati personali) in Categoria nella barra di spostamento sinistra.On the left navigation bar, under Category, open My Certificates. Trovare il certificato SSL scaricato nella sezione precedente e quindi divulgarne il contenuto.Find the SSL certificate that you downloaded in the previous section, and then disclose its contents. Selezionare solo il certificato (non la chiave privata),Select only the certificate (do not select the private key). quindi esportarlo.Then export it.
  2. Nel portale di Azure selezionare Esplora tutto > Servizi app.In the Azure portal, select Browse All > App Services. Selezionare quindi il back-end di App per dispositivi mobili.Then select your Mobile Apps back end.
  3. In Impostazioni selezionare App Service Push (Push servizio app).Under Settings, select App Service Push. Selezionare quindi il nome dell'hub di notifica.Then select your notification hub name.
  4. Andare a Apple Push Notification Services > Carica certificato.Go to Apple Push Notification Services > Upload Certificate. Caricare il file con estensione p12, selezionando la modalità corretta, a seconda che il certificato SSL client di prima sia di produzione o sandbox.Upload the .p12 file, selecting the correct Mode (depending on whether your client SSL certificate from earlier is production or sandbox). Salvare le modifiche.Save any changes.

Il servizio è ora configurato per l'uso con le notifiche push in iOS.Your service is now configured to work with push notifications on iOS.

In seguito verrà configurata l'impostazione di progetto iOS in Xamarin Studio o Visual Studio.Next, you will configure the iOS project setting in Xamarin Studio or Visual Studio.

Configurazione del progetto iOS in Xamarin StudioConfigure the iOS project in Xamarin Studio

  1. In Xamarin Studio aprire Info.plist e aggiornare il valore in Bundle Identifier (Identificatore bundle) con l'ID creata in precedenza.In Xamarin.Studio, open Info.plist, and update the Bundle Identifier with the bundle ID that you created earlier with your new app ID.

  2. Scorrere verso il basso fino a Background Modes (Modalità in background).Scroll down to Background Modes. Selezionare le caselle Enable Background Modes (Abilita modalità in background) e Remote notifications (Notifiche remote).Select the Enable Background Modes box and the Remote notifications box.

  3. Fare doppio clic sul progetto nel riquadro delle soluzioni per aprire Opzioni progetto.Double-click your project in the Solution Panel to open Project Options.
  4. Scegliere iOS Bundle Signing (Firma bundle iOS) in Genera e selezionare i valori corrispondenti per l'identità e il profilo di provisioning appena configurati per questo progetto.Under Build, choose iOS Bundle Signing, and select the corresponding identity and provisioning profile you just set up for this project.

    Per effetto di questa operazione, il progetto userà il nuovo profilo per la firma del codice.This ensures that the project uses the new profile for code signing. Per la documentazione ufficiale, vedere la pagina relativa al provisioning del dispositivo Xamarin.For the official Xamarin device provisioning documentation, see Xamarin Device Provisioning.

Configurazione del progetto iOS in Visual StudioConfigure the iOS project in Visual Studio

  1. In Visual Studio fare clic con il pulsante destro del mouse sul progetto e quindi scegliere Proprietà.In Visual Studio, right-click the project, and then click Properties.
  2. Nelle pagine delle proprietà fare clic sulla scheda iOS Application (Applicazione iOS) e aggiornare il campo Identifier (Identificatore) con l'ID creato in precedenza.In the properties pages, click the iOS Application tab, and update the Identifier with the ID that you created earlier.

  3. Nella scheda iOS Bundle Signing (Firma bundle iOS) selezionare i valori corrispondenti per identità e profilo di provisioning appena configurati per questo progetto.In the iOS Bundle Signing tab, select the corresponding identity and provisioning profile you just set up for this project.

    Per effetto di questa operazione, il progetto userà il nuovo profilo per la firma del codice.This ensures that the project uses the new profile for code signing. Per la documentazione ufficiale, vedere la pagina relativa al provisioning del dispositivo Xamarin.For the official Xamarin device provisioning documentation, see Xamarin Device Provisioning.

  4. Fare doppio clic su Info.plist per aprirlo e abilitare RemoteNotifications in Background Modes (Modalità in background).Double-click Info.plist to open it, and then enable RemoteNotifications under Background Modes.

Aggiungere notifiche push all'app iOSAdd push notifications to your iOS app

  1. Nel progetto iOS aprire il file AppDelegate.cs e aggiungere l'istruzione seguente all'inizio del file di codice.In the iOS project, open AppDelegate.cs and add the following statement to the top of the code file.

     using Newtonsoft.Json.Linq;
    
  2. Nella classe AppDelegate aggiungere un override per l'evento RegisteredForRemoteNotifications per eseguire la registrazione per le notifiche:In the AppDelegate class, add an override for the RegisteredForRemoteNotifications event to register for notifications:

     public override void RegisteredForRemoteNotifications(UIApplication application,
         NSData deviceToken)
     {
         const string templateBodyAPNS = "{\"aps\":{\"alert\":\"$(messageParam)\"}}";
    
         JObject templates = new JObject();
         templates["genericMessage"] = new JObject
             {
               {"body", templateBodyAPNS}
             };
    
         // Register for push with your mobile app
         Push push = TodoItemManager.DefaultManager.CurrentClient.GetPush();
         push.RegisterAsync(deviceToken, templates);
     }
    
  3. In AppDelegate aggiungere anche l'override seguente per il gestore eventi DidReceiveRemoteNotification:In AppDelegate, also add the following override for the DidReceiveRemoteNotification event handler:

     public override void DidReceiveRemoteNotification(UIApplication application,
         NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
     {
         NSDictionary aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary;
    
         string alert = string.Empty;
         if (aps.ContainsKey(new NSString("alert")))
             alert = (aps[new NSString("alert")] as NSString).ToString();
    
         //show alert
         if (!string.IsNullOrEmpty(alert))
         {
             UIAlertView avAlert = new UIAlertView("Notification", alert, null, "OK", null);
             avAlert.Show();
         }
     }
    

    Questo metodo gestisce le notifiche in ingresso mentre l'applicazione è in esecuzione.This method handles incoming notifications while the app is running.

  4. Nella classe AppDelegate aggiungere il codice seguente al metodo FinishedLaunching:In the AppDelegate class, add the following code to the FinishedLaunching method:

     // Register for push notifications.
     var settings = UIUserNotificationSettings.GetSettingsForTypes(
         UIUserNotificationType.Alert
         | UIUserNotificationType.Badge
         | UIUserNotificationType.Sound,
         new NSSet());
    
     UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
     UIApplication.SharedApplication.RegisterForRemoteNotifications();
    

    L'aggiunta di questo codice consente il supporto per le notifiche remote e richiede la registrazione push.This enables support for remote notifications and requests push registration.

L'app è ora aggiornata per il supporto delle notifiche push.Your app is now updated to support push notifications.

Testare le notifiche push nell'app iOSTest push notifications in your iOS app

  1. Fare clic con il pulsante destro del mouse sul progetto iOS e quindi scegliere Imposta come progetto di avvio.Right-click the iOS project, and click Set as StartUp Project.
  2. Scegliere Esegui o premere F5 per compilare il progetto e avviare l'app in un dispositivo iOSPress the Run button or F5 in Visual Studio to build the project and start the app in an iOS device. e quindi fare clic su OK per accettare le notifiche push.Then click OK to accept push notifications.

    Nota

    È necessario accettare le notifiche push in modo esplicito dall'app.You must explicitly accept push notifications from your app. Questa richiesta viene visualizzata solo la prima volta che si esegue l'app.This request only occurs the first time that the app runs.

  3. Nell'app digitare un'attività e fare clic sull'icona con il segno più (+).In the app, type a task, and then click the plus (+) icon.
  4. Verificare che venga ricevuta una notifica e quindi fare clic su OK per ignorarla.Verify that a notification is received, and then click OK to dismiss the notification.

Configurare ed eseguire progetti Windows (facoltativo)Configure and run Windows projects (optional)

Questa sezione illustra l'esecuzione dei progetti Xamarin.Forms WinApp e WinPhone81 per dispositivi Windows.This section is for running the Xamarin.Forms WinApp and WinPhone81 projects for Windows devices. Questa procedura supporta anche progetti per la piattaforma UWP (Universal Windows Platform).These steps also support Universal Windows Platform (UWP) projects. Se non si usano dispositivi Windows, è possibile ignorare questa sezione.You can skip this section if you are not working with Windows devices.

Registrare l'app Windows per le notifiche push con il servizio di notifica Windows (WNS)Register your Windows app for push notifications with Windows Notification Service (WNS)

  1. In Esplora soluzioni di Visual Studio, fare clic con il pulsante destro del mouse sul progetto di app di Windows StoreIn Visual Studio Solution Explorer, right-click the Windows Store app project. e quindi scegliere Store > Associa applicazione a Store.Then select Store > Associate App with the Store.

    Associa l’app con Windows Store

  2. Nella procedura guidata selezionare Avanti.In the wizard, select Next. Accedere quindi con il proprio account Microsoft.Then sign in with your Microsoft account. In Riserva un nuovo nome dell'app digitare un nome per l'app e quindi selezionare Riserva.In Reserve a new app name, type a name for your app, and then select Reserve.
  3. Al termine della creazione della registrazione dell'app, selezionare il nuovo nome dell'app.After the app registration is successfully created, select the new app name. Selezionare Avanti e quindi Associa.Select Next, and then select Associate. Questo processo aggiunge le informazioni di registrazione a Windows Store necessarie al manifesto dell'applicazione.This process adds the required Windows Store registration information to the application manifest.
  4. Ripetere i passaggi 1 e 3 per il progetto app di Windows Phone Store usando la stessa registrazione creata in precedenza per l'app di Windows Store.Repeat steps 1 and 3 for the Windows Phone Store app project by using the same registration you previously created for the Windows Store app.
  5. Passare a Windows Dev Center e quindi accedere con il proprio account Microsoft.Go to the Windows Dev Center, and then sign in with your Microsoft account. In Le mie app selezionare la nuova registrazione di app.In My apps, select the new app registration. Espandere quindi Servizi > Notifiche push.Then expand Services > Push notifications.
  6. Nella pagina Notifiche push selezionare il sito dei servizi Live in Windows Push Notification Services (WNS) and Microsoft Azure Mobile Apps (Servizi notifica Push Windows (WNS) e app per dispositivi mobili di Microsoft Azure).On the Push notifications page, under Windows Push Notification Services (WNS) and Microsoft Azure Mobile Apps, select Live Services site. Prendere nota dei valori del SID pacchetto e del valore attuale in Segreto dell'applicazione.Make a note of the values of the Package SID and the current value in Application Secret.

    Impostazione dell’app nel centro per sviluppatori

    Importante

    Il segreto applicazione e il SID di pacchetto sono importanti credenziali di sicurezza.The application secret and package SID are important security credentials. Non condividere questi valori con altri utenti né distribuirli con l'app.Don't share these values with anyone or distribute them with your app.

Configurare l'hub di notifica per WNSConfigure the notification hub for WNS

  1. Nel portale di Azure selezionare Esplora tutto > Servizi app.In the Azure portal, select Browse All > App Services. Selezionare quindi il back-end di App per dispositivi mobili.Then select your Mobile Apps back end. In Impostazioni selezionare App Service Push (Push servizio app).Under Settings, select App Service Push. Selezionare quindi il nome dell'hub di notifica.Then select your notification hub name.
  2. Passare a Windows (WNS).Go to Windows (WNS). Immettere quindi la chiave di sicurezza (segreto client) e il SID pacchetto ottenuti dal sito dei servizi Live.Then enter the Security key (client secret) and Package SID that you obtained from the Live Services site. Selezionare quindi Salva.Next, select Save.

    Impostare la chiave WNS nel portale

Il back-end ora è configurato per poter inviare le notifiche push tramite WSN.Your back end is now configured to use WNS to send push notifications.

Aggiungere notifiche push all'app di WindowsAdd push notifications to your Windows app

  1. In Visual Studio aprire il file App.xaml.cs in un progetto Windows e aggiungere le istruzioni seguenti.In Visual Studio, open App.xaml.cs in a Windows project, and add the following statements.

     using Newtonsoft.Json.Linq;
     using Microsoft.WindowsAzure.MobileServices;
     using System.Threading.Tasks;
     using Windows.Networking.PushNotifications;
     using <your_TodoItemManager_portable_class_namespace>;
    

    Sostituire <your_TodoItemManager_portable_class_namespace> con lo spazio dei nomi del progetto portabile che contiene la classe TodoItemManager.Replace <your_TodoItemManager_portable_class_namespace> with the namespace of your portable project that contains the TodoItemManager class.

  2. Nel file App.xaml.cs aggiungere il metodo InitNotificationsAsync seguente:In App.xaml.cs, add the following InitNotificationsAsync method:

     private async Task InitNotificationsAsync()
     {
         var channel = await PushNotificationChannelManager
             .CreatePushNotificationChannelForApplicationAsync();
    
         const string templateBodyWNS =
             "<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(messageParam)</text></binding></visual></toast>";
    
         JObject headers = new JObject();
         headers["X-WNS-Type"] = "wns/toast";
    
         JObject templates = new JObject();
         templates["genericMessage"] = new JObject
         {
             {"body", templateBodyWNS},
             {"headers", headers} // Needed for WNS.
         };
    
         await TodoItemManager.DefaultManager.CurrentClient.GetPush()
             .RegisterAsync(channel.Uri, templates);
     }
    

    Questo metodo ottiene il canale per la notifica push e registra un modello per la ricezione di notifiche di modello dall'hub di notifica.This method gets the push notification channel, and registers a template to receive template notifications from your notification hub. A questo client verrà recapitata una notifica di modello che supporta messageParam .A template notification that supports messageParam will be delivered to this client.

  3. Nel file App.xaml.cs aggiornare la definizione del metodo OnLaunched del gestore eventi aggiungendo il modificatore asyncIn App.xaml.cs, update the OnLaunched event handler method definition by adding the async modifier. e quindi aggiungere la riga di codice seguente alla fine del metodo:Then add the following line of code at the end of the method:

     await InitNotificationsAsync();
    

    In questo modo è possibile garantire che la registrazione della notifica push venga creata o aggiornata a ogni avvio dell'app.This ensures that the push notification registration is created or refreshed every time the app is launched. È importante eseguire questa operazione per assicurare che il canale di notifica push WNS sia sempre attivo.It's important to do this to guarantee that the WNS push channel is always active.

  4. In Esplora soluzioni di Visual Studio aprire il file Package.appxmanifest e in Notifiche impostare Avvisi popup supportati su .In Solution Explorer for Visual Studio, open the Package.appxmanifest file, and set Toast Capable to Yes under Notifications.
  5. Compilare l'app e verificare che non siano presenti errori.Build the app and verify you have no errors. A questo punto l'app client dovrebbe eseguire la registrazione per le notifiche di modello dal back-end dell'app per dispositivi mobili.Your client app should now register for the template notifications from the Mobile Apps back end. Ripetere questa sezione per ogni progetto Windows nella soluzione.Repeat this section for every Windows project in your solution.

Testare le notifiche push nell'app di WindowsTest push notifications in your Windows app

  1. In Visual Studio fare clic con il pulsante destro del mouse su un progetto Windows e quindi scegliere Imposta come progetto di avvio.In Visual Studio, right-click a Windows project, and click Set as startup project.
  2. Premere il pulsante Esegui per compilare il progetto e avviare l'app.Press the Run button to build the project and start the app.
  3. Nell'app digitare un nome per un nuovo elemento todoitem, quindi fare clic sull'icona del segno più (+) per aggiungerlo.In the app, type a name for a new todoitem, and then click the plus (+) icon to add it.
  4. Assicurarsi di ricevere una notifica quando viene aggiunto l'elemento.Verify that a notification is received when the item is added.

Passaggi successiviNext steps

Altre informazioni sulle notifiche push:You can learn more about push notifications:

È possibile anche proseguire con una delle esercitazioni seguenti:You can also continue on to one of the following tutorials:

  • Add authentication to your app Add authentication to your app
    (Aggiungere l'autenticazione all'app) Informazioni sull'autenticazione degli utenti dell'app con un provider di identità.Learn how to authenticate users of your app with an identity provider.
  • Abilitare la sincronizzazione offline per l'app per dispositivi mobili Xamarin.FormsEnable offline sync for your app
    Informazioni su come aggiungere il supporto offline all'app usando il back-end di un'app per dispositivi mobili.Learn how to add offline support for your app by using a Mobile Apps back end. Con la sincronizzazione offline è possibile interagire con un'app per dispositivi mobili —visualizzando, aggiungendo e modificando i dati— anche se non è disponibile una connessione di rete.With offline sync, users can interact with a mobile app—viewing, adding, or modifying data—even when there is no network connection.