Teilen über


Pushbenachrichtigungen in iOS

Wichtig

Die Informationen in diesem Abschnitt beziehen sich auf iOS 9 und früher; sie wurden hier belassen, 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 ist 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 veranschaulicht die Pushbenachrichtigungstopologie für iOS: Diese Abbildung veranschaulicht die Topologie für Pushbenachrichtigungen für iOS-

Remotebenachrichtigungen selbst sind JSON-formatierte Zeichenfolgen, die dem format und den Protokollen entsprechen, die in Abschnitt "Benachrichtigungsnutzlast" des Handbuchs für die Programmierung von lokalen und Pushbenachrichtigungen in der iOS-Entwicklerdokumentation angegeben sind.

Apple verwaltet zwei APNS-Umgebungen: eine Sandbox- und eine Production--Umgebung. Die Sandbox-Umgebung ist für Tests während der Entwicklungsphase vorgesehen und finden Sie unter gateway.sandbox.push.apple.com auf TCP-Port 2195. Die Produktionsumgebung soll in Anwendungen verwendet werden, die bereitgestellt wurden und unter gateway.push.apple.com am 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 Empfangsbestätigung – APNS stellt dem Absender keine Benachrichtigung bereit, dass eine Nachricht den vorgesehenen Empfänger erreicht 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 im vorherigen Abschnitt erwähnten Umgebungen erfordert 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.

  1. 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):

    Das iOS-Bereitstellungsportal auf der Apples-Website

  2. Navigieren Sie als Nächstes zum Abschnitt "App-ID", und erstellen Sie eine neue App-ID, wie im folgenden Screenshot gezeigt:

    Navigieren Sie zum Abschnitt

  3. 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:

    Geben Sie die Beschreibung und eine Bundle-ID für die App-ID

  4. Achten Sie darauf, explizite App-ID auszuwählen und dass der Bundle-Identifier nicht mit einem * endet. Dadurch wird ein Bezeichner erstellt, der für mehrere Anwendungen geeignet ist, und Pushbenachrichtigungszertifikate müssen für eine einzelne Anwendung verwendet werden.

  5. Wählen Sie unter App Services Pushbenachrichtigungenaus:

    Auswählen von Pushbenachrichtigungen

  6. Und drücken Sie Absenden, um die Registrierung der neuen App-ID zu bestätigen:

    Die Registrierung der neuen App-ID bestätigen

  7. Als Nächstes müssen Sie das Zertifikat für die App-ID erstellen. Navigieren Sie in der linken Navigationsleiste zu Zertifikaten > Alle, und wählen Sie die Schaltfläche + aus, wie im folgenden Screenshot gezeigt:

    Erstellen des Zertifikats für die App-ID

  8. Wählen Sie aus, ob Sie ein Entwicklungs- oder Produktionszertifikat verwenden möchten:

    Auswählen eines Entwicklungs- oder Produktionszertifikats

  9. Wählen Sie dann die neue App-ID aus, die wir gerade erstellt haben:

    Wählen Sie die soeben erstellte neue App-ID

  10. Dadurch werden Anweisungen angezeigt, die Sie durch den Prozess des Erstellens einer Zertifikatsignaturanforderung mithilfe der Keychain Access Anwendung auf Ihrem Mac führen.

  11. 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.

  12. 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.

  13. 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:
    Dieser Screenshot zeigt ein Beispiel für den Organisator mit dem hinzugefügten Bereitstellungsprofil

  14. An diesem Punkt müssen wir das Xamarin.iOS-Projekt so konfigurieren, dass dieses neu erstellte Bereitstellungsprofil verwendet wird. Dies erfolgt über das Dialogfeld "Projektoptionen" unter der Registerkarte "iOS Bundle Signing", wie im nachfolgenden Screenshot dargestellt.
    Konfigurieren des Xamarin.iOS-Projekts für die Verwendung dieses neu erstellten Bereitstellungsprofils

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:

  1. 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 Download aus.
  2. Open Keychain Access – Dies ist eine GUI-Schnittstelle zum Kennwortverwaltungssystem in OS X.
  3. Importieren sie das Zertifikat – Wenn das Zertifikat noch nicht installiert ist, Datei... Importieren von Elementen aus dem Menü "Schlüsselbundzugriff". Navigieren Sie zu dem oben exportierten Zertifikat, und wählen Sie es aus.
  4. Exportieren des Zertifikats – 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:

Dieses Diagramm veranschaulicht den Prozess der Registrierung und das Abrufen eines Gerätetokens

Die Registrierung mit APNS wird in der FinishedLaunching-Methode der Anwendungs-Delegatklasse durchgeführt, indem RegisterForRemoteNotificationTypes für das aktuelle UIApplication-Objekt aufgerufen wird. 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 UIRemoteNotificationTypedeklariert. 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 FailedToRegisterForRemoteNotifications für die Anwendungsdelegatklasse auf. 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-Verwaltung

Gerätetoken laufen im Laufe der Zeit ab oder ändern sich. Aufgrund dieser Tatsache müssen Serveranwendungen einige Hausreinigung 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 stellte früher einen Feedbackdienst bereit – ein HTTPS-Endpunkt, der sich über das Zertifikat authentifiziert, das zum Senden von Push-Benachrichtigungen erstellt wurde, und Daten darüber zurücksendet, welche Token abgelaufen sind. Dies wurde von Apple als veraltet markiert 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 Feedback Services- verwenden können, um die Nachverfolgung abgelaufener Gerätetoken zu beenden.