Les notifications Push sont des petites alertes envoyées par les éditeurs des applications installées sur son iPhone. Ces alertes sont reçues même si l’application n’est pas active. L’utilisateur a la possibilité, à tout moment, de bloquer la réception de toutes les notifications ou uniquement celles de certaines applications.
Au sein de I See U, nous avons mis en place pour nos clients un service de Push. Nous avons souffert de quelques loupés sur la mise en place de ce service jusqu’à ce que nous mettions en place ce que je vais vous présenter ce jour : les « Enhanced Apple Push Notifications« , en d’autres termes, l’envoi avancé de notifications.
En quelques mots, comment se passe l’envoi de notifications sur votre iPhone? Le service Web de l’application envoie des messages avec un formalisme défini et signé numériquement aux serveurs d’Apple. Les messages sont entassés dans une file d’attente chez Apple. Ils seront dépilés par la suite en fonction de la charge des serveurs d’Apple. Le mécanisme d’envoi de notifications n’est donc pas synchrone. Si un deuxième message est envoyé pour le même périphérique alors que le premier n’a pas encore été délivré, seul le deuxième sera envoyé au périphérique. Il peut donc arriver que toutes les notifications ne parviennent pas au destinataire. Pour les informations critiques, Apple conseille d’utiliser un autre canal pour informer l’utilisateur (mail, message interne à l’application, …)
La cinématique d’envoi des notifications classiques aux serveurs d’Apple est la suivante :
- Ouverture d’un canal d’échange crypté avec les serveurs d’Apple. Le cryptage se fait grâce à un certificat généré sur le portail de développement.
- Envoi des messages au formalisme suivant :

- Si une erreur se produit, il faut recréer une connexion avec le serveur et continuer l’envoi.
Sur Internet, on trouve certaines personnes qui conseillent d’envoyer les notifications par lot et de clôturer la connexion pour en recréer une aussitôt. Il faut alors décider du nombre de messages envoyés par lot. La bonne pratique semble être d’un millier environ.
Dans ce mode standard, nous n’avons aucun retour sur l’envoi réel des notifications. Nous savons juste que les messages ont été envoyés à Apple.
Ce mécanisme n’était pas acceptable pour nous qui souhaitions fournir un service d’envoi fiable d’autant plus que nous avions remarqué quelques échecs sur certains périphériques. Nous avons donc étudié la solution avancée qui permet de recevoir quelques retours de la part d’Apple.
La cinématique devient donc la suivante :
- Boucle tant qu’il y a des notifications à envoyer
- Ouverture de la connexion sécurisée avec les serveurs d’Apple
- Envoi de n (1000 dans notre cas) notifications avec le formalisme suivant

- Lecture du canal SSL ouvert avec les serveurs d’Apple pour récupérer les potentielles erreurs
- Interprétation des informations renvoyées par Apple au formalisme suivant

- Traitement adéquat s’il y a des erreurs
- Si coupure de la connexion, réouverture (comme en mode standard)
- Fermeture et réouverture de la connexion pour boucler
Grâce à ce mode avancé, nous avons donc plus d’informations sur les éventuelles erreurs. Voici les codes erreur renvoyés :
- 0 : Pas d’erreur rencontrée
- 1 : Erreur de traitement
- 2 : Le « token » du périphérique est manquant
- 3 : Le « topic » du périphérique est manquant
- 4 : Le « payload » du périphérique est manquant
- 5 : La taille du « token » est invalide
- 6 : La taille du « topic » est invalide
- 7 : La taille du « payload » est invalide
- 8 : Le « token » est invalide
- 255 : Inconnue
Lors de nos expérimentations, nous avons remarqué que si une erreur se produisait sur un des messages d’un lot de 1000, les notifications devant être envoyées après celles en erreur n’étaient pas reçues. Nous n’avons trouvé aucune information sur ce point dans la documentation et donc cette information est à prendre avec précaution. Dans nos cas, nous renvoyons donc les notifications qui ont lieues après une erreur dans un lot.
Depuis la mise en place de ce mécanisme, nous n’avons plus de souci avec les notifications.
Si vous aussi vous avez rencontré des soucis avec les notifications Push d’Apple, nous serions ravis d’échanger avec vous sur le sujet.
Source : Documentation Apple