APNS (Apple Push Notification Service) ist der Infrastrukturdienst von Apple zur Zustellung von Push-Benachrichtigungen an Ökosystemgeräte: iPhone, iPad, Mac, Apple Watch und Apple TV. Der Dienst gewährleistet eine zuverlässige Nachrichtenzustellung über eine permanente TLS-Verbindung zwischen dem Gerät und den Apple-Servern. Laut der Apple Developer Documentation verwendet APNS das HTTP/2-Protokoll für die bidirektionale Kommunikation mit Anwendungsservern.
Wichtige Punkte
Apple Push Notification Service (APNS) ist Apples proprietärer Dienst zum Routing von Push-Benachrichtigungen vom Anwendungsserver zu Benutzergeräten. Im Gegensatz zu FCM unterstützt APNS weder Android noch andere Plattformen — es ist vollständig an das Apple-Ökosystem gebunden.
Der Dienst arbeitet über eine permanente TLS-Verbindung, die jedes Apple-Gerät beim Start mit APNS-Servern aufbaut. Diese Verbindung wird im Hintergrund aufrechterhalten und zur Zustellung von Benachrichtigungen mit minimaler Latenz verwendet.
APNS übernimmt die gesamte Zustellungsinfrastruktur: Verschlüsselung, Authentifizierung, Prioritätensetzung und erneute Übertragung, wenn das Gerät nicht verfügbar ist. Der Entwickler muss nur eine korrekt formatierte Payload und ein gültiges Push-Token bereitstellen.
Ursprünglich arbeitete APNS über ein binäres Protokoll auf den Ports 2195–2196. Seit 2015 hat Apple den Dienst auf das moderne HTTP/2-Protokoll umgestellt, das Multiplexing, Header-Kompression und Server-Push-Benachrichtigungen unterstützt. HTTP/2 wurde im Juni 2020 verpflichtend.
Der Prozess der Push-Benachrichtigungszustellung über APNS besteht aus fünf Phasen: Geräteregistrierung, Erhalt eines Push-Tokens, Senden der Anfrage durch den Server, APNS-Routing und Zustellung an das Gerät.
Wenn das Gerät nicht verfügbar ist (ausgeschaltet oder kein Netzwerk), speichert APNS die letzte Nachricht für jede App und liefert sie bei Wiederherstellung der Verbindung aus. Die maximale Speicherdauer beträgt 4 Wochen, danach wird die Nachricht gelöscht.
Apple unterstützt zwei Methoden zur Authentifizierung des Anwendungsservers beim Senden von Push-Benachrichtigungen. Jede Methode hat ihre eigenen Eigenschaften hinsichtlich Gültigkeitsdauer, Verwaltung und Benutzerfreundlichkeit.
| Parameter | Token-basiert (p8) | Zertifikat-basiert (.p12) |
|---|---|---|
| Gültigkeit | Unbegrenzt (Schlüssel läuft nicht ab) | Auf Zertifikatsgültigkeit begrenzt (normalerweise 1 Jahr) |
| Rotation | Nicht erforderlich, solange der Schlüssel nicht kompromittiert ist | Jährlicher Austausch erforderlich |
| Multi-App | Ein Schlüssel für alle Apps des Kontos | Separates Zertifikat für jede App |
| Umgebung | Ein Schlüssel für Sandbox und Production | Unterschiedliche Zertifikate für Sandbox und Production |
Die Token-basierte Authentifizierung ist die von Apple seit 2019 empfohlene Methode. Sie erstellen einen einzelnen p8-Schlüssel in der Apple Developer Console, laden ihn auf Ihren Server hoch und signieren jede APNS-Anfrage damit. Der Schlüssel läuft nie ab und funktioniert für alle Apps Ihres Kontos.
Für neue Projekte ist die Token-basierte Authentifizierung eindeutig vorzuziehen: ein p8-Schlüssel für das gesamte Konto, unbegrenzt, ohne Umgebungsbindung. Die Zertifikat-basierte (.p12) wird weiterhin in Legacy-Projekten verwendet, erfordert jedoch einen jährlichen Austausch und separate Zertifikate für Sandbox und Production. Berücksichtigen Sie den Zertifikatsablauf bei der Planung von CI/CD.
APNS unterstützt drei Arten von Push-Benachrichtigungen, die sich im Verhalten auf dem Gerät und in den Anforderungsattributen unterscheiden. Die Wahl des Typs hängt vom UX-Szenario und der Dringlichkeit der Nachricht ab.
Für Background-Benachrichtigungen müssen Sie den Schlüssel content-available: 1 angeben und die Priorität auf 5 (energieeffiziente Zustellung) setzen. Das System kann die Anzahl der Hintergrundbenachrichtigungen begrenzen, wenn die App sie nicht rechtzeitig verarbeitet.
APNS unterstützt zwei Prioritätswerte: 10 (sofortige Zustellung) und 5 (energieeffizient). Verwenden Sie für Alert-Benachrichtigungen 10 — der Benutzer sollte sie sofort erhalten. Für Background-Benachrichtigungen verwenden Sie 5 — das System kann die Zustellung verzögern, um Batterie zu sparen. Eine falsche Priorität für Background kann zur Ablehnung durch APNS führen.
APNS akzeptiert Payload im JSON-Format mit einer maximalen Größe von 4 KB für reguläre Benachrichtigungen und 5 KB für VOIP. Die Payload enthält das obligatorische aps-Wörterbuch mit Anzeigeeinstellungen und optionale benutzerdefinierte Felder.
{
"aps": {
"alert": {
"title": "Neue Nachricht",
"body": "Sie haben 3 ungelesene Chats"
},
"badge": 3,
"sound": "default",
"category": "message_category",
"thread-id": "chat_room_42"
},
"customData": {
"chatId": "42"
}
}
Der Schlüssel thread-id gruppiert Benachrichtigungen im iOS-Benachrichtigungscenter. Der Schlüssel category verknüpft die Benachrichtigung mit einer UNNotificationCategory zur Anzeige von Aktionsschaltflächen. Ohne diese Schlüssel werden alle Benachrichtigungen einzeln angezeigt.
Zusätzlich zum obligatorischen aps-Wörterbuch kann die APNS-Payload beliebige benutzerdefinierte Felder auf oberster Ebene enthalten. Diese Felder sind für die App über das userInfo-Wörterbuch bei der Verarbeitung der Benachrichtigung zugänglich. Benutzerdefinierte Daten eignen sich zum Übergeben von Entitätskennungen, Bildschirmen oder Links. Die maximale Payload-Größe beträgt 4 KB, daher vermeiden Sie die Übertragung großer Datenmengen per Push; laden Sie sie nach dem Öffnen der Benachrichtigung über API.
Um eine Push-Benachrichtigung vom Server zu senden, müssen Sie eine POST-Anfrage an den APNS-Endpunkt mit korrekten Authentifizierungsheadern ausführen. Nachfolgend ein Beispiel in Node.js unter Verwendung der Token-basierten Authentifizierung.
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: "Hallo!", body: "Test-Push" } }
})
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 erfolgreich gesendet")
}
})
Nach dem Senden gibt APNS bei erfolgreicher Zustellung den HTTP-Status 200 oder einen Fehlercode mit Beschreibung im Antworttext zurück. Es ist wichtig, token-unregistered-Fehler (410) zu behandeln — solche Tokens sollten vom Server entfernt werden, da die App vom Gerät gelöscht wurde.
APNS gibt für jede Sendeanforderung HTTP-Statuscodes zurück. Erfolgreiche Zustellung gibt Status 200 zurück. Fehler erfordern unterschiedliche Behandlungsstrategien. BadDeviceToken (400) oder Unregistered (410) — das Geräte-Token ist veraltet und sollte vom Server entfernt werden. PayloadTooLarge (413) — das 4-KB-Limit wurde überschritten, reduzieren Sie die Payload.
TooManyRequests (429) — Anforderungslimit überschritten. APNS legt ein Kontingent für die Anzahl der Sendungen pro Sekunde fest. Bei Erhalt von 429 implementieren Sie einen exponentiellen Backoff und wiederholen Sie den Sendevorgang. Es wird empfohlen, 100 Anfragen pro Sekunde pro HTTP/2-Verbindung nicht zu überschreiten.
APNS-seitige Fehler — 500 und 503 (Interner Serverfehler / Dienst nicht verfügbar). Dies sind vorübergehende Ausfälle der Apple-Infrastruktur. Wiederholen Sie in solchen Fällen den Sendevorgang mit einer Verzögerung von 1–5 Sekunden, maximal 3 Versuche. Anhaltende 5xx-Fehler bei voll funktionsfähigem Server sind selten und hängen normalerweise mit TLS-Verbindungsproblemen zusammen.
Für Produktionsumgebungen implementieren Sie unbedingt die Protokollierung aller APNS-Fehler mit Token, Fehlercode und Zeitpunkt. Dies hilft, Probleme mit Zertifikaten, Kontingenten oder bestimmten Geräte-Tokens schnell zu identifizieren. Überprüfen Sie regelmäßig die Ablaufdaten von Zertifikaten, wenn Sie die zertifikatbasierte Authentifizierung verwenden.
Häufig gestellte Fragen
APNS arbeitet über TCP 443 (HTTPS) für die HTTP/2-API. Früher wurden die Ports 2195 und 2196 für das binäre Protokoll verwendet. Seit Juni 2020 verlangt Apple die ausschließliche Verwendung von HTTP/2 auf Port 443. Stellen Sie sicher, dass Ihr Server Zugriff auf api.push.apple.com hat.
Sandbox ist die APNS-Testumgebung zum Debuggen von Push-Benachrichtigungen. Production ist die Live-Umgebung für echte Benutzer. Mit der Token-basierten Authentifizierung funktioniert ein Schlüssel für beide Umgebungen — der Endpunkt unterscheidet sich: api.sandbox.push.apple.com oder api.push.apple.com.
Das Push-Token kann sich ändern bei: Wiederherstellung der App aus einem Backup, Neuinstallation der App, Betriebssystem-Update, Zurücksetzen der Netzwerkeinstellungen. Das Token ändert sich nicht bei regulären App-Updates über den App Store. Der Server sollte den BadDeviceToken-Fehler (400) als Signal zum Entfernen des Tokens behandeln.
4 KB (4096 Bytes) für reguläre Alert/Background-Benachrichtigungen. Für VOIP-Benachrichtigungen über PushKit — 5 KB (5120 Bytes). Überschreitung der Größe gibt einen PayloadTooLarge-Fehler (413) zurück. Es wird empfohlen, die Payload minimal zu halten und zusätzliche Daten über den Server zu laden.
APNS kann keine Benachrichtigung an ein Gerät ohne Internetverbindung zustellen. Wenn das Gerät offline ist, speichert APNS die letzte Nachricht (pro App pro Gerät) für bis zu 28 Tagen. Bei Wiederherstellung der Verbindung wird die Nachricht sofort zugestellt. Ältere Nachrichten werden nicht aufbewahrt.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch