Freigeben über


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: Diese Abbildung zeigt die Topologie für Pushbenachrichtigungen 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.

  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 einen Bündelbezeichner für die App-ID ein.

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

  5. Wählen Sie unter App Services Pushbenachrichtigungen aus:

    Pushbenachrichtigungen auswählen

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

    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 "Zertifikate > 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 aus.

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

  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 "Project-Optionen " unter der Registerkarte "Signatur des iOS-Bündels", wie im folgenden Screenshot gezeigt:
    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 "Herunterladen" aus.
  2. Open Keychain Access – Dies ist eine GUI-Schnittstelle zum Kennwortverwaltungssystem in OS X.
  3. 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.
  4. 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:

In diesem Diagramm wird der Prozess der Registrierung und des Abrufens eines Gerätetokens veranschaulicht.

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