Pushbenachrichtigungen in iOS
Wichtig
Die Informationen in diesem Abschnitt beziehen sich auf iOS 9 und früher, es wurde hier gelassen, um ältere iOS-Versionen zu unterstützen. Informationen zu iOS 10 und höher finden Sie im Leitfaden zum Benutzerbenachrichtigungsframework zur Unterstützung von lokalen und Remotebenachrichtigungen auf einem iOS-Gerät.
Pushbenachrichtigungen sollten kurz gehalten werden und nur genügend Daten enthalten, um die mobile Anwendung darüber zu informieren, dass sie sich an die Serveranwendung für ein Update wenden sollte. Wenn beispielsweise neue E-Mails eingehen, benachrichtigt die Serveranwendung nur die mobile Anwendung, dass neue E-Mails eingegangen sind. Die Benachrichtigung würde die neue E-Mail nicht selbst enthalten. Die mobile Anwendung ruft dann die neuen E-Mails nach Bedarf vom Server ab.
Im Zentrum von Pushbenachrichtigungen in iOS befindet sich der Apple Push Notification Gateway Service (APNS). Dies ist ein Von Apple bereitgestellter Dienst, der für das Weiterleiten von Benachrichtigungen von einem Anwendungsserver an iOS-Geräte verantwortlich ist. Die folgende Abbildung zeigt die Pushbenachrichtigungstopologie für iOS:
Remotebenachrichtigungen selbst sind JSON-formatierte Zeichenfolgen, die dem Format und den Protokollen entsprechen, die im Abschnitt Benachrichtigungsnutzlast des Programmierhandbuchs für lokale und Pushbenachrichtigungen in der iOS-Entwicklerdokumentation angegeben sind.
Apple Standard unterstützt zwei ApNS-Umgebungen: eine Sandbox und eine Produktionsumgebung. Die Sandbox-Umgebung ist für Tests während der Entwicklungsphase vorgesehen und finden Sie unter gateway.sandbox.push.apple.com
TCP-Port 2195. Die Produktionsumgebung soll in Anwendungen verwendet werden, die bereitgestellt wurden und unter gateway.push.apple.com
TCP-Port 2195 zu finden sind.
Anforderungen
Pushbenachrichtigungen müssen die folgenden Regeln beachten, die von der Architektur von APNS vorgegeben werden:
- 256 Byte-Nachrichtenbeschränkung – Die gesamte Nachrichtengröße der Benachrichtigung darf 256 Byte nicht überschreiten.
- Keine Bestätigung des Belegs – APNS stellt dem Absender keine Benachrichtigung bereit, dass eine Nachricht sie an den vorgesehenen Empfänger gesendet hat. Wenn das Gerät nicht erreichbar ist und mehrere sequenzielle Benachrichtigungen gesendet werden, gehen alle Benachrichtigungen außer den letzten Benachrichtigungen verloren. Nur die letzte Benachrichtigung wird an das Gerät übermittelt.
- Jede Anwendung erfordert ein sicheres Zertifikat – Die Kommunikation mit APNS muss über SSL erfolgen.
Erstellen und Verwenden von Zertifikaten
Jede der Umgebungen, die im vorherigen Abschnitt Erwähnung wurden, benötigen ein eigenes Zertifikat. In diesem Abschnitt wird beschrieben, wie Sie ein Zertifikat erstellen, es einem Bereitstellungsprofil zuordnen und dann ein Zertifikat für den Austausch persönlicher Informationen für die Verwendung mit PushSharp erhalten.
Um ein Zertifikat zu erstellen, wechseln Sie auf der Website von Apple zum iOS-Bereitstellungsportal, wie im folgenden Screenshot gezeigt (beachten Sie das Menüelement "App-IDs" auf der linken Seite):
Navigieren Sie als Nächstes zum Abschnitt "App-ID", und erstellen Sie eine neue App-ID, wie im folgenden Screenshot gezeigt:
Wenn Sie auf die + Schaltfläche klicken, können Sie die Beschreibung und einen Bündelbezeichner für die App-ID eingeben, wie im nächsten Screenshot gezeigt:
Stellen Sie sicher, dass Sie explizite App-ID auswählen und dass der Bündelbezeichner nicht mit einer
*
Endung endet. Dadurch wird ein Bezeichner erstellt, der für mehrere Anwendungen geeignet ist, und Pushbenachrichtigungszertifikate müssen für eine einzelne Anwendung verwendet werden.Wählen Sie unter App Services Pushbenachrichtigungen aus:
Und drücken Sie "Übermitteln" , um die Registrierung der neuen App-ID zu bestätigen:
Als Nächstes müssen Sie das Zertifikat für die App-ID erstellen. Navigieren Sie in der linken Navigationsleiste zu "Zertifikate > alle ", und wählen Sie die
+
Schaltfläche aus, wie im folgenden Screenshot gezeigt:Wählen Sie aus, ob Sie ein Entwicklungs- oder Produktionszertifikat verwenden möchten:
Wählen Sie dann die neue App-ID aus, die wir gerade erstellt haben:
Dadurch werden Anweisungen angezeigt, die Sie durch den Prozess des Erstellens einer Zertifikatsignaturanforderung mithilfe der Anwendung für den Schlüsselbundzugriff auf Ihrem Mac führen.
Nachdem das Zertifikat erstellt wurde, muss es als Teil des Buildprozesses verwendet werden, um die Anwendung zu signieren, damit es sich bei APNs registrieren kann. Dies erfordert das Erstellen und Installieren eines Bereitstellungsprofils, das das Zertifikat verwendet.
Um ein Entwicklungsbereitstellungsprofil zu erstellen, navigieren Sie zum Abschnitt "Bereitstellungsprofile ", und führen Sie die Schritte zum Erstellen aus, indem Sie die soeben erstellte App-ID verwenden.
Nachdem Sie das Bereitstellungsprofil erstellt haben, öffnen Sie Xcode Organizer , und aktualisieren Sie es. Wenn das von Ihnen erstellte Bereitstellungsprofil nicht angezeigt wird, ist es möglicherweise erforderlich, das Profil aus dem iOS-Bereitstellungsportal herunterzuladen und manuell zu importieren. Der folgende Screenshot zeigt ein Beispiel für den Organisator mit dem hinzugefügten Bereitstellungsprofil:
An diesem Punkt müssen wir das Xamarin.iOS-Projekt so konfigurieren, dass dieses neu erstellte Bereitstellungsprofil verwendet wird. Dies erfolgt über das Dialogfeld "Project-Optionen " unter der Registerkarte "Signatur des iOS-Bündels", wie im folgenden Screenshot gezeigt:
An diesem Punkt ist die Anwendung für die Arbeit mit Pushbenachrichtigungen konfiguriert. Für das Zertifikat sind jedoch noch einige weitere Schritte erforderlich. Dieses Zertifikat ist im DER-Format, das nicht mit PushSharp kompatibel ist, das ein PKCS12-Zertifikat (Personal Information Exchange) erfordert. Führen Sie die folgenden letzten Schritte aus, um das Zertifikat so zu konvertieren, dass es von PushSharp verwendet werden kann:
- Laden Sie die Zertifikatdatei herunter – Melden Sie sich beim iOS-Bereitstellungsportal an, wählen Sie die Registerkarte "Zertifikate" aus, wählen Sie das Zertifikat aus, das dem richtigen Bereitstellungsprofil zugeordnet ist, und wählen Sie "Herunterladen" aus.
- Open Keychain Access – Dies ist eine GUI-Schnittstelle zum Kennwortverwaltungssystem in OS X.
- Zertifikat importieren – Wenn das Zertifikat noch nicht installiert ist, Datei... Elemente aus dem Schlüsselbund-Access-Menü importieren. Navigieren Sie zu dem oben exportierten Zertifikat, und wählen Sie es aus.
- Exportieren Sie das Zertifikat – Erweitern Sie das Zertifikat, damit der zugeordnete private Schlüssel sichtbar ist, klicken Sie mit der rechten Maustaste auf den Schlüssel, und wählen Sie "Exportieren" aus. Sie werden aufgefordert, einen Dateinamen und ein Kennwort für die exportierte Datei einzugeben.
An diesem Punkt sind wir mit Zertifikaten fertig. Wir haben ein Zertifikat erstellt, das verwendet wird, um iOS-Anwendungen zu signieren und dieses Zertifikat in ein Format zu konvertieren, das mit PushSharp in einer Serveranwendung verwendet werden kann. Als Nächstes sehen wir uns an, wie iOS-Anwendungen mit APNS interagieren.
Registrieren mit APNS
Bevor eine iOS-Anwendung Remotebenachrichtigungen empfangen kann, muss sie sich bei APNS registrieren. APNS generiert ein eindeutiges Gerätetoken und gibt dieses an die iOS-Anwendung zurück. Die iOS-Anwendung übernimmt dann das Gerätetoken und registriert sich dann mit dem Anwendungsserver. Sobald dies geschieht, ist die Registrierung abgeschlossen, und der Anwendungsserver pusht Benachrichtigungen an das mobile Gerät.
Theoretisch kann sich das Gerätetoken jedes Mal ändern, wenn sich eine iOS-Anwendung bei APNS registriert. In der Praxis geschieht dies jedoch nicht so oft. Als Optimierung kann eine Anwendung das neueste Gerätetoken zwischenspeichern und nur den Anwendungsserver aktualisieren, wenn es sich ändert. Das folgende Diagramm veranschaulicht den Prozess der Registrierung und das Abrufen eines Gerätetokens:
Die Registrierung mit APNS wird in der FinishedLaunching
Methode der Anwendungsdelegatklasse durch Aufrufen RegisterForRemoteNotificationTypes
des aktuellen UIApplication
Objekts behandelt. Wenn sich eine iOS-Anwendung bei APNS registriert, muss sie auch angeben, welche Arten von Remotebenachrichtigungen empfangen werden sollen. Diese Remotebenachrichtigungstypen werden in der Enumeration UIRemoteNotificationType
deklariert. Der folgende Codeausschnitt ist ein Beispiel dafür, wie eine iOS-Anwendung registrieren kann, um Remotebenachrichtigungen und Signalbenachrichtigungen zu empfangen:
if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
new NSSet ());
UIApplication.SharedApplication.RegisterUserNotificationSettings (pushSettings);
UIApplication.SharedApplication.RegisterForRemoteNotifications ();
} else {
UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
}
Die APNS-Registrierungsanforderung erfolgt im Hintergrund – wenn die Antwort empfangen wird, ruft iOS die Methode RegisteredForRemoteNotifications
in der AppDelegate
Klasse auf und übergibt das registrierte Gerätetoken. Das Token wird in einem NSData
Objekt enthalten sein. Der folgende Codeausschnitt zeigt, wie Sie das von APNS bereitgestellte Gerätetoken abrufen:
public override void RegisteredForRemoteNotifications (
UIApplication application, NSData deviceToken)
{
// Get current device token
var DeviceToken = deviceToken.Description;
if (!string.IsNullOrWhiteSpace(DeviceToken)) {
DeviceToken = DeviceToken.Trim('<').Trim('>');
}
// Get previous device token
var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");
// Has the token changed?
if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
{
//TODO: Put your own logic here to notify your server that the device token has changed/been created!
}
// Save new device token
NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
}
Wenn die Registrierung aus irgendeinem Grund fehlschlägt (z. B. das Gerät ist nicht mit dem Internet verbunden), ruft iOS die Anwendungsdelegatklasse auf FailedToRegisterForRemoteNotifications
. Der folgende Codeausschnitt zeigt, wie eine Warnung für den Benutzer angezeigt wird, der sie darüber informiert, dass die Registrierung fehlgeschlagen ist:
public override void FailedToRegisterForRemoteNotifications (UIApplication application , NSError error)
{
new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
}
Gerätetoken-Housekeeping
Gerätetoken laufen im Laufe der Zeit ab oder ändern sich. Aus diesem Grunde müssen Serveranwendungen einige Haus-sauber durchführen und diese abgelaufenen oder geänderten Token löschen. Wenn eine Anwendung als Pushbenachrichtigung an ein Gerät sendet, das über ein abgelaufenes Token verfügt, zeichnet APNS das abgelaufene Token auf und speichert es. Server können dann APNS abfragen, um herauszufinden, welche Token abgelaufen sind.
APNS, die zum Bereitstellen eines Feedbackdiensts verwendet werden – ein HTTPS-Endpunkt, der sich über das Zertifikat authentifiziert, das zum Senden von Pushbenachrichtigungen erstellt wurde, und zurückgibt, welche Token abgelaufen sind. Dies wurde von Apple veraltet und entfernt.
Stattdessen gibt es einen neuen HTTP-Statuscode für den Fall, der zuvor vom Feedbackdienst gemeldet wurde:
410 – Das Gerätetoken ist für das Thema nicht mehr aktiv.
Darüber hinaus befindet sich ein neuer timestamp
JSON-Datenschlüssel im Antworttext:
Wenn der Wert im Header ":status" 410 ist, ist der Wert dieses Schlüssels das letzte Mal, zu dem APNs bestätigt haben, dass das Gerätetoken für das Thema nicht mehr gültig war.
Beenden Sie das Pushen von Benachrichtigungen, bis das Gerät ein Token mit einem späteren Zeitstempel bei Ihrem Anbieter registriert.
Zusammenfassung
In diesem Abschnitt werden die wichtigsten Konzepte für Pushbenachrichtigungen in iOS vorgestellt. Er erläuterte die Rolle des Apple Push Notification Gateway Service (APNS). Anschließend wurde die Erstellung und Verwendung der Sicherheitszertifikate behandelt, die für APNS von wesentlicher Bedeutung sind. Schließlich wurde dieses Dokument mit einer Diskussion darüber fertig gestellt, wie Anwendungsserver die Feedbackdienste verwenden können, um die Nachverfolgung abgelaufener Gerätetoken zu beenden.