Wie werden "Push" -Nachrichten von iOS an ein bestimmtes Gerät gesendet, ohne dass dieses Gerät einen Server abfragen muss?
Angenommen, ich habe eine neue Nachricht auf Facebook erhalten. Facebook benachrichtigt Apple, dass mein Gerät eine Benachrichtigung als solche erhalten soll. Aber woher weiß Apple, an welches Gerät / welche IP-Adresse die Nachricht gesendet werden soll?
Antworten:
Es war zu viel für mich, um so einen Kommentar abzugeben.
Aus der Dokumentation.
Der Apple Push Notification Service (APNs) gibt Push-Benachrichtigungen an Geräte weiter, auf denen Anwendungen registriert sind, um diese Benachrichtigungen zu erhalten. Jedes Gerät stellt eine akkreditierte und verschlüsselte IP-Verbindung mit dem Dienst her und erhält Benachrichtigungen über diese dauerhafte Verbindung. Anbieter stellen über einen dauerhaften und sicheren Kanal eine Verbindung zu APNs her und überwachen eingehende Daten, die für ihre Clientanwendungen bestimmt sind. Wenn neue Daten für eine Anwendung eintreffen, bereitet der Anbieter eine Benachrichtigung vor und sendet sie über den Kanal an APNs, wodurch die Benachrichtigung an das Zielgerät weitergeleitet wird.
Ich empfehle, die Dokumentation zu lesen, um weitere Informationen sowie Informationen zur Verwendung und Konfiguration zu erhalten. Es ist alles da.
Mitteilungen
quelle
Jedes Gerät kann mithilfe eigener eindeutiger Gerätetoken mit Daten aktualisiert werden. Dieses Bild erklärt alles. .
quelle
Ich habe eine Infografik erstellt, um den Workflow von Push-Benachrichtigungen zu erläutern. Hoffe das ist hilfreich.
quelle
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:
Für jede Remote-Benachrichtigungsanforderung, die ein Anbieter sendet, muss er:
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:
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:
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?
quelle
Das Gerät fragt den Server nicht ständig nach Push-Benachrichtigungen ab.
Betrachten Sie zur Vereinfachung, dass ein iPhone mit dem Internet verbunden ist. Beim Herstellen einer Verbindung zum Internet stellt das iPhone eine Verbindung zum Apple Push Notifications-Server her. Diese Verbindung ist eine offene Verbindung. Dies bedeutet, dass Daten vom Server auf das iPhone übertragen werden können, sobald Daten auf dem Server eintreffen.
Apple verwendet das HTTP-Protokoll nicht für Push-Benachrichtigungen. Wenn Sie jedoch das HTTP-Protokoll verstehen, ist die Methode fast ähnlich.
http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push
quelle
In diesem Artikel finden Sie eine wirklich schöne Erklärung der Push-Benachrichtigungen .
quelle