web-dev-qa-db-fra.com

Comment fonctionnent les notifications push iOS?

Comment les notifications "Push" iOS sont-elles envoyées à un périphérique particulier sans que ce dernier n'ait à interroger un serveur?

Par exemple, disons que j'ai reçu un nouveau message sur Facebook. Facebook notifie Apple que mon appareil doit recevoir une notification en tant que telle. Mais comment Apple sait-il à quel appareil/IP le message est envoyé?)

83
Andy Hin

C’était trop pour moi de commenter ainsi.

De la documentation.

Le service de notification Push d'Apple (APN) transmet les notifications Push aux périphériques ayant des applications enregistrées pour recevoir ces notifications. Chaque appareil établit une connexion IP accréditée et cryptée avec le service et reçoit des notifications via cette connexion persistante. Les fournisseurs se connectent aux APN via un canal persistant et sécurisé tout en surveillant les données entrantes destinées à leurs applications clientes. Lorsque de nouvelles données pour une application arrivent, le fournisseur prépare et envoie une notification via le canal aux APN, qui envoie la notification au périphérique cible.

Je suggère de lire la documentation pour plus d'informations et pour savoir comment utiliser et configurer. Tout y est.

Notifications Push

44
Panama Jack

Chaque périphérique peut être mis à jour avec des données à l'aide de ses propres jetons de périphérique uniques. Cette image explique tout. .

enter image description here

78
Karan Alangat

J'ai créé une infographie pour expliquer le flux de travail des notifications Push. J'espère que c'est utile.

enter image description here

20
Udit Agarwal

Le périphérique ne continue pas à interroger le serveur pour les notifications Push.

Pour rester simple, considérons qu'un iPhone est connecté à Internet. Lors de la connexion à Internet, l'iPhone établit la connexion avec Apple Push Notifications Server). Cette connexion est une connexion ouverte, ce qui signifie que les données peuvent être transmises à l'iPhone à partir du serveur dès que les données parviennent au serveur.

Apple n'utilise pas le protocole HTTP pour les notifications Push, mais si vous comprenez le protocole HTTP, sa méthodologie est presque similaire.

http://en.wikipedia.org/wiki/Push_technology#HTTP_server_Push

13
user4248688

APNs Vue d'ensemble

Le service Apple Push Notification (APN) est la pièce maîtresse de la fonctionnalité de notifications à distance. Il s’agit d’un service robuste, sécurisé et très efficace qui permet aux développeurs d’applications de propager des informations sur des périphériques iOS (et indirectement watchOS), tvOS et macOS.

Lors du lancement initial de votre application sur le périphérique 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 une configuration lui permettant de recevoir des notifications, comme expliqué dans la section Configuration du support de notification à distance.

L'autre moitié de la connexion pour l'envoi de notifications - le canal sécurisé persistant entre un serveur fournisseur et les APN - nécessite une configuration dans votre compte de 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 illustre le chemin de livraison d'une notification à distance.

Figure 1-1 Envoi d'une notification à distance d'un fournisseur à une application

image: ../Art/remote_notif_simple.jpg

Lorsque la configuration des notifications Push est terminée sur vos fournisseurs et dans votre application, vos fournisseurs peuvent ensuite envoyer des demandes de notification aux APN. Les APN acheminent les charges utiles de notification correspondantes vers chaque périphérique ciblé. À la réception d'une notification, le système envoie les données utiles à l'application appropriée sur l'appareil et gère les interactions avec l'utilisateur.

Si une notification pour votre application arrive avec le périphérique allumé mais que l'application ne s'exécute pas, le système peut toujours afficher la notification. Si le périphérique est mis hors tension lorsque les APN envoient une notification, les APN conservent la notification et réessayent ultérieurement (pour plus de détails, voir Qualité de service, Stockage et transmission et Notifications coalescées).

Responsabilités du fournisseur

Les serveurs de votre fournisseur assument les responsabilités suivantes pour la participation aux APN:

  • Réception, via des APN, de jetons de périphérique spécifiques à une application uniques au monde et d'autres données pertinentes à partir d'instances de votre application sur des machines utilisateur. Cela permet à un fournisseur de connaître chaque instance en cours d'exécution de votre application.
  • Déterminer, en fonction de la conception de votre système de notification, le moment où des notifications à distance doivent être envoyées à chaque périphérique.
  • Création et envoi de demandes de notification aux APN, chaque demande contenant une charge utile de notification et des informations de remise; 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 de périphérique unique au monde et d'autres informations de remise à une requête HTTP/2. Pour plus d'informations sur les jetons de périphérique, voir Approbation de la connexion APN à périphérique et Jetons de périphérique. Pour plus d'informations sur le format de la requête HTTP/2, ainsi que sur les réponses possibles et les erreurs des APN, voir 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é persistant.
  • L'établissement de ce canal sécurisé est décrit dans Security Architecture.

Utilisation de plusieurs fournisseurs

La figure 1-2 illustre le type de réseau virtuel activé par les APN pour les appareils exécutant vos applications. Pour gérer la charge de notification, vous devez généralement déployer plusieurs fournisseurs, chacun disposant de sa propre connexion persistante et sécurisée aux APN. Chaque fournisseur peut ensuite envoyer des demandes de notification ciblant tout périphérique pour lequel il dispose d'un jeton de périphérique valide.

Figure 1-2 Transmission de notifications distantes de plusieurs fournisseurs à plusieurs périphériques

image: ../Art/remote_notif_multiple.jpg

Qualité de service, notifications en différé et groupées

Le service de notification Apple Push comprend un composant de qualité de service (QoS) assurant une fonction de stockage et de retransmission. Si les APN tentent d'envoyer une notification et que le périphérique de destination est hors ligne, il stocke la notification pendant une période limitée et la remet lorsque le périphérique redevient disponible. Ce composant stocke uniquement la notification la plus récente par appareil et par application. Si un périphérique est hors ligne, l'envoi d'une demande de notification ciblant ce périphérique entraîne l'élimination de la requête précédente. Si un périphérique reste déconnecté pendant une longue période, toutes ses notifications stockées dans les APN sont ignorées.

Pour permettre la fusion de notifications similaires, vous pouvez inclure un identifiant de réduction dans une demande de notification. Normalement, lorsqu'un périphérique est en ligne, chaque demande de notification que vous envoyez aux APN entraîne l'envoi d'une notification au périphérique. Toutefois, lorsque la clé apns-collapse-id est présente dans l'en-tête de votre demande HTTP/2, les APN fusionnent les demandes dont la valeur pour cette clé est la même. Par exemple, un service de presse qui envoie le même titre deux fois peut utiliser le même identifiant de réduction pour les deux demandes. Les APN fusionneraient alors les deux demandes en une seule notification pour la livraison au périphérique. Pour plus de détails sur la clé apns-collapse-id.

Architecture de sécurité

Les APN appliquent une validation et une authentification cryptographiques de bout en bout en utilisant deux niveaux de confiance: la confiance de connexion et la confiance de jeton de périphérique.

La connexion sécurisée fonctionne entre les fournisseurs et les APN, et entre les APN et les périphériques.

La confiance de jeton de périphérique fonctionne de bout en bout pour chaque notification à distance. Cela garantit que les notifications ne sont acheminées qu'entre les points de départ (fournisseur) et de fin (périphérique) corrects.

Un jeton de périphérique est une instance NSData opaque contenant un identifiant unique attribué par Apple à une application spécifique sur un périphérique spécifique. Seuls les APN peuvent décoder et lire le contenu d'un jeton de périphérique. Chaque instance d'application reçoit son jeton de périphérique unique lorsqu’il s’enregistre avec des APN et le transmet ensuite à son fournisseur, comme décrit dans Configuration de la prise en charge de la notification à distance.Le fournisseur doit inclure le jeton de périphérique dans chaque demande de notification Push qui cible le périphérique jeton de périphérique pour garantir que la notification est transmise uniquement à la combinaison app-périphérique unique à laquelle elle est destinée.

Les APN peuvent émettre un nouveau jeton de périphérique pour diverses raisons:

  • L'utilisateur installe votre application sur un nouvel appareil
  • L'utilisateur restaure le périphérique à 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 de périphérique au moment du lancement, comme indiqué dans la section Approbation de la connexion APN à périphérique et des jetons de périphérique. Pour des exemples de code, voir Enregistrement 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 à partir du site Web de certificats racine GeoTrust. Voici un lien direct vers le certificat.

La figure 1-3 illustre l'utilisation de l'API de fournisseur APN basée sur HTTP/2 pour établir une relation de confiance, et l'utilisation de jetons d'authentification de fournisseur JWT pour l'envoi de notifications.

Figure 1-3 Établissement et utilisation de la confiance de connexion de fournisseur basée sur un jeton

image: ../Art/service_provider_ct.jpg

Comme le montre la figure 1-3, la confiance de fournisseur basée sur un jeton fonctionne comme suit:

Votre fournisseur demande une connexion sécurisée avec des APN utilisant le protocole TLS (Transport Layer Security), représentée par la flèche intitulée "Initiation TLS" dans la figure.

Les APN donnent ensuite à votre fournisseur un certificat APN, représenté par la flèche suivante dans la figure (intitulée "Certificat APN"), que votre fournisseur valide ensuite.

À ce stade, la connexion est approuvée 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é 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, voir Réponse HTTP/2 des APN.

La figure 1-4 illustre l'utilisation d'un certificat SSL délivré par Apple pour établir une relation de confiance entre un fournisseur et les APN. Contrairement à la Figure 1-3, cette figure ne représente pas une notification Push elle-même, mais s’arrête lors de l’établissement d’une connexion TLS (Transport Layer Security). Dans le schéma de confiance basé sur les certificats, les demandes de notification Push ne sont pas authentifiées, mais elles sont validées à l'aide du jeton de périphérique associé.

Figure 1-4 Établissement de la confiance de connexion de fournisseur basée sur un certificat

image: ../Art/service_provider_ct_certificate_2x.png

Comme le montre la figure 1-4, la relation fournisseur à APN basée sur un certificat fonctionne comme suit:

Votre fournisseur demande une connexion sécurisée avec des APN utilisant le protocole TLS (Transport Layer Security), représentée par la flèche intitulée "Initiation TLS" dans la figure.

Les APN donnent ensuite à votre fournisseur un certificat APN, représenté par la flèche suivante dans la figure (intitulée "Certificat APN"), que votre fournisseur valide ensuite.

Votre fournisseur doit ensuite renvoyer son certificat de fournisseur fourni par Apple (que vous avez précédemment obtenu de votre compte de développeur en ligne, comme expliqué dans la section "Génération d'un certificat SSL client APN universel" dans l'aide de Xcode) à des APN, représentés par la flèche intitulée "Fournisseur". Certificat."

Les APN valident ensuite votre certificat de fournisseur, confirmant ainsi que la demande de connexion provient d'un fournisseur légitime, et établissent votre connexion TLS.

À ce stade, la connexion est approuvée et votre serveur fournisseur est activé pour envoyer des demandes de notification Push à distance basées sur des certificats aux APN.

Connexion APN et jetons de connexion de périphérique

La confiance entre les APN et chaque appareil est établie automatiquement, sans participation de votre application, comme décrit dans cette section.

Chaque périphérique possède un certificat cryptographique et une clé cryptographique privée, fournis par le système d’exploitation lors de la première activation du périphérique et stockés dans le trousseau de périphériques de ce dernier. Lors de l'activation, les APN authentifient et valident la connexion au périphérique, en fonction du certificat et de la clé, comme illustré à la figure 6-5.

Figure 1-5 Etablissement d'une relation de confiance entre un périphérique et des APN

image: ../Art/service_device_ct.jpg

Comme le montre la figure 1-5, la confiance APN-to-Device fonctionne comme suit:

  • La négociation de confiance commence lorsque le périphérique établit une connexion TLS avec des APN, comme indiqué dans la flèche du haut sur la figure.
  • APNs renvoie un certificat APNs au périphérique.
  • 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 inférieure dans la figure, les APN valident le certificat de périphérique en établissant une relation de confiance.
  • Avec une connexion TLS établie entre les APN et le périphérique, les applications de l'appareil peuvent s'enregistrer auprès des APN pour recevoir leurs jetons de périphérique spécifiques à l'application pour les notifications à distance. Pour plus d'informations et des exemples de code, voir Enregistrement pour recevoir des notifications à distance dans Configuration du support de notification à distance.

Après avoir reçu le jeton de terminal, une application doit se connecter au fournisseur qui lui est associé et lui transférer le jeton. Cette étape est nécessaire car un fournisseur doit inclure le jeton de périphérique ultérieurement lorsqu'il envoie une demande de notification aux APN ciblant le périphérique. Le code que vous écrivez pour transférer le jeton est également indiqué dans Enregistrement 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

image: ../Art/token_generation.jpg

L'obtention et la gestion d'un jeton de périphérique spécifique à l'application fonctionnent comme suit:

Votre application s'enregistre avec 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 de périphérique 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 en utilisant les informations contenues dans le certificat de l'appareil. Il crypte le jeton à l'aide d'une clé de jeton et le renvoie au périphérique, comme indiqué dans la flèche du milieu à droite.

Le système remet le jeton de périphérique à votre application en appelant votre application: didRegisterForRemoteNotificationsWithDeviceToken: méthode delegate.

À la réception du jeton, votre application (au sein de 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 d'informations, voir Enregistrement 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 en dur leur taille.

Lorsque votre fournisseur envoie une demande de notification Push aux APN, il inclut un jeton de périphérique qui identifie une combinaison unique app-périphérique. Cette étape est indiquée dans la flèche "Jeton, charge utile" entre le fournisseur et les APN de la figure 6-7. Les APN décrypte le jeton pour garantir la validité de la demande et déterminer le périphérique cible. Si les APN déterminent que l'expéditeur et le destinataire sont légitimes, il envoie ensuite la notification au périphérique identifié.

Figure 1-7 Chemin de notification distant du fournisseur au périphérique

image: ../Art/token_trust.jpg

Une fois que le périphérique a reçu la notification (et après la dernière étape illustrée à la figure 1-7), le système transfère la notification à distance à votre application.

Réf.: service de notification Apple Push

Maintenant, regardez ici pour comprendre le flux technique: Comment implémenter Apple Service de notification push sur une application iOS?

10
Krunal

Il existe une très belle explication des notifications Push dans cet article .

Sous iOS, les applications ne peuvent pas beaucoup fonctionner en arrière-plan. Les applications ne sont autorisées qu'à effectuer un nombre limité d'activités afin de préserver l'autonomie de la batterie.

Mais que se passe-t-il si quelque chose d’intéressant se produit et que vous souhaitez informer l’utilisateur, même s’ils n’utilisent pas actuellement votre application?

3
Tarek