Aggiungere notifiche push all'app iOSAdd Push Notifications to your iOS App

PanoramicaOverview

In questa esercitazione vengono aggiunte notifiche push al progetto avvio rapido di 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 [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.

Il simulatore iOS non supporta le notifiche push.The iOS simulator does not support push notifications. È necessario un dispositivo iOS fisico e un'appartenenza all'Apple Developer Program.You need a physical iOS device and an Apple Developer Program membership.

Configurare un hub di notificaConfigure 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 andare in Servizi app, quindi fare clic sul back-end dell'app.In the [Azure portal], go to App Services, and then click your app back end. In Impostazioni fare clic su Push.Under Settings, click Push.
  2. Fare clic su Connetti per aggiungere una risorsa dell'hub di notifica all'app.Click Connect to add a notification hub resource to the app. È possibile creare un hub o connettersi a uno esistente.You can either create a hub or connect to an existing one.

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à l'hub di notifica per la connessione a un Platform Notification System (PNS) per effettuare il push ai dispositivi.Later you will configure this notification hub to connect to a platform notification system (PNS) to push to devices.

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

Configurare Azure per l'invio di notifiche pushConfigure Azure 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 codice back-end per l'invio di notifiche pushUpdate backend to send push notifications

  • Back-end .NET (C#):.NET backend (C#):

    1. In Visual Studio fare clic con il pulsante destro del mouse sul progetto server, quindi scegliere Gestisci pacchetti NuGet, cercare Microsoft.Azure.NotificationHubs e infine fare clic su Installa.In Visual Studio, right-click the server project and click Manage NuGet Packages, search for Microsoft.Azure.NotificationHubs, 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 backend.
    2. Nel progetto Visual Studio del back-end aprire Controller > TodoItemController.cs.In the backend's Visual Studio project, open Controllers > TodoItemController.cs. Aggiungere le istruzioni using seguenti all'inizio del file:At the top of the file, add the following using statement:

       using Microsoft.Azure.Mobile.Server.Config;
       using Microsoft.Azure.NotificationHubs;
      
      1. Sostituire il metodo PostTodoItem con il codice seguente:Replace the PostTodoItem method with the following code:

        public async Task<IHttpActionResult> PostTodoItem(TodoItem item)
        {
            TodoItem current = await InsertAsync(item);
            // 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);
        
            // iOS payload
            var appleNotificationPayload = "{\"aps\":{\"alert\":\"" + item.Text + "\"}}";
        
            try
            {
                // Send the push notification and log the results.
                var result = await hub.SendAppleNativeNotificationAsync(appleNotificationPayload);
        
                // 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");
            }
            return CreatedAtRoute("Tables", new { id = current.Id }, current);
        }
        
      2. Pubblicare di nuovo il progetto server.Republish the server project.

  • Back-end Node.js :Node.js backend :

    1. Scaricare il progetto di avvio rapido (se non è ancora stato scaricato) oppure usare l'editor online del portale di Azure.If you haven't already done so, download the quickstart project or else use the online editor in the Azure portal.
    2. Sostituire lo script di tabella todoitem.js con il codice seguente:Replace the todoitem.js table script 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();
      
         // When adding record, send a push notification via APNS
         table.insert(function (context) {
             // For details of the Notification Hubs JavaScript SDK, 
             // see http://aka.ms/nodejshubs
             logger.info('Running TodoItem.insert');
      
             // Create a payload that contains the new item Text.
             var payload = "{\"aps\":{\"alert\":\"" + context.item.text + "\"}}";
      
             // Execute the insert; Push as a post-execute action when results are returned as a Promise.
             return context.execute()
                 .then(function (results) {
                     // Only do the push if configured
                     if (context.push) {
                         context.push.apns.send(null, payload, function (error) {
                             if (error) {
                                 logger.error('Error while sending push notification: ', error);
                             } else {
                                 logger.info('Push notification sent successfully!');
                             }
                         });
                     }
                     return results;
                 })
                 .catch(function (error) {
                     logger.error('Error while running context.execute: ', error);
                 });
         });
      
         module.exports = table;
      
      1. Quando si modifica il file nel computer locale, ripubblicare il progetto server.When editing the file on your local computer, republish the server project.

Aggiungere notifiche push all'appAdd push notifications to app

Objective-C:Objective-C:

  1. In QSAppDelegate.m importare iOS SDK e QSTodoService.h:In QSAppDelegate.m, import the iOS SDK and QSTodoService.h:

     #import <MicrosoftAzureMobile/MicrosoftAzureMobile.h>
     #import "QSTodoService.h"
    
  2. In didFinishLaunchingWithOptions in QSAppDelegate.m inserire le righe seguenti prima di return YES;:In didFinishLaunchingWithOptions in QSAppDelegate.m, insert the following lines right before return YES;:

     UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
     [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
     [[UIApplication sharedApplication] registerForRemoteNotifications];
    
  3. In QSAppDelegate.maggiungere i metodi del gestore seguenti.In QSAppDelegate.m, add the following handler methods. L'app è ora aggiornata per il supporto delle notifiche push.Your app is now updated to support push notifications.

     // Registration with APNs is successful
     - (void)application:(UIApplication *)application
     didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    
         QSTodoService *todoService = [QSTodoService defaultService];
         MSClient *client = todoService.client;
    
         [client.push registerDeviceToken:deviceToken completion:^(NSError *error) {
             if (error != nil) {
                 NSLog(@"Error registering for notifications: %@", error);
             }
         }];
     }
    
     // Handle any failure to register
     - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:
     (NSError *)error {
         NSLog(@"Failed to register for remote notifications: %@", error);
     }
    
     // Use userInfo in the payload to display an alert.
     - (void)application:(UIApplication *)application
           didReceiveRemoteNotification:(NSDictionary *)userInfo {
         NSLog(@"%@", userInfo);
    
         NSDictionary *apsPayload = userInfo[@"aps"];
         NSString *alertString = apsPayload[@"alert"];
    
         // Create alert with notification content.
         UIAlertController *alertController = [UIAlertController
                                       alertControllerWithTitle:@"Notification"
                                       message:alertString
                                       preferredStyle:UIAlertControllerStyleAlert];
    
         UIAlertAction *cancelAction = [UIAlertAction
                                        actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel")
                                        style:UIAlertActionStyleCancel
                                        handler:^(UIAlertAction *action)
                                        {
                                            NSLog(@"Cancel");
                                        }];
    
         UIAlertAction *okAction = [UIAlertAction
                                    actionWithTitle:NSLocalizedString(@"OK", @"OK")
                                    style:UIAlertActionStyleDefault
                                    handler:^(UIAlertAction *action)
                                    {
                                        NSLog(@"OK");
                                    }];
    
         [alertController addAction:cancelAction];
         [alertController addAction:okAction];
    
         // Get current view controller.
         UIViewController *currentViewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
         while (currentViewController.presentedViewController)
         {
             currentViewController = currentViewController.presentedViewController;
         }
    
         // Display alert.
         [currentViewController presentViewController:alertController animated:YES completion:nil];
    
     }
    

Swift:Swift:

  1. Aggiungere il file ClientManager.swift con i seguenti contenuti.Add file ClientManager.swift with the following contents. Sostituire %AppUrl% con l'URL del back-end di app per dispositivi mobili di Azure.Replace %AppUrl% with the URL of the Azure Mobile App backend.

     class ClientManager {
         static let sharedClient = MSClient(applicationURLString: "%AppUrl%")
     }
    
  2. In ToDoTableViewController.swift sostituire la riga let client che inizializza un MSClient con la riga seguente:In ToDoTableViewController.swift, replace the let client line that initializes an MSClient with this line:

     let client = ClientManager.sharedClient
    
  3. In AppDelegate.swift sostituire il corpo di func application come indicato di seguito:In AppDelegate.swift, replace the body of func application as follows:

     func application(application: UIApplication,
       didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        application.registerUserNotificationSettings(
            UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound],
                categories: nil))
        application.registerForRemoteNotifications()
        return true
     }
    
  4. In AppDelegate.swift, aggiungere i metodi del gestore seguenti.In AppDelegate.swift, add the following handler methods. L'app è ora aggiornata per il supporto delle notifiche push.Your app is now updated to support push notifications.

     func application(application: UIApplication,
        didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
         ClientManager.sharedClient.push?.registerDeviceToken(deviceToken) { error in
             print("Error registering for notifications: ", error?.description)
         }
     }
    
     func application(application: UIApplication,
        didFailToRegisterForRemoteNotificationsWithError error: NSError) {
         print("Failed to register for remote notifications: ", error.description)
     }
    
     func application(application: UIApplication,
        didReceiveRemoteNotification userInfo: [NSObject: AnyObject]) {
    
         print(userInfo)
    
         let apsNotification = userInfo["aps"] as? NSDictionary
         let apsString       = apsNotification?["alert"] as? String
    
         let alert = UIAlertController(title: "Alert", message: apsString, preferredStyle: .Alert)
         let okAction = UIAlertAction(title: "OK", style: .Default) { _ in
             print("OK")
         }
         let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { _ in
             print("Cancel")
         }
    
         alert.addAction(okAction)
         alert.addAction(cancelAction)
    
         var currentViewController = self.window?.rootViewController
         while currentViewController?.presentedViewController != nil {
             currentViewController = currentViewController?.presentedViewController
         }
    
         currentViewController?.presentViewController(alert, animated: true) {}
    
     }
    

Notifiche push di provaTest push notifications

  • In Xcode premere Esegui e avviare l'app in un dispositivo iOS. Si noti che il push non funzionerà nei simulatori.In Xcode, press Run and start the app on an iOS device (note that push will not work on simulators). Fare clic su OK per accettare le notifiche push. Questa richiesta si verifica alla prima esecuzione dell'app.Click OK to accept push notifications; this request occurs the first time the app runs.
  • Nell'app aggiungere un nuovo elemento e fare clic su +.In the app, add a new item and click +.
  • 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. L'esercitazione è stata completata.You have now successfully completed this tutorial.

AltroMore