Partager via


Notifications Push dans iOS

Important

Les informations contenues dans cette section se rapportent à iOS 9 et antérieures, il a été laissé ici pour prendre en charge les versions antérieures d’iOS. Pour iOS 10 et versions ultérieures, consultez le guide de l’infrastructure de notification utilisateur pour prendre en charge les notifications locales et distantes sur un appareil iOS.

Les notifications Push doivent être conservées brièvement et contiennent uniquement suffisamment de données pour informer l’application mobile qu’elle doit contacter l’application serveur pour une mise à jour. Par exemple, lorsque de nouveaux e-mails arrivent, l’application serveur informe uniquement l’application mobile que le nouvel e-mail est arrivé. La notification ne contient pas le nouvel e-mail lui-même. L’application mobile récupérerait ensuite les nouveaux e-mails du serveur quand il était approprié

Au centre des notifications Push dans iOS est le service APNS (Apple Push Notification Gateway Service). Il s’agit d’un service fourni par Apple qui est responsable du routage des notifications d’un serveur d’applications vers des appareils iOS. L’image suivante illustre la topologie de notification Push pour iOS : Cette image illustre la topologie de notification Push pour iOS

Les notifications à distance elles-mêmes sont des chaînes au format JSON qui respectent le format et les protocoles spécifiés dans la section Charge utile de notification du Guide de programmation de notification locale et push dans la documentation du développeur iOS.

Apple gère deux environnements d’APNS : un bac à sable et un environnement de production . L’environnement sandbox est destiné aux tests pendant la phase de développement et se trouve sur gateway.sandbox.push.apple.com le port TCP 2195. L’environnement de production est destiné à être utilisé dans les applications qui ont été déployées et qui se trouvent sur gateway.push.apple.com le port TCP 2195.

Spécifications

La notification Push doit observer les règles suivantes qui sont dictées par l’architecture d’APNS :

  • Limite de messages de 256 octets : la taille entière du message de la notification ne doit pas dépasser 256 octets.
  • Aucune confirmation de réception : APNS ne fournit pas à l’expéditeur une notification indiquant qu’un message l’a envoyé au destinataire prévu. Si l’appareil est inaccessible et que plusieurs notifications séquentielles sont envoyées, toutes les notifications sauf la plus récente sont perdues. Seule la notification la plus récente sera remise à l’appareil.
  • Chaque application nécessite un certificat sécurisé : la communication avec APNS doit être effectuée via SSL.

Création et utilisation de certificats

Chacun des environnements mentionnés dans la section précédente nécessite son propre certificat. Cette section explique comment créer un certificat, l’associer à un profil d’approvisionnement, puis obtenir un certificat d’échange d’informations personnelles à utiliser avec PushSharp.

  1. Pour créer des certificats, accédez au portail d’approvisionnement iOS sur le site web d’Apple, comme illustré dans la capture d’écran suivante (notez l’élément de menu Id d’application à gauche) :

    Portail d’approvisionnement iOS sur le site web Apples

  2. Ensuite, accédez à la section de l’ID d’application et créez un ID d’application, comme illustré dans la capture d’écran suivante :

    Accédez à la section ID d’application et créez un ID d’application

  3. Lorsque vous cliquez sur le + bouton, vous pourrez entrer la description et un identificateur de bundle pour l’ID d’application, comme illustré dans la capture d’écran suivante :

    Entrez la description et un identificateur de bundle pour l’ID d’application

  4. Veillez à sélectionner l’ID d’application explicite et que l’identificateur de bundle ne se termine pas par un * . Cela crée un identificateur adapté à plusieurs applications, et les certificats de notification Push doivent être destinés à une seule application.

  5. Sous App Services, sélectionnez Notifications Push :

    Sélectionner des notifications Push

  6. Appuyez sur Submit pour confirmer l’inscription du nouvel ID d’application :

    Confirmer l’inscription du nouvel ID d’application

  7. Ensuite, vous devez créer le certificat pour l’ID d’application. Dans le volet de navigation de gauche, accédez à Certificats > tout et sélectionnez le + bouton, comme illustré dans la capture d’écran suivante :

    Créer le certificat pour l’ID d’application

  8. Indiquez si vous souhaitez utiliser un certificat de développement ou de production :

    Sélectionner un certificat de développement ou de production

  9. Sélectionnez ensuite le nouvel ID d’application que nous venons de créer :

    Sélectionnez le nouvel ID d’application que vous venez de créer

  10. Cela affiche des instructions qui vous guideront tout au long du processus de création d’une demande de signature de certificat à l’aide de l’application Keychain Access sur votre Mac.

  11. Maintenant que le certificat a été créé, il doit être utilisé dans le cadre du processus de génération pour signer l’application afin qu’elle puisse s’inscrire auprès des APN. Cela nécessite la création et l’installation d’un profil d’approvisionnement qui utilise le certificat.

  12. Pour créer un profil d’approvisionnement de développement, accédez à la section Profils d’approvisionnement et suivez les étapes pour la créer, à l’aide de l’ID d’application que nous venons de créer.

  13. Une fois que vous avez créé le profil d’approvisionnement, ouvrez l’organisateur Xcode et actualisez-le. Si le profil d’approvisionnement que vous avez créé n’apparaît pas, il peut être nécessaire de télécharger le profil à partir du portail d’approvisionnement iOS et de l’importer manuellement. La capture d’écran suivante montre un exemple de l’organisateur avec le profil d’approvisionnement ajouté :
    Cette capture d’écran montre un exemple de l’organisateur avec le profil d’approvisionnement ajouté

  14. À ce stade, nous devons configurer le projet Xamarin.iOS pour utiliser ce profil d’approvisionnement nouvellement créé. Cette opération s’effectue à partir de la boîte de dialogue Options du projet, sous l’onglet Signature de bundle iOS, comme indiqué dans la capture d’écran suivante :
    Configurer le projet Xamarin.iOS pour utiliser ce profil d’approvisionnement nouvellement créé

À ce stade, l’application est configurée pour fonctionner avec des notifications Push. Toutefois, il existe encore quelques étapes supplémentaires requises avec le certificat. Ce certificat est au format DER qui n’est pas compatible avec PushSharp, ce qui nécessite un certificat PKCS12 (Personal Information Exchange). Pour convertir le certificat afin qu’il soit utilisable par PushSharp, procédez comme suit :

  1. Téléchargez le fichier de certificat - Connectez-vous au portail d’approvisionnement iOS, choisissez l’onglet Certificats, sélectionnez le certificat associé au profil d’approvisionnement correct et choisissez Télécharger .
  2. Ouvrir l’accès au trousseau : il s’agit d’une interface graphique graphique utilisateur pour le système de gestion des mots de passe dans OS X.
  3. Importer le certificat - Si le certificat n’est pas déjà installé, Fichier... Importer des éléments à partir du menu Accès au trousseau. Accédez au certificat exporté ci-dessus, puis sélectionnez-le.
  4. Exportez le certificat : développez le certificat afin que la clé privée associée soit visible, cliquez avec le bouton droit sur la clé et choisissez Exporter. Vous serez invité à entrer un nom de fichier et un mot de passe pour le fichier exporté.

À ce stade, nous avons terminé avec des certificats. Nous avons créé un certificat qui sera utilisé pour signer des applications iOS et convertir ce certificat dans un format qui peut être utilisé avec PushSharp dans une application serveur. Examinons ensuite comment les applications iOS interagissent avec APNS.

Inscription auprès d’APNS

Avant qu’une application iOS puisse recevoir une notification à distance, elle doit s’inscrire auprès d’APNS. APNS génère un jeton d’appareil unique et le retourne à l’application iOS. L’application iOS prend ensuite le jeton de l’appareil, puis s’inscrit auprès du serveur d’applications. Une fois que tout cela se produit, l’inscription est terminée et le serveur d’applications peut envoyer des notifications Push à l’appareil mobile.

En théorie, le jeton d’appareil peut changer chaque fois qu’une application iOS s’inscrit auprès d’APNS. Toutefois, dans la pratique, cela ne se produit pas souvent. En tant qu’optimisation, une application peut mettre en cache le jeton d’appareil le plus récent et mettre à jour uniquement le serveur d’applications lorsqu’elle change. Le diagramme suivant illustre le processus d’inscription et l’obtention d’un jeton d’appareil :

Ce diagramme illustre le processus d’inscription et l’obtention d’un jeton d’appareil

L’inscription auprès d’APNS est gérée dans la FinishedLaunching méthode de la classe de délégué d’application en appelant RegisterForRemoteNotificationTypes l’objet actuel UIApplication . Lorsqu’une application iOS s’inscrit auprès d’APNS, elle doit également spécifier les types de notifications à distance qu’il souhaite recevoir. Ces types de notification à distance sont déclarés dans l’énumération UIRemoteNotificationType. L’extrait de code suivant est un exemple de la façon dont une application iOS peut s’inscrire pour recevoir des notifications d’alerte et de badge à distance :

if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
    var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
                       UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
                       new NSSet ());

    UIApplication.SharedApplication.RegisterUserNotificationSettings (pushSettings);
    UIApplication.SharedApplication.RegisterForRemoteNotifications ();
} else {
    UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
    UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
}

La demande d’inscription APNS se produit en arrière-plan : lorsque la réponse est reçue, iOS appelle la méthode RegisteredForRemoteNotifications dans la AppDelegate classe et transmet le jeton d’appareil inscrit. Le jeton sera contenu dans un NSData objet. L’extrait de code suivant montre comment récupérer le jeton d’appareil fourni par APNS :

public override void RegisteredForRemoteNotifications (
UIApplication application, NSData deviceToken)
{
    // Get current device token
    var DeviceToken = deviceToken.Description;
    if (!string.IsNullOrWhiteSpace(DeviceToken)) {
        DeviceToken = DeviceToken.Trim('<').Trim('>');
    }

    // Get previous device token
    var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");

    // Has the token changed?
    if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
    {
        //TODO: Put your own logic here to notify your server that the device token has changed/been created!
    }

    // Save new device token
    NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
}

Si l’inscription échoue pour une raison quelconque (par exemple, l’appareil n’est pas connecté à Internet), iOS appelle FailedToRegisterForRemoteNotifications la classe de délégué d’application. L’extrait de code suivant montre comment afficher une alerte à l’utilisateur qui les informe que l’inscription a échoué :

public override void FailedToRegisterForRemoteNotifications (UIApplication application , NSError error)
{
    new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
}

Nettoyage des jetons d’appareil

Les jetons d’appareil expirent ou changent au fil du temps. En raison de ce fait, les applications serveur doivent effectuer des propre maison et purger ces jetons expirés ou modifiés. Lorsqu’une application envoie une notification Push à un appareil qui a un jeton expiré, APNS enregistre et enregistre ce jeton expiré. Les serveurs peuvent ensuite interroger APNS pour savoir quels jetons ont expiré.

APNS utilisé pour fournir un service de commentaires : point de terminaison HTTPS qui s’authentifie via le certificat créé pour envoyer des notifications Push et renvoie des données sur les jetons qui ont expiré. Cela a été déconseillé par Apple et supprimé.

Au lieu de cela, il existe un nouveau code d’état HTTP pour le cas qui a été signalé précédemment par le service de commentaires :

410 - Le jeton d’appareil n’est plus actif pour la rubrique.

En outre, une nouvelle timestamp clé de données JSON se trouvera dans le corps de la réponse :

Si la valeur de l’en-tête :status est 410, la valeur de cette clé est la dernière fois où les APN ont confirmé que le jeton d’appareil n’était plus valide pour la rubrique.

Arrêtez les notifications push jusqu’à ce que l’appareil enregistre un jeton avec un horodatage ultérieur auprès de votre fournisseur.

Résumé

Cette section présente les concepts clés entourant les notifications Push dans iOS. Il a expliqué le rôle du service de passerelle de notification Push Apple (APNS). Il a ensuite abordé la création et l’utilisation des certificats de sécurité essentiels à APNS. Enfin, ce document a terminé avec une discussion sur la façon dont les serveurs d’applications peuvent utiliser les services de commentaires pour arrêter le suivi des jetons d’appareil expirés.