Présentation des APN
Le service de notification push Apple (APN) est la pièce maîtresse de la fonction de notification à distance. Il s'agit d'un service robuste, sécurisé et très efficace permettant aux développeurs d'applications de propager des informations sur les appareils iOS (et, indirectement, watchOS), tvOS et macOS.
Lors du lancement initial de votre application sur l'appareil d'un utilisateur, le système établit automatiquement une connexion IP accréditée, chiffrée et persistante entre votre application et les APN. Cette connexion permet à votre application d'effectuer la configuration pour lui permettre de recevoir des notifications, comme expliqué dans Configuration de la prise en charge des notifications à distance.
L'autre moitié de la connexion pour l'envoi de notifications (le canal sécurisé et persistant entre un serveur fournisseur et les APN) nécessite une configuration dans votre compte développeur en ligne et l'utilisation de certificats cryptographiques fournis par Apple. Un fournisseur est un serveur que vous déployez et gérez, que vous configurez pour fonctionner avec des APN. La figure 1-1 montre le chemin de remise d'une notification à distance.
Figure 1-1 Envoi d'une notification à distance d'un fournisseur à une application
Une fois la configuration des notifications push terminée sur vos fournisseurs et dans votre application, vos fournisseurs peuvent ensuite envoyer des demandes de notification aux APN. Les APN transmettent les charges utiles de notification correspondantes à chaque appareil ciblé. À la réception d'une notification, le système fournit la charge utile à l'application appropriée sur l'appareil et gère les interactions avec l'utilisateur.
Si une notification pour votre application arrive alors que l'appareil est allumé mais que l'application n'est pas en cours d'exécution, le système peut toujours afficher la notification. Si l'appareil est mis hors tension lorsque les APN envoient une notification, les APN conservent la notification et essaient à nouveau plus tard (pour plus de détails, voir Qualité de service, Store-and-Forward et Notifications coalescées).
Responsabilités du fournisseur
Vos serveurs fournisseurs ont les responsabilités suivantes pour participer avec les APN:
- Recevoir, via des APN, des jetons d'appareil uniques au monde et spécifiques à l'application et d'autres données pertinentes à partir d'instances de votre application sur les appareils des utilisateurs. Cela permet à un fournisseur de connaître chaque instance en cours d'exécution de votre application.
- Déterminer, selon la conception de votre système de notification, quand des notifications à distance doivent être envoyées à chaque appareil.
- Création et envoi de demandes de notification aux APN, chaque demande contenant une charge utile de notification et des informations de livraison; Les APN envoient ensuite les notifications correspondantes aux appareils prévus en votre nom.
Pour chaque demande de notification à distance envoyée par un fournisseur, il doit:
- Construisez un dictionnaire JSON contenant la charge utile de la notification, comme décrit dans Création de la charge utile de notification à distance.
- Ajoutez la charge utile, un jeton d'appareil unique au monde et d'autres informations de livraison à une requête HTTP / 2. Pour plus d'informations sur les jetons de périphérique, consultez Approbation de connexion APN à périphérique et jetons de périphérique. Pour plus d'informations sur le format de requête HTTP / 2 et les réponses et erreurs possibles des APN, consultez Communication avec les APN.
- Envoyez la demande HTTP / 2 aux APN, y compris les informations d'identification cryptographiques sous la forme d'un jeton ou d'un certificat, via un canal sécurisé permanent.
- L'établissement de ce canal sécurisé est décrit dans Architecture de sécurité.
Utilisation de plusieurs fournisseurs
La figure 1-2 illustre le type de réseau virtuel que les APN activent pour les appareils exécutant vos applications. Pour gérer la charge de notification, vous déployez généralement plusieurs fournisseurs, chacun avec sa propre connexion persistante et sécurisée aux APN. Chaque fournisseur peut ensuite envoyer des demandes de notification ciblant tout appareil pour lequel le fournisseur dispose d'un jeton d'appareil valide.
Figure 1-2 Pousser les notifications à distance de plusieurs fournisseurs vers plusieurs appareils
Qualité de service, Store-and-Forward et Notifications coalescées
Le service Apple Push Notification comprend un composant de qualité de service (QoS) qui exécute une fonction de stockage et de retransmission. Si les APN tentent de délivrer une notification et que le périphérique de destination est hors ligne, les APN stockent la notification pendant une période limitée et la délivre lorsque le périphérique redevient disponible. Ce composant stocke uniquement la notification la plus récente par appareil et par application. Si un appareil est hors ligne, l'envoi d'une demande de notification ciblant cet appareil entraîne le rejet de la demande précédente. Si un appareil reste hors ligne pendant une longue période, toutes ses notifications stockées dans les APN sont supprimées.
Pour permettre la fusion de notifications similaires, vous pouvez inclure un identifiant de réduction dans une demande de notification. Normalement, lorsqu'un appareil est en ligne, chaque demande de notification que vous envoyez aux APN entraîne une notification envoyée à l'appareil. Cependant, lorsque la clé apns-collapse-id est présente dans votre en-tête de requête HTTP / 2, les APN fusionnent les requêtes dont la valeur pour cette clé est la même. Par exemple, un service de nouvelles qui envoie deux fois le même titre peut utiliser la même valeur d'identificateur de réduction pour les deux demandes. Les APN fusionneraient alors les deux demandes en une seule notification pour livraison à l'appareil. Pour plus de détails sur la clé apns-collapse-id.
Architecture de sécurité
Les APN appliquent la validation et l'authentification cryptographiques de bout en bout à l'aide de deux niveaux de confiance: confiance de connexion et confiance de jeton d'appareil.
La confiance de connexion fonctionne entre les fournisseurs et les APN, et entre les APN et les appareils.
L'approbation de jeton d'appareil fonctionne de bout en bout pour chaque notification à distance. Il garantit que les notifications sont acheminées uniquement entre les points de début (fournisseur) et de fin (appareil) corrects.
Un jeton d'appareil est une instance NSData opaque qui contient un identifiant unique attribué par Apple à une application spécifique sur un appareil spécifique. Seuls les APN peuvent décoder et lire le contenu d'un jeton d'appareil. Chaque instance d'application reçoit son jeton d'appareil unique lorsqu'elle s'enregistre auprès des APN, puis doit transmettre le jeton à son fournisseur, comme décrit dans Configuration de la prise en charge des notifications à distance. Le fournisseur doit inclure le jeton d'appareil dans chaque demande de notification push qui cible l'appareil associé; Les APN utilisent le jeton d'appareil pour garantir que la notification n'est envoyée qu'à la combinaison unique d'application-appareil à laquelle elle est destinée.
Les APN peuvent émettre un nouveau jeton d'appareil pour diverses raisons:
- L'utilisateur installe votre application sur un nouvel appareil
- L'utilisateur restaure l'appareil à partir d'une sauvegarde
- L'utilisateur réinstalle le système d'exploitation
- Autres événements définis par le système
Par conséquent, les applications doivent demander le jeton d'appareil au moment du lancement, comme décrit dans Approbation de connexion APN à appareil et jetons d'appareil. Pour obtenir des exemples de code, consultez Inscription pour recevoir des notifications à distance.
Pour établir des sessions TLS basées sur HTTP / 2 avec des APN, vous devez vous assurer qu'un certificat racine GeoTrust Global CA est installé sur chacun de vos fournisseurs. Si un fournisseur exécute macOS, ce certificat racine se trouve dans le trousseau par défaut. Sur d'autres systèmes, ce certificat peut nécessiter une installation explicite. Vous pouvez télécharger ce certificat depuis le site Web des certificats racine GeoTrust. Voici un lien direct vers le certificat.
La figure 1-3 illustre l'utilisation de l'API du fournisseur APN basé sur HTTP / 2 pour établir la confiance et l'utilisation des jetons d'authentification du fournisseur JWT pour l'envoi de notifications.
Figure 1-3 Établissement et utilisation de la confiance de connexion de fournisseur basée sur des jetons
Comme le montre la figure 1-3, l'approbation de fournisseur basée sur des jetons fonctionne comme suit:
Votre fournisseur demande une connexion sécurisée avec les APN à l'aide de la sécurité de la couche de transport (TLS), représentée par la flèche intitulée «TLS initiation» sur la figure.
APNs remet ensuite à votre fournisseur un certificat APN, représenté par la flèche suivante dans la figure (intitulée «certificat APNs»), que votre fournisseur valide ensuite.
À ce stade, la confiance de connexion est établie et votre serveur fournisseur est activé pour envoyer des demandes de notification push à distance basées sur des jetons aux APN. Chaque demande de notification envoyée par votre fournisseur doit être accompagnée d'un jeton d'authentification JWT, représenté sur la figure par la flèche intitulée «Notification push».
Les APN répondent à chaque push, représentés dans la figure par la flèche intitulée "Réponse HTTP / 2".
Pour plus d'informations sur les réponses que votre fournisseur peut recevoir pour cette étape, consultez Réponse HTTP / 2 des APN.
La figure 1-4 illustre l'utilisation d'un certificat SSL émis par Apple pour établir la confiance entre un fournisseur et des APN. Contrairement à la figure 1-3, cette figure ne montre pas une notification push elle-même, mais s'arrête à l'établissement d'une connexion Transport Layer Security (TLS). Dans le schéma d'approbation basé sur les certificats, les demandes de notification push ne sont pas authentifiées, mais elles sont validées à l'aide du jeton d'appareil associé.
Figure 1-4 Établissement d'une approbation de connexion de fournisseur basée sur des certificats
Comme le montre la figure 1-4, la confiance fournisseur-APN basée sur un certificat fonctionne comme suit:
Votre fournisseur demande une connexion sécurisée avec les APN à l'aide de la sécurité de la couche de transport (TLS), représentée par la flèche intitulée «TLS initiation» sur la figure.
APNs remet ensuite à votre fournisseur un certificat APN, représenté par la flèche suivante dans la figure (intitulée «certificat APNs»), que votre fournisseur valide ensuite.
Votre fournisseur doit ensuite renvoyer son certificat de fournisseur fourni par Apple (que vous avez précédemment obtenu à partir de votre compte de développeur en ligne, comme expliqué dans «Générer un certificat SSL client APNs universel» dans l'aide Xcode) aux APN, représenté par la flèche intitulée «Fournisseur certificat."
APNs valide ensuite votre certificat de fournisseur, confirmant ainsi que la demande de connexion provient d'un fournisseur légitime, et établit votre connexion TLS.
À ce stade, la confiance de connexion est établie et votre serveur fournisseur est activé pour envoyer des demandes de notification push à distance basées sur des certificats aux APN.
Approbation de connexion APN à appareil et jetons d'appareil
La confiance entre les APN et chaque appareil est établie automatiquement, sans participation de votre application, comme décrit dans cette section.
Chaque appareil dispose d'un certificat cryptographique et d'une clé cryptographique privée, fournis par le système d'exploitation lors de l'activation initiale de l'appareil et stockés dans le trousseau de l'appareil. Lors de l'activation, les APN authentifient et valident la connexion à l'appareil, en fonction du certificat et de la clé, comme illustré à la Figure 6-5.
Figure 1-5 Établissement de la confiance de connexion entre un appareil et les APN
Comme le montre la figure 1-5, la confiance APN-appareil fonctionne comme suit:
- La négociation d'approbation commence lorsque l'appareil lance une connexion TLS avec des APN, comme indiqué dans la flèche supérieure de la figure.
- APNs renvoie un certificat APNs à l'appareil.
- Le système d'exploitation valide ce certificat puis, comme indiqué dans la flèche «Certificat de périphérique», envoie le certificat de périphérique aux APN.
- Enfin, comme indiqué par la flèche du bas de la figure, les APN valident le certificat de l'appareil, établissant la confiance.
- Avec une connexion TLS établie entre les APN et l'appareil, les applications de l'appareil peuvent s'enregistrer auprès des APN pour recevoir leurs jetons d'appareil spécifiques à l'application pour les notifications à distance. Pour plus de détails et des exemples de code, consultez Inscription pour recevoir des notifications à distance dans Configuration de la prise en charge des notifications à distance.
Après avoir reçu le jeton d'appareil, une application doit se connecter au fournisseur associé de l'application et lui transmettre le jeton. Cette étape est nécessaire car un fournisseur doit inclure le jeton d'appareil plus tard lorsqu'il envoie une demande de notification aux APN, ciblant l'appareil. Le code que vous écrivez pour transférer le jeton est également affiché dans Inscription pour recevoir des notifications à distance.
Qu'un utilisateur active un périphérique pour la première fois ou que les APN aient émis un nouveau jeton de périphérique, le processus est similaire et est illustré à la Figure 6-6.
Figure 1-6 Gestion du jeton de périphérique
L'obtention et la gestion d'un jeton d'appareil spécifique à une application fonctionnent comme suit:
Votre application s'enregistre auprès des APN pour les notifications à distance, comme indiqué dans la flèche du haut. Si l'application est déjà enregistrée et que le jeton d'appareil spécifique à l'application n'a pas changé, le système renvoie rapidement le jeton existant à l'application et ce processus passe à l'étape 4.
Lorsqu'un nouveau jeton d'appareil est nécessaire, les APN en génèrent un à l'aide des informations contenues dans le certificat de l'appareil. Il crypte le jeton à l'aide d'une clé de jeton et le renvoie à l'appareil, comme indiqué dans la flèche du milieu pointant vers la droite.
Le système renvoie le jeton d'appareil à votre application en appelant votre application: didRegisterForRemoteNotificationsWithDeviceToken: méthode de délégué.
Lors de la réception du jeton, votre application (dans la méthode déléguée) doit le transmettre à votre fournisseur au format binaire ou hexadécimal. Votre fournisseur ne peut pas envoyer de notifications à l'appareil sans ce jeton. Pour plus de détails, voir Inscription pour recevoir des notifications à distance dans Configuration de la prise en charge des notifications à distance.
IMPORTANT
Les jetons de périphérique APN sont de longueur variable. Ne codez pas leur taille en dur.
Lorsque votre fournisseur envoie une demande de notification push aux APN, il inclut un jeton d'appareil qui identifie une combinaison application-appareil unique. Cette étape est illustrée dans la flèche «Token, Payload» entre le fournisseur et les APN dans la Figure 6-7. Les APN déchiffrent le jeton pour garantir la validité de la demande et pour déterminer le périphérique cible. Si les APN déterminent que l'expéditeur et le destinataire sont légitimes, ils envoient alors la notification au périphérique identifié.
Figure 1-7 Chemin de notification à distance du fournisseur à l'appareil
Une fois que l'appareil reçoit la notification (et après l'étape finale illustrée à la figure 1-7), le système transmet la notification à distance à votre application.
Réf: Apple Push Notification Service
Maintenant, regardez ici pour comprendre le flux technique: Comment implémenter le service de notification push Apple sur une application iOS?