Ajouter des notifications Push à votre application Xamarin.iOS

Vue d’ensemble

Dans ce didacticiel, vous ajoutez des notifications Push au projet Démarrage rapide Xamarin.iOS afin qu'une notification Push soit envoyée chaque fois qu'un enregistrement est inséré.

Si vous n’utilisez pas le projet de serveur du démarrage rapide téléchargé, vous devrez ajouter le package d’extension de notification Push. Consultez Fonctionnement avec le Kit de développement logiciel (SDK) du serveur principal .NET pour Azure Mobile Apps pour plus d’informations.

Prérequis

Inscrire l'application pour les notifications push dans le portail de développeurs d'Apple

Configuration de votre application mobile pour l'envoi de notifications push

  1. Sur votre Mac, démarrez Trousseau d’accès. Dans la barre de navigation gauche, sous Catégorie, ouvrez Mes certificats. Recherchez le certificat SSL que vous avez téléchargé à la section précédente, puis affichez son contenu. Sélectionnez uniquement le certificat (sans la clé privée). Puis exportez-le.
  2. Dans le portail Azure, sélectionnez Parcourir tout>App Services. Puis sélectionnez votre serveur principal Mobile Apps.
  3. Sous Paramètres, sélectionnez App Service Push (Notification Push App Service). Ensuite, sélectionnez le nom de votre Hub de notification.
  4. accédez à Apple Push Notification Services>certificat Télécharger. Chargez le fichier .p12 en sélectionnant le mode approprié (en fonction du type de votre certificat SSL client précédemment utilisé : Production ou Sandbox). Enregistrez les modifications.

Votre service est désormais configuré et prêt à fonctionner avec les notifications Push sur iOS.

Mettre à jour le projet de serveur pour l'envoi de notifications Push

Dans cette section, vous mettez à jour le code dans votre projet de serveur principal Mobile Apps existant pour envoyer une notification Push chaque fois qu’un nouvel élément est ajouté. Ce processus est rendu possible par la fonctionnalité modèle d’Azure Notification Hubs, qui autorise l’envoi de notifications Push multiplateforme. Les différents clients sont inscrits pour les notifications Push à l’aide de modèles, et une notification Push universelle unique peut accéder à toutes les plates-formes clientes.

Choisissez l’une des procédures suivantes qui correspond à votre type de projet principal : .net back end ou Node.js back end.

Projet de serveur principal .NET

  1. Dans Visual Studio, cliquez avec le bouton droit sur le projet de serveur. Ensuite, sélectionnez Gérer les packages NuGet. Recherchez Microsoft.Azure.NotificationHubs, puis sélectionnez Installer. Ce processus installe la bibliothèque Notification Hubs pour l’envoi de notifications à partir du serveur principal.

  2. Dans le projet serveur, ouvrez contrôleurs>TodoItemController. cs. Puis ajoutez les instructions using suivantes :

    using System.Collections.Generic;
    using Microsoft.Azure.NotificationHubs;
    using Microsoft.Azure.Mobile.Server.Config;
    
  3. Dans la méthode PostTodoItem, ajoutez le code suivant après l’appel à 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");
    }
    

    Ce processus envoie une notification de modèle contenant item.Text lorsqu’un nouvel élément est inséré.

  4. Publier à nouveau le projet de serveur

Projet de serveur principal Node.js

  1. Configurez votre projet back-end.

  2. Remplacez le code existant dans todoitem.js par le code suivant :

    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 https://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;  
    

    Ce processus envoie une notification de modèle contenant item.text lorsqu’un nouvel élément est inséré.

  3. Quand vous modifiez le fichier sur votre ordinateur local, republiez le projet de serveur.

Configurer votre projet Xamarin.iOS

Configurer le projet iOS dans Xamarin Studio

  1. Dans Xamarin. Studio, ouvrez info. plistet mettez à jour l' identificateur de Bundle avec l’ID d’offre groupée que vous avez créé précédemment avec votre nouvel ID d’application.

  2. Faites défiler l’écran jusqu’à Background Modes (Modes d’arrière-plan). Cochez les cases Enable Background Modes (Activer les modes d’arrière-plan) et Remote notifications (Notifications distantes).

  3. Double-cliquez sur votre projet dans Solution Panel (Panneau de solutions) pour ouvrir Project Options (Options de projet).

  4. Sous Build (Build), choisissez iOS Bundle Signing (Signature d’offre groupée iOS), puis sélectionnez le profil d’identité et d’approvisionnement correspondant que vous venez de configurer pour ce projet.

    Cela permet de vérifier que le projet utilise le nouveau profil pour la signature du code. Pour obtenir la documentation officielle de l’approvisionnement des appareils Xamarin, consultez la page Approvisionnement des appareils Xamarin.

Configurer le projet iOS dans Visual Studio

  1. Dans Visual Studio, cliquez avec le bouton droit sur le projet, puis cliquez sur Propriétés.

  2. Dans les pages de propriétés, cliquez sur l’onglet iOS Application, puis mettez à jour la valeur de la zone Identifier avec l’ID que vous avez créé précédemment.

  3. Dans l’onglet iOS Bundle Signing (Signature d’offre groupée iOS), sélectionnez le profil d’identité et d’approvisionnement correspondant que vous venez de configurer pour ce projet.

    Cela permet de vérifier que le projet utilise le nouveau profil pour la signature du code. Pour obtenir la documentation officielle de l’approvisionnement des appareils Xamarin, consultez la page Approvisionnement des appareils Xamarin.

  4. Double-cliquez sur Info.plist pour l’ouvrir, puis activez RemoteNotifications (Notifications distantes) sous Modes d’arrière-plan.

Ajout de notifications Push à votre application

  1. Dans QSTodoService, ajoutez la propriété suivante pour qu’AppDelegate puisse acquérir le client mobile :

    public MobileServiceClient GetClient {
        get
        {
            return client;
        }
        private set
        {
            client = value;
        }
    }
    
  2. Ajoutez l’instruction using suivante au début du fichier AppDelegate.cs .

    using Microsoft.WindowsAzure.MobileServices;
    using Newtonsoft.Json.Linq;
    
  3. Dans AppDelegate, remplacez l'événement FinishedLaunching :

     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. Dans le même fichier, remplacez l’événement RegisteredForRemoteNotifications. Dans ce code, vous inscrivez une notification de modèle simple qui sera envoyée sur toutes les plateformes prises en charge par le serveur.

    Pour plus d’informations sur les modèles avec Notification Hubs, consultez Modèles.

    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. Ensuite, remplacez l’événement DidReceivedRemoteNotification :

     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'application est mise à jour et prend en charge les notifications Push.

Test des notifications Push dans votre application

  1. Appuyez sur le bouton Démarrer pour générer le projet, puis démarrez l’application sur un appareil compatible iOS, et enfin cliquez sur OK pour accepter les notifications Push.

    Notes

    Vous devez accepter explicitement les notifications Push de votre application. Cette demande s’effectue uniquement lors du premier démarrage de l’application.

  2. Dans l’application, tapez une tâche, puis cliquez sur l’icône plus ( + ).

  3. Vérifiez qu’une notification est reçue, puis cliquez sur OK pour fermer la notification.

  4. Répétez l’étape 2 et fermez immédiatement l’application, puis vérifiez qu’une notification est affichée.

Vous avez terminé ce didacticiel.