APNs Übersicht
Der Apple Push Notification Service (APNs) ist das Herzstück der Remote-Benachrichtigungsfunktion. Es ist ein robuster, sicherer und hocheffizienter Dienst für App-Entwickler, mit dem Informationen an iOS- (und indirekt watchOS), tvOS- und macOS-Geräte weitergegeben werden können.
Beim ersten Start Ihrer App auf dem Gerät eines Benutzers stellt das System automatisch eine akkreditierte, verschlüsselte und dauerhafte IP-Verbindung zwischen Ihrer App und den APNs her. Über diese Verbindung kann Ihre App ein Setup durchführen, um Benachrichtigungen zu empfangen, wie unter Konfigurieren der Remote-Benachrichtigungsunterstützung erläutert.
Die andere Hälfte der Verbindung zum Senden von Benachrichtigungen - der dauerhafte, sichere Kanal zwischen einem Anbieterserver und APNs - erfordert die Konfiguration in Ihrem Online-Entwicklerkonto und die Verwendung von von Apple bereitgestellten kryptografischen Zertifikaten. Ein Anbieter ist ein Server, den Sie bereitstellen und verwalten und den Sie für die Arbeit mit APNs konfigurieren. Abbildung 1-1 zeigt den Zustellungspfad für eine Remote-Benachrichtigung.
Abbildung 1-1 Bereitstellen einer Remote-Benachrichtigung von einem Anbieter an eine App
Wenn die Einrichtung der Push-Benachrichtigung bei Ihren Anbietern und in Ihrer App abgeschlossen ist, können Ihre Anbieter Benachrichtigungsanforderungen an APNs senden. APNs übermitteln jedem Zielgerät entsprechende Benachrichtigungsnutzdaten. Nach Erhalt einer Benachrichtigung liefert das System die Nutzdaten an die entsprechende App auf dem Gerät und verwaltet die Interaktionen mit dem Benutzer.
Wenn eine Benachrichtigung für Ihre App bei eingeschaltetem Gerät eingeht, die App jedoch nicht ausgeführt wird, kann das System die Benachrichtigung weiterhin anzeigen. Wenn das Gerät ausgeschaltet wird, wenn APNs eine Benachrichtigung senden, behalten APNs die Benachrichtigung bei und versuchen es später erneut (Einzelheiten finden Sie unter Quality of Service, Store-and-Forward- und Coalesced-Benachrichtigungen).
Verantwortlichkeiten des Anbieters
Ihre Provider-Server haben die folgenden Verantwortlichkeiten für die Teilnahme an APNs:
- Empfangen von über APNs weltweit eindeutigen, app-spezifischen Gerätetoken und anderen relevanten Daten von Instanzen Ihrer App auf Benutzergeräten. Auf diese Weise kann ein Anbieter über jede laufende Instanz Ihrer App Bescheid wissen.
- Bestimmen Sie gemäß dem Design Ihres Benachrichtigungssystems, wann Remote-Benachrichtigungen an jedes Gerät gesendet werden müssen.
- Erstellen und Senden von Benachrichtigungsanforderungen an APNs, wobei jede Anforderung eine Benachrichtigungsnutzlast und Zustellinformationen enthält; APNs übermittelt dann in Ihrem Namen entsprechende Benachrichtigungen an die vorgesehenen Geräte.
Für jede Remote-Benachrichtigungsanforderung, die ein Anbieter sendet, muss er:
- Erstellen Sie ein JSON-Wörterbuch mit den Nutzdaten der Benachrichtigung, wie unter Erstellen der Nutzdaten für Remote-Benachrichtigungen beschrieben.
- Fügen Sie einer HTTP / 2-Anforderung die Nutzdaten, ein global eindeutiges Geräte-Token und andere Übermittlungsinformationen hinzu. Informationen zu Geräte-Token finden Sie unter Vertrauenswürdigkeit von APNs zu Geräteverbindungen und Geräte-Token. Informationen zum HTTP / 2-Anforderungsformat sowie zu den möglichen Antworten und Fehlern von APNs finden Sie unter Kommunizieren mit APNs.
- Senden Sie die HTTP / 2-Anforderung über einen dauerhaften, sicheren Kanal an APNs, einschließlich kryptografischer Anmeldeinformationen in Form eines Tokens oder Zertifikats.
- Das Einrichten dieses sicheren Kanals wird in der Sicherheitsarchitektur beschrieben.
Verwenden mehrerer Anbieter
Abbildung 1-2 zeigt die Art des virtuellen Netzwerks, das APNs für die Geräte aktivieren, auf denen Ihre Apps ausgeführt werden. Um die Last der Benachrichtigung zu bewältigen, stellen Sie normalerweise mehrere Anbieter bereit, von denen jeder über eine eigene dauerhafte und sichere Verbindung zu APNs verfügt. Jeder Anbieter kann dann Benachrichtigungsanforderungen an jedes Gerät senden, für das der Anbieter ein gültiges Gerätetoken besitzt.
Abbildung 1-2 Remote-Benachrichtigungen von mehreren Anbietern auf mehrere Geräte übertragen
Servicequalität, Store-and-Forward- und Coalesced-Benachrichtigungen
Der Apple Push Notification-Dienst enthält eine QoS-Komponente (Quality of Service), die eine Store-and-Forward-Funktion ausführt. Wenn APNs versuchen, eine Benachrichtigung zu übermitteln, und das Zielgerät offline ist, speichern APNs die Benachrichtigung für einen begrenzten Zeitraum und übermitteln sie, wenn das Gerät wieder verfügbar ist. Diese Komponente speichert nur die aktuellste Benachrichtigung pro Gerät und pro App. Wenn ein Gerät offline ist, wird beim Senden einer Benachrichtigungsanforderung für dieses Gerät die vorherige Anforderung verworfen. Wenn ein Gerät längere Zeit offline bleibt, werden alle in APNs gespeicherten Benachrichtigungen verworfen.
Um das Zusammenführen ähnlicher Benachrichtigungen zu ermöglichen, können Sie eine Benachrichtigungskennung in eine Benachrichtigungsanforderung aufnehmen. Wenn ein Gerät online ist, führt normalerweise jede Benachrichtigungsanforderung, die Sie an APNs senden, zu einer Benachrichtigung, die an das Gerät gesendet wird. Wenn jedoch der Schlüssel apns-destroy-id in Ihrem HTTP / 2-Anforderungsheader vorhanden ist, werden APNs Anforderungen zusammengeführt, deren Wert für diesen Schlüssel gleich ist. Beispielsweise könnte ein Nachrichtendienst, der zweimal dieselbe Überschrift sendet, für beide Anforderungen denselben Wert für die Kollaps-ID verwenden. APNs würden dann die beiden Anforderungen zu einer einzigen Benachrichtigung für die Zustellung an das Gerät zusammenführen. Einzelheiten zum Schlüssel apns -apse-id.
Sicherheitsarchitektur
APNs erzwingen eine durchgängige kryptografische Validierung und Authentifizierung mithilfe von zwei Vertrauensstufen: Verbindungsvertrauen und Geräte-Token-Vertrauen.
Das Verbindungsvertrauen funktioniert zwischen Anbietern und APNs sowie zwischen APNs und Geräten.
Die Geräte-Token-Vertrauensstellung funktioniert für jede Remote-Benachrichtigung durchgängig. Es stellt sicher, dass Benachrichtigungen nur zwischen den richtigen Start- (Anbieter) und Endpunkten (Gerät) weitergeleitet werden.
Ein Geräte-Token ist eine undurchsichtige NSData-Instanz, die eine eindeutige Kennung enthält, die Apple einer bestimmten App auf einem bestimmten Gerät zugewiesen hat. Nur APNs können den Inhalt eines Geräte-Tokens dekodieren und lesen. Jede App-Instanz erhält ihr eindeutiges Geräte-Token, wenn sie sich bei APNs registriert, und muss das Token dann an ihren Anbieter weiterleiten, wie unter Konfigurieren der Remote-Benachrichtigungsunterstützung beschrieben. Der Anbieter muss das Geräte-Token in jede Push-Benachrichtigungsanforderung aufnehmen, die auf das zugeordnete Gerät abzielt. APNs verwenden das Geräte-Token, um sicherzustellen, dass die Benachrichtigung nur an die eindeutige App-Geräte-Kombination gesendet wird, für die sie bestimmt ist.
APNs können aus verschiedenen Gründen ein neues Geräte-Token ausstellen:
- Der Benutzer installiert Ihre App auf einem neuen Gerät
- Der Benutzer stellt das Gerät aus einer Sicherung wieder her
- Der Benutzer installiert das Betriebssystem neu
- Andere systemdefinierte Ereignisse
Daher müssen Apps das Geräte-Token zum Startzeitpunkt anfordern, wie in APNs-to-Device Connection Trust und Device Tokens beschrieben. Codebeispiele finden Sie unter Registrieren, um Remote-Benachrichtigungen zu erhalten.
Um HTTP / 2-basierte TLS-Sitzungen mit APNs einzurichten, müssen Sie sicherstellen, dass auf jedem Ihrer Anbieter ein GeoTrust Global CA-Stammzertifikat installiert ist. Wenn auf einem Anbieter macOS ausgeführt wird, befindet sich dieses Stammzertifikat standardmäßig im Schlüsselbund. Auf anderen Systemen erfordert dieses Zertifikat möglicherweise eine explizite Installation. Sie können dieses Zertifikat von der GeoTrust Root Certificates-Website herunterladen. Hier ist ein direkter Link zum Zertifikat.
Abbildung 1-3 zeigt die Verwendung der HTTP / 2-basierten APN-Anbieter-API zum Herstellen einer Vertrauensstellung und die Verwendung von JWT-Anbieter-Authentifizierungstoken zum Senden von Benachrichtigungen.
Abbildung 1-3 Einrichten und Verwenden einer tokenbasierten Provider-Verbindungsvertrauensstellung
Wie in Abbildung 1-3 dargestellt, funktioniert die tokenbasierte Provider-Vertrauensstellung wie folgt:
Ihr Provider fordert eine sichere Verbindung mit APNs mithilfe der TLS (Transport Layer Security) an, die in der Abbildung als Pfeil mit der Bezeichnung „TLS-Initiierung“ dargestellt ist.
APNs geben Ihrem Provider dann ein APNs-Zertifikat, das durch den nächsten Pfeil in der Abbildung dargestellt wird (mit der Bezeichnung „APNs-Zertifikat“), das Ihr Provider dann validiert.
Zu diesem Zeitpunkt wird die Verbindungsvertrauensstellung hergestellt und Ihr Anbieterserver kann tokenbasierte Remote-Push-Benachrichtigungsanforderungen an APNs senden. Jeder Benachrichtigungsanforderung, die Ihr Provider sendet, muss ein JWT-Authentifizierungstoken beigefügt sein, das in der Abbildung als Pfeil mit der Bezeichnung "Benachrichtigungs-Push" dargestellt ist.
APNs antworten auf jeden Push, der in der Abbildung als Pfeil mit der Bezeichnung "HTTP / 2-Antwort" dargestellt ist.
Einzelheiten zu den Antworten, die Ihr Provider für diesen Schritt erhalten kann, finden Sie unter HTTP / 2-Antwort von APNs.
Abbildung 1-4 zeigt die Verwendung eines von Apple ausgestellten SSL-Zertifikats, um das Vertrauen zwischen einem Anbieter und APNs herzustellen. Im Gegensatz zu Abbildung 1-3 zeigt diese Abbildung keinen Benachrichtigungs-Push selbst, sondern stoppt beim Aufbau einer TLS-Verbindung (Transport Layer Security). Im zertifikatbasierten Vertrauensschema werden Push-Benachrichtigungsanforderungen nicht authentifiziert, sondern mithilfe des zugehörigen Gerätetokens überprüft.
Abbildung 1-4 Herstellen einer zertifikatbasierten Vertrauensstellung für Anbieterverbindungen
Wie in Abbildung 1-4 dargestellt, funktioniert die zertifikatbasierte Vertrauensstellung zwischen Anbieter und APN wie folgt:
Ihr Provider fordert eine sichere Verbindung mit APNs mithilfe der TLS (Transport Layer Security) an, die in der Abbildung als Pfeil mit der Bezeichnung „TLS-Initiierung“ dargestellt ist.
APNs geben Ihrem Provider dann ein APNs-Zertifikat, das durch den nächsten Pfeil in der Abbildung dargestellt wird (mit der Bezeichnung „APNs-Zertifikat“), das Ihr Provider dann validiert.
Ihr Provider muss dann sein von Apple bereitgestelltes Provider-Zertifikat (das Sie zuvor von Ihrem Online-Entwicklerkonto erhalten haben, wie in „Generieren eines universellen APNs-Client-SSL-Zertifikats“ in der Xcode-Hilfe erläutert) an APNs zurückgesendet, das als Pfeil mit der Bezeichnung „Provider“ dargestellt ist Zertifikat."
APNs validieren dann Ihr Provider-Zertifikat und bestätigen damit, dass die Verbindungsanforderung von einem legitimen Provider stammt, und stellen Ihre TLS-Verbindung her.
Zu diesem Zeitpunkt wird die Verbindungsvertrauensstellung hergestellt und Ihr Anbieterserver kann aktivierungsbasierte Remote-Push-Benachrichtigungsanforderungen an APNs senden.
APNs-to-Device Connection Trust und Geräte-Token
Das Vertrauen zwischen APNs und jedem Gerät wird automatisch hergestellt, ohne dass Ihre App daran teilnimmt, wie in diesem Abschnitt beschrieben.
Jedes Gerät verfügt über ein kryptografisches Zertifikat und einen privaten kryptografischen Schlüssel, die vom Betriebssystem bei der ersten Geräteaktivierung bereitgestellt und im Schlüsselbund des Geräts gespeichert werden. Während der Aktivierung authentifizieren und validieren APNs die Verbindung zum Gerät basierend auf dem Zertifikat und dem Schlüssel (siehe Abbildung 6-5).
Abbildung 1-5 Herstellen einer Verbindungsvertrauensstellung zwischen einem Gerät und APNs
Wie in Abbildung 1-5 dargestellt, funktioniert die Vertrauenswürdigkeit von APNs zu Geräten wie folgt:
- Die Vertrauensaushandlung beginnt, wenn das Gerät eine TLS-Verbindung mit APNs initiiert, wie im oberen Pfeil in der Abbildung gezeigt.
- APNs geben ein APNs-Zertifikat an das Gerät zurück.
- Das Betriebssystem validiert dieses Zertifikat und sendet dann, wie im Pfeil „Gerätezertifikat“ gezeigt, das Gerätezertifikat an APNs.
- Schließlich validieren APNs, wie durch den unteren Pfeil in der Abbildung angegeben, das Gerätezertifikat und stellen so das Vertrauen her.
- Mit einer TLS-Verbindung zwischen APNs und dem Gerät können sich Apps auf dem Gerät bei APNs registrieren, um ihre app-spezifischen Gerätetoken für Remote-Benachrichtigungen zu erhalten. Ausführliche Informationen und Codebeispiele finden Sie unter Registrieren zum Empfangen von Remote-Benachrichtigungen unter Konfigurieren der Remote-Benachrichtigungsunterstützung.
Nach dem Empfang des Geräte-Tokens muss eine App eine Verbindung zum zugehörigen Anbieter der App herstellen und das Token an diesen weiterleiten. Dieser Schritt ist erforderlich, da ein Anbieter das Gerätetoken später einschließen muss, wenn er eine Benachrichtigungsanforderung an APNs sendet, die auf das Gerät abzielen. Der Code, den Sie für die Weiterleitung des Tokens schreiben, wird auch unter Registrieren zum Empfangen von Remote-Benachrichtigungen angezeigt.
Unabhängig davon, ob ein Benutzer ein Gerät zum ersten Mal aktiviert oder ob APNs ein neues Gerätetoken ausgegeben haben, ist der Vorgang ähnlich und in Abbildung 6-6 dargestellt.
Abbildung 1-6 Verwalten des Geräte-Tokens
Das Abrufen und Behandeln eines app-spezifischen Geräte-Tokens funktioniert wie folgt:
Ihre App registriert sich bei APNs für Remote-Benachrichtigungen, wie im oberen Pfeil gezeigt. Wenn die App bereits registriert ist und sich das app-spezifische Gerätetoken nicht geändert hat, gibt das System das vorhandene Token schnell an die App zurück, und dieser Vorgang fährt mit Schritt 4 fort.
Wenn ein neues Gerätetoken benötigt wird, generieren APNs eines unter Verwendung der im Gerätezertifikat enthaltenen Informationen. Es verschlüsselt das Token mit einem Token-Schlüssel und gibt es an das Gerät zurück, wie im mittleren Pfeil nach rechts gezeigt.
Das System sendet das Geräte-Token an Ihre App zurück, indem es Ihre Anwendung aufruft: didRegisterForRemoteNotificationsWithDeviceToken: delegate-Methode.
Nach Erhalt des Tokens muss Ihre App (innerhalb der Delegate-Methode) es entweder im Binär- oder Hexadezimalformat an Ihren Provider weiterleiten. Ihr Provider kann ohne dieses Token keine Benachrichtigungen an das Gerät senden. Weitere Informationen finden Sie unter Registrieren zum Empfangen von Remote-Benachrichtigungen unter Konfigurieren der Remote-Benachrichtigungsunterstützung.
WICHTIG
APNs Gerätetoken haben eine variable Länge. Codieren Sie ihre Größe nicht fest.
Wenn Ihr Provider eine Push-Benachrichtigungsanforderung an APNs sendet, enthält er ein Geräte-Token, das eine eindeutige App-Geräte-Kombination identifiziert. Dieser Schritt wird im Pfeil „Token, Payload“ zwischen dem Anbieter und den APNs in Abbildung 6-7 angezeigt. APNs entschlüsseln das Token, um die Gültigkeit der Anforderung sicherzustellen und das Zielgerät zu bestimmen. Wenn APNs feststellen, dass Absender und Empfänger legitim sind, sendet sie die Benachrichtigung an das identifizierte Gerät.
Abbildung 1-7 Remote-Benachrichtigungspfad vom Anbieter zum Gerät
Nachdem das Gerät die Benachrichtigung erhalten hat (und nach dem in Abbildung 1-7 gezeigten letzten Schritt), leitet das System die Remote-Benachrichtigung an Ihre App weiter.
Ref: Apple Push Notification Service
Schauen Sie sich hier den technischen Ablauf an: Wie implementiere ich den Apple Push Notification Service auf einer iOS-Anwendung?