Aggiungere notifiche push all'app Xamarin.iOSAdd push notifications to your Xamarin.iOS App

PanoramicaOverview

In questa esercitazione vengono aggiunte notifiche push al progetto avvio rapido di Xamarin.iOS, in modo che una notifica push venga inviata al dispositivo a ogni inserimento di record.In this tutorial, you add push notifications to the Xamarin.iOS quick start project so that a push notification is sent to the device 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.See Work with the .NET backend server SDK for Azure Mobile Apps for more information.

PrerequisitiPrerequisites

  • Completare l'esercitazione della guida introduttiva di Xamarin.iOS .Complete the Xamarin.iOS quickstart tutorial.
  • Un dispositivo iOS fisico.A physical iOS device. Le notifiche push non sono supportate dal simulatore iOS.Push notifications are not supported by the iOS simulator.

Registrare l'app per le notifiche push nel portale per sviluppatori AppleRegister the app for push notifications on Apple's developer portal

Configurare l'app per dispositivi mobili per l'invio di notifiche pushConfigure your Mobile App to send push notifications

  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 divulgare il contenuto.Find the SSL certificate you downloaded in the previous section, and disclose its contents. Selezionare solo il certificato (non selezionare la chiave privata) ed esportarlo.Select only the certificate (do not select the private key), and export it.
  2. Nel Portale di Azure fare clic su Browse All (Esplora tutto) > Servizi app e quindi scegliere il back-end dell'app per dispositivi mobili.In the Azure portal, click Browse All > App Services, and click your Mobile Apps back end. In Impostazioni fare clic su App Service Push (Push servizio app), quindi fare clic sul nome dell'hub di notifica.Under Settings, click App Service Push, and then click your notification hub name. 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.

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. Questa operazione si basa sulla funzionalità dei modelli di Hub di notifica di Azure, che abilita i push multipiattaforma.This is powered by the template feature of Azure Notification Hubs, enabling 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, quindi scegliere Gestisci pacchetti NuGet.In Visual Studio, right-click the server project and click Manage NuGet Packages. Cercare Microsoft.Azure.NotificationHubs, quindi fare clic su Installa.Search for Microsoft.Azure.NotificationHubs, and then click Install. Consente di installare la libreria di Hub di notifica per l'invio di notifiche dal back-end.This installs the Notification Hubs library for sending notifications from your back end.
  2. Nel progetto server aprire Controller > TodoItemController.cs e quindi aggiungere le istruzioni using seguenti:In the server project, open Controllers > TodoItemController.cs, and 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);
    
     // Sending the message so that all template registrations that contain "messageParam"
     // will 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");
     }
    

    Ogni volta che viene inserito un nuovo elemento, viene inviata una notifica modello contenente l'elemento item.text.This 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 nel file todoitem.js con il codice seguente:Replace the existing code in todoitem.js with the following:

     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;  
    

    Ogni volta che viene inserito un nuovo elemento, viene inviata una notifica modello contenente l'elemento item.text.This sends a template notification that contains the item.text when a new item is inserted.

  3. Quando si modifica il file nel computer locale, ripubblicare il progetto server.When editing the file on your local computer, republish the server project.

Configurare il progetto Xamarin.iOSConfigure your Xamarin.iOS project

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'appAdd push notifications to your app

  1. In QSTodoService aggiungere la proprietà seguente in modo che l'oggetto AppDelegate possa acquisire il client per dispositivi mobili:In QSTodoService, add the following property so that AppDelegate can acquire the mobile client:

         public MobileServiceClient GetClient {
         get
         {
             return client;
         }
         private set
         {
             client = value;
         }
     }
    
  2. Aggiungere l'istruzione using seguente all'inizio del file AppDelegate.cs .Add the following using statement to the top of the AppDelegate.cs file.

     using Microsoft.WindowsAzure.MobileServices;
     using Newtonsoft.Json.Linq;
    
  3. In AppDelegate eseguire l'override dell'evento FinishedLaunching:In AppDelegate, override the FinishedLaunching event:

     public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
     {
         // registers for push for iOS8
         var settings = UIUserNotificationSettings.GetSettingsForTypes(
             UIUserNotificationType.Alert
             | UIUserNotificationType.Badge
             | UIUserNotificationType.Sound,
             new NSSet());
    
         UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
         UIApplication.SharedApplication.RegisterForRemoteNotifications();
    
         return true;
     }
    
  4. Nello stesso file, eseguire l'override dell'evento RegisteredForRemoteNotifications .In the same file, override the RegisteredForRemoteNotifications event. In questo codice ci si sta registrando per una semplice notifica del modello che verrà inviata a tutte le piattaforme supportate dal server.In this code you are registering for a simple template notification that will be sent across all supported platforms by the server.

    Per ulteriori informazioni sui modelli con Hub di notifica, vedere Modelli.For more information on templates with Notification Hubs, see Templates.

     public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
     {
         MobileServiceClient client = QSTodoService.DefaultService.GetClient;
    
         const string templateBodyAPNS = "{\"aps\":{\"alert\":\"$(messageParam)\"}}";
    
         JObject templates = new JObject();
         templates["genericMessage"] = new JObject
         {
             {"body", templateBodyAPNS}
         };
    
         // Register for push with your mobile app
         var push = client.GetPush();
         push.RegisterAsync(deviceToken, templates);
     }
    
  5. Sovrascrivere quindi l'evento DidReceivedRemoteNotification :Then, override the DidReceivedRemoteNotification event:

     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();
         }
     }
    

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

Testare le notifiche push nell'appTest push notifications in your app

  1. Scegliere Run (Esegui) per generare il progetto e avviare l'app in un dispositivo con iOS, quindi fare clic su OK per accettare le notifiche push.Press the Run button to build the project and start the app in an iOS capable device, 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.

  2. 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.
  3. Verificare che venga ricevuta una notifica, quindi fare clic su OK per eliminarla.Verify that a notification is received, then click OK to dismiss the notification.
  4. Ripetere il passaggio 2 e chiudere immediatamente l'app, quindi verificare che venga visualizzata una notifica push.Repeat step 2 and immediately close the app, then verify that a notification is shown.

L'esercitazione è stata completata.You have successfully completed this tutorial.