APNS : qu’est-ce que c’est, comment fonctionne Apple Push Notification Service et son architecture

Auteur : IT Sectr Publié le : 2026-03-20 Temps de lecture : 8 min

APNS (Apple Push Notification Service) est le service d’infrastructure d’Apple pour la livraison de notifications push aux appareils de l’écosystème : iPhone, iPad, Mac, Apple Watch et Apple TV. Le service assure une livraison fiable des messages via une connexion TLS persistante entre l’appareil et les serveurs d’Apple. Selon la Documentation Développeur Apple, APNS utilise le protocole HTTP/2 pour la communication bidirectionnelle avec les serveurs d’applications.

Points Clés

  • APNS — service centralisé d’Apple pour livrer des notifications push à tous les appareils Apple
  • Protocole — HTTP/2 avec TLS, communication bidirectionnelle entre le serveur d’app et les serveurs Apple
  • Authentification — deux méthodes : basée sur Token (clé p8) et basée sur Certificat (.p12)
  • Appareils — chacun reçoit un jeton push unique pour l’identification lors de l’envoi
  • Priorité — livraison immédiate (10) ou économe en énergie (5) selon le type de message

Qu’est-ce qu’APNS ?

Apple Push Notification Service (APNS) est le service propriétaire d’Apple pour acheminer les notifications push du serveur d’application vers les appareils des utilisateurs. Contrairement à FCM, APNS ne prend pas en charge Android ni d’autres plates-formes — il est entièrement lié à l’écosystème Apple.

Le service fonctionne via une connexion TLS persistante que chaque appareil Apple établit avec les serveurs APNS au démarrage. Cette connexion est maintenue en arrière-plan et utilisée pour livrer les notifications avec une latence minimale.

APNS gère toute l’infrastructure de livraison : chiffrement, authentification, priorisation et retransmission lorsque l’appareil est indisponible. Le développeur doit seulement fournir une charge utile correctement formatée et un jeton push valide.

Évolution d’APNS

À l’origine, APNS fonctionnait via un protocole binaire sur les ports 2195–2196. Depuis 2015, Apple a migré le service vers le protocole moderne HTTP/2, qui prend en charge le multiplexage, la compression d’en-tête et les notifications push serveur. HTTP/2 est devenu obligatoire en juin 2020.

Comment fonctionne Apple Push Notification Service ?

Le processus de livraison des notifications push via APNS comprend cinq étapes : enregistrement de l’appareil, obtention du jeton push, envoi de la requête par le serveur, routage APNS et livraison à l’appareil.

  • Enregistrement — au lancement, l’appel appelle registerForRemoteNotifications, le système contacte APNS
  • Jeton — APNS retourne un jeton push à l’appareil — une chaîne unique identifiant l’app sur l’appareil
  • Envoi — le serveur d’application envoie une requête POST à https://api.push.apple.com avec le jeton et la charge utile
  • Routage — APNS trouve l’appareil par le jeton et livre le message via la connexion TLS
  • Traitement — iOS/macOS affiche la notification ou la transmet à l’app selon l’état

Si l’appareil est indisponible (éteint ou sans réseau), APNS stocke le dernier message pour chaque application et le livre lors du rétablissement de la connexion. La durée maximale de stockage est de 4 semaines, après quoi le message est supprimé.

Authentification APNS : Token et Certificat

Apple prend en charge deux méthodes pour authentifier le serveur d’application lors de l’envoi de notifications push. Chaque méthode a ses propres caractéristiques en termes de période de validité, de gestion et de facilité d’utilisation.

ParamètreBasé sur Token (p8)Basé sur Certificat (.p12)
ValiditéIllimitée (la clé n’expire pas)Limitée à la validité du certificat (généralement 1 an)
RotationNon nécessaire sauf si la clé est compromiseRemplacement annuel obligatoire
Multi-applicationsUne clé pour toutes les applications du compteCertificat séparé pour chaque application
EnvironnementUne clé pour Sandbox et ProductionCertificats différents pour Sandbox et Production

L’authentification basée sur Token est la méthode recommandée par Apple depuis 2019. Vous créez une seule clé p8 dans Apple Developer Console, vous la téléchargez sur votre serveur et signez chaque requête APNS avec elle. La clé n’expire jamais et fonctionne pour toutes les applications de votre compte.

Quelle méthode d’authentification choisir

Pour les nouveaux projets, l’authentification basée sur Token est clairement préférable : une clé p8 pour tout le compte, illimitée, sans lien avec l’environnement. La méthode basée sur Certificat (.p12) est encore utilisée dans les projets existants mais nécessite un remplacement annuel et des certificats séparés pour Sandbox et Production. Tenez compte de l’expiration du certificat lors de la planification CI/CD.

Types de notifications push APNS

APNS prend en charge trois types de notifications push, qui diffèrent par leur comportement sur l’appareil et les exigences d’attributs de requête. Le choix du type dépend du scénario UX et de l’urgence du message.

  • Alert — notification standard avec titre, texte et boutons d’action optionnels
  • Background — livraison silencieuse de données (push silencieux) sans affichage à l’utilisateur, traitée dans application:didReceiveRemoteNotification
  • VOIP — type spécial pour les applications VoIP (PushKit), livré immédiatement même lorsque l’application est fermée

Pour les notifications Background, vous devez spécifier la clé content-available : 1 et définir la priorité sur 5 (livraison économe en énergie). Le système peut limiter le nombre de notifications en arrière-plan si l’application ne les traite pas en temps utile.

Configuration de la priorité de livraison

APNS prend en charge deux valeurs de priorité : 10 (livraison immédiate) et 5 (économe en énergie). Pour les notifications alert, utilisez 10 — l’utilisateur doit les recevoir immédiatement. Pour les notifications background, utilisez 5 — le système peut retarder la livraison pour économiser la batterie. Une priorité incorrecte pour background peut entraîner le rejet d’APNS.

Format de la charge utile APNS

APNS accepte une charge utile au format JSON avec une taille maximale de 4 Ko pour les notifications standard et 5 Ko pour VOIP. La charge utile contient le dictionnaire aps obligatoire avec les paramètres d’affichage et des champs personnalisés optionnels.

json
{
    "aps": {
        "alert": {
            "title": "Nouveau message",
            "body": "Vous avez 3 discussions non lues"
        },
        "badge": 3,
        "sound": "default",
        "category": "message_category",
        "thread-id": "chat_room_42"
    },
    "customData": {
        "chatId": "42"
    }
}

La clé thread-id regroupe les notifications dans le Centre de notifications iOS. La clé category lie la notification à une UNNotificationCategory pour afficher les boutons d’action. Sans ces clés, toutes les notifications s’affichent individuellement.

Champs personnalisés dans la charge utile APNS

En plus du dictionnaire aps obligatoire, la charge utile APNS peut contenir des champs personnalisés au niveau supérieur. Ces champs sont accessibles à l’application via le dictionnaire userInfo lors du traitement de la notification. Les données personnalisées sont pratiques pour transmettre des identifiants d’entités, des écrans ou des liens. La taille maximale de la charge utile est de 4 Ko, évitez donc de transférer de grandes quantités de données via push ; chargez-les via API après l’ouverture de la notification.

Exemple d’envoi via l’API HTTP/2

Pour envoyer une notification push depuis le serveur, vous devez exécuter une requête POST vers le point de terminaison APNS avec les en-têtes d’authentification corrects. Voici un exemple en Node.js utilisant l’authentification basée sur Token.

js
const http2 = require("http2")
const fs = require("fs")
const jwt = require("jsonwebtoken")

const token = jwt.sign(
    { iss: "TEAM_ID", iat: Math.floor(Date.now() / 1000) },
    fs.readFileSync("AuthKey.p8"),
    { algorithm: "ES256", keyid: "KEY_ID" }
)

const payload = JSON.stringify({
    aps: { alert: { title: "Bonjour !", body: "Push de test" } }
})

const client = http2.connect(
    "https://api.push.apple.com"
)

const req = client.request({
    ":method": "POST",
    ":path": "/3/device/DEVICE_PUSH_TOKEN",
    "authorization": "bearer " + token,
    "apns-push-type": "alert",
    "apns-topic": "com.example.app",
    "apns-priority": "10"
})
req.end(payload)

req.on("response", (headers) => {
    if (headers[":status"] === 200) {
        console.log("Push envoyé avec succès")
    }
})

Après l’envoi, APNS retourne le statut HTTP 200 en cas de livraison réussie ou un code d’erreur avec description dans le corps de la réponse. Il est important de traiter les erreurs token-unregistered (410) — ces jetons doivent être supprimés du serveur, car l’application a été supprimée de l’appareil.

Erreurs APNS et leur traitement

APNS retourne des codes de statut HTTP pour chaque requête d’envoi. La livraison réussie retourne le statut 200. Les erreurs nécessitent différentes stratégies de traitement. BadDeviceToken (400) ou Unregistered (410) — le jeton de l’appareil est obsolète et doit être supprimé du serveur. PayloadTooLarge (413) — la limite de 4 Ko a été dépassée, réduisez la charge utile.

TooManyRequests (429) — limite de requêtes dépassée. APNS fixe un quota sur le nombre d’envois par seconde. Lors de la réception de 429, implémentez un backoff exponentiel (exponential backoff) et réessayez. Il est recommandé de ne pas dépasser 100 requêtes par seconde par connexion HTTP/2.

Erreurs côté APNS — 500 et 503 (Erreur Interne du Serveur / Service Indisponible). Ce sont des pannes temporaires de l’infrastructure Apple. Dans ces cas, réessayez avec un délai de 1 à 5 secondes, pas plus de 3 tentatives. Les erreurs 5xx persistantes avec un serveur complètement opérationnel sont rares et généralement liées à des problèmes de connexion TLS.

Pour les environnements de Production, assurez-vous d’implémenter la journalisation de toutes les erreurs APNS avec le jeton, le code d’erreur et l’heure. Cela aidera à identifier rapidement les problèmes de certificats, de quotas ou de jetons d’appareils spécifiques. Vérifiez régulièrement les dates d’expiration des certificats si vous utilisez l’authentification basée sur Certificat.

Questions Fréquemment Posées

Quels ports APNS utilise-t-il ?

APNS fonctionne via le port TCP 443 (HTTPS) pour l’API HTTP/2. Auparavant, les ports 2195 et 2196 étaient utilisés pour le protocole binaire. Depuis juin 2020, Apple exige l’utilisation exclusive de HTTP/2 sur le port 443. Assurez-vous que votre serveur a accès à api.push.apple.com.

Que sont les environnements Sandbox et Production dans APNS ?

Sandbox est l’environnement de test APNS pour déboguer les notifications push. Production est l’environnement réel pour les utilisateurs finaux. Avec l’authentification basée sur Token, une clé fonctionne pour les deux environnements — le point de terminaison diffère : api.sandbox.push.apple.com ou api.push.apple.com.

À quelle fréquence le jeton push d’un appareil change-t-il ?

Le jeton push peut changer lors de : la restauration de l’application à partir d’une sauvegarde, la réinstallation de l’application, la mise à jour du système d’exploitation, la réinitialisation des paramètres réseau. Le jeton ne change pas lors des mises à jour normales de l’application via l’App Store. Le serveur doit traiter l’erreur BadDeviceToken (400) comme un signal pour supprimer le jeton.

Quelle est la taille maximale de la charge utile dans APNS ?

4 Ko (4096 octets) pour les notifications alert/background standard. Pour les notifications VOIP via PushKit — 5 Ko (5120 octets). Le dépassement de la taille retourne une erreur PayloadTooLarge (413). Il est recommandé de garder la charge utile minimale et de charger les données supplémentaires via le serveur.

Peut-on envoyer un push sans internet sur l’appareil ?

APNS ne peut pas livrer une notification à un appareil sans connexion internet. Si l’appareil est hors ligne, APNS stocke le dernier message (par application par appareil) jusqu’à 28 jours. Lorsque la connexion est rétablie, le message est livré immédiatement. Les messages plus anciens ne sont pas conservés.

Résumé

  • APNS — service d’infrastructure d’Apple pour la livraison de push sur iOS, macOS, watchOS et tvOS
  • Jeton push — identifiant unique d’appareil obtenu via registerForRemoteNotifications
  • HTTP/2 — protocole APNS moderne avec multiplexage, obligatoire depuis 2020
  • Authentification — basée sur Token (p8) préférable à basée sur Certificat (.p12) pour la validité et la flexibilité
  • Alert, Background, VOIP — trois types de notifications push avec des règles de livraison différentes
  • Charge utile — JSON jusqu’à 4 Ko avec dictionnaire aps obligatoire et champs personnalisés optionnels
  • Stockage — APNS stocke un dernier message jusqu’à 28 jours pour les appareils hors ligne

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi