PassKit in Xamarin.iOS

Mit der iOS Wallet-App können Benutzer digitale Pässe auf ihren Geräten speichern. Diese Pässe werden von Händlern generiert und per E-Mail, URLs oder über die eigene iOS-App des Händlers an den Kunden gesendet. Diese Pässe können verschiedene Dinge darstellen, von Kinotickets über Treuekarten bis hin zu Bordkarten. Das PassKit-Framework ermöglicht Es Entwicklern, programmgesteuert mit Durchläufen zu interagieren.

In diesem Dokument wird die Wallet und die Verwendung der PassKit-API mit Xamarin.iOS vorgestellt.

Die Brieftasche speichert und organisiert alle Pässe auf einem Telefon

Anforderungen

Die in diesem Dokument erläuterten PassKit-Features erfordern iOS 6 und Xcode 4.5 sowie Xamarin.iOS 6.0.

Einführung

Das Hauptproblem, das PassKit löst, ist die Verteilung und Verwaltung von Barcodes. Beispiele für die Verwendung von Barcodes in der Praxis sind:

  • Online kaufen von Kinotickets – Kunden erhalten in der Regel per E-Mail einen Barcode, der ihre Tickets darstellt. Dieser Barcode wird gedruckt und zum Einscannen ins Kino gebracht.
  • Kundenkarten : Kunden haben eine Reihe verschiedener filialspezifischer Karten in ihrem Portemonnaie oder Portemonnaie, die beim Kauf von Waren angezeigt und gescannt werden können.
  • Coupons – Coupons werden per E-Mail, als druckbare Webseiten, über Briefkästen und als Barcodes in Zeitungen und Zeitschriften verteilt. Kunden bringen sie zum Scannen in ein Geschäft, um Im Gegenzug Waren, Dienstleistungen oder Rabatte zu erhalten.
  • Bordkarten – Ähnlich wie beim Kauf eines Kinotickets.

PassKit bietet eine Alternative für jedes dieser Szenarien:

  • Kinotickets : Nach dem Kauf fügt der Kunde einen Eventticketpass (per E-Mail oder einem Websitelink) hinzu. Wenn sich die Zeit für den Film nähert, wird der Pass automatisch auf dem Sperrbildschirm als Erinnerung angezeigt, und bei der Ankunft im Kino wird der Pass leicht abgerufen und zum Scannen in Brieftasche angezeigt.
  • Kundenkarten – Anstatt (oder zusätzlich) eine physische Karte bereitzustellen, können Geschäfte (per E-Mail oder nach der Anmeldung einer Website) einen Store Card Pass ausstellen. Der Store kann zusätzliche Funktionen bereitstellen, z. B. das Aktualisieren des Kontos im Pass über Pushbenachrichtigungen, und mithilfe von Geolocation-Diensten kann der Pass automatisch auf dem Sperrbildschirm angezeigt werden, wenn sich der Kunde in der Nähe eines Geschäftsstandorts befindet.
  • Coupons – Coupon-Pässe können leicht mit einzigartigen Merkmalen generiert werden, um bei der Nachverfolgung zu helfen, und über E-Mail oder Website-Links verteilt werden. Heruntergeladene Coupons können automatisch auf dem Sperrbildschirm angezeigt werden, wenn sich der Benutzer in der Nähe eines bestimmten Standorts und/oder an einem bestimmten Datum befindet (z. B. wenn sich das Ablaufdatum nähert). Da die Coupons auf dem Handy des Benutzers gespeichert werden, sind sie immer praktisch und werden nicht verlegt. Coupons können Kunden ermutigen, Begleit-Apps herunterzuladen, da App Store Links in den Pass integriert werden können, was die Interaktion mit dem Kunden erhöht.
  • Bordkarten : Nach einem Online-Check-in-Prozess erhält der Kunde seine Bordkarte per E-Mail oder einem Link. Eine vom Transportanbieter bereitgestellte Begleit-App kann den Check-In-Prozess enthalten und es dem Kunden auch ermöglichen, zusätzliche Funktionen wie die Auswahl seines Platzes oder seiner Mahlzeit auszuführen. Der Transportanbieter kann Pushbenachrichtigungen verwenden, um den Pass zu aktualisieren, wenn der Transport verzögert oder abgebrochen wird. Wenn sich die Einstiegszeit nähert, wird der Pass auf dem Sperrbildschirm angezeigt, um einen schnellen Zugriff auf den Pass zu ermöglichen.

Im Kern bietet PassKit eine einfache und bequeme Möglichkeit, Barcodes auf Ihrem iOS-Gerät zu speichern und anzuzeigen. Mit der zusätzlichen Integration von Zeit- und Standortsperrbildschirmen, Pushbenachrichtigungen und der Integration von Begleitanwendungen bietet es eine Grundlage für sehr anspruchsvolle Vertriebs-, Ticketing- und Abrechnungsdienste.

PassKit-Ökosystem

PassKit ist nicht nur eine API in CocoaTouch, sondern Teil eines größeren Ökosystems von Apps, Daten und Diensten, die die sichere Freigabe und Verwaltung von Barcodes und anderen Daten erleichtern. Dieses allgemeine Diagramm zeigt die verschiedenen Entitäten, die an der Erstellung und Verwendung von Durchläufen beteiligt sein können:

Dieses allgemeine Diagramm zeigt die Entitäten, die am Erstellen und Verwenden von Durchläufen beteiligt sind

Jedes Teil des Ökosystems hat eine klar definierte Rolle:

  • Wallet – Die integrierte iOS-App von Apple, die Läufe speichert und anzeigt. Dies ist der einzige Ort, an dem Durchläufe für die Verwendung in der realen Welt gerendert werden (d. h. der Barcode wird zusammen mit allen lokalisierten Daten im Pass angezeigt).
  • Begleit-Apps: iOS 6-Apps, die von Passanbietern erstellt wurden, um die Funktionalität der von ihnen ausstellenden Pässe zu erweitern, z. B. mehrwertigem Wert für einen Store Karte, Ändern des Sitzes auf einer Bordkarte oder einer anderen geschäftsspezifischen Funktion. Begleit-Apps sind nicht erforderlich, damit ein Pass nützlich ist.
  • Ihr Server : Ein sicherer Server, auf dem Durchläufe generiert und für die Verteilung signiert werden können. Ihre Begleit-App kann eine Verbindung mit Ihrem Server herstellen, um neue Durchläufe zu generieren oder Aktualisierungen für vorhandene Durchläufe anzufordern. Optional können Sie die Webdienst-API implementieren, die Wallet zum Aktualisieren von Durchläufen aufruft.
  • APNS-Server : Ihr Server kann das Wallet über Updates für ein bestimmtes Gerät mithilfe von APNS benachrichtigen. Pushen Sie eine Benachrichtigung an die Brieftasche, die dann Ihren Server kontaktiert, um Details zur Änderung zu erhalten. Begleit-Apps müssen keine APNS für dieses Feature implementieren (sie können auf die PKPassLibraryDidChangeNotification lauschen).
  • Conduit-Apps : Anwendungen, die Läufe nicht direkt bearbeiten (wie Begleit-Apps), die aber ihr Hilfsprogramm verbessern können, indem sie Pässe erkennen und sie der Brieftasche hinzufügen können. E-Mail-Clients, Browser sozialer Netzwerke und andere Datenaggregations-Apps können auf Anlagen oder Links zu Durchläufen stoßen.

Das gesamte Ökosystem sieht komplex aus, daher ist es erwähnenswert, dass einige Komponenten optional sind und viel einfachere PassKit-Implementierungen möglich sind.

Was ist ein Pass?

Ein Pass ist eine Sammlung von Daten, die ein Ticket, Gutschein oder Karte darstellen. Es kann für einen einmaligen Gebrauch durch eine Person bestimmt sein (und daher Details wie eine Flugnummer und eine Sitzplatzzuweisung enthalten) oder ein Mehrfachverwendungstoken, das von einer beliebigen Anzahl von Benutzern geteilt werden kann (z. B. ein Rabatt Gutschein). Eine ausführliche Beschreibung finden Sie im Dokument About Pass Files von Apple.

Typen

Derzeit werden fünf Typen unterstützt, die in der Wallet-App durch das Layout und den oberen Rand des Passes unterschieden werden können:

  • Event Ticket – kleiner halbkreisförmiger Ausschnitt.
  • Bordkarte – Kerben in der Seite, transportspezifisches Symbol kann angegeben werden (z. B. Bus, Zug, Flugzeug).
  • Store Card – abgerundet, z. B. ein Kredit- oder Debit-Karte.
  • Coupon – oben perforiert.
  • Generisch – identisch mit Store Card, gerundet oben.

Die fünf Passtypen sind in diesem Screenshot dargestellt (in der Reihenfolge: Gutschein, generic, Store Karte, Bordkarte und Ereignisticket):

Die fünf Passtypen sind in diesem Screenshot dargestellt.

Dateistruktur

Eine Passdatei ist tatsächlich ein ZIP-Archiv mit der Erweiterung .pkpass , das einige bestimmte JSON-Dateien (erforderlich), eine Vielzahl von Bilddateien (optional) sowie lokalisierte Zeichenfolgen (auch optional) enthält.

  • pass.json – erforderlich. Enthält alle Informationen für den Pass.
  • manifest.json – erforderlich. Enthält SHA1-Hashes für jede Datei im Pass mit Ausnahme der Signaturdatei und dieser Datei (manifest.json).
  • Signatur – erforderlich. Erstellt durch Signieren der manifest.json Datei mit dem zertifikat, das im iOS-Bereitstellungsportal generiert wurde.
  • logo.png – optional.
  • background.png – optional.
  • icon.png – optional.
  • Lokalisierbare Zeichenfolgendateien – optional.

Die Verzeichnisstruktur einer Passdatei ist unten dargestellt (dies ist der Inhalt des ZIP-Archivs):

Hier wird die Verzeichnisstruktur einer Passdatei angezeigt.

pass.json

JSON ist das Format, da Durchläufe in der Regel auf einem Server erstellt werden. Dies bedeutet, dass der Generierungscode auf dem Server plattformunabhängig ist. Die drei wichtigsten Informationen in jedem Durchgang sind:

  • teamIdentifier: Hier werden alle von Ihnen generierten Durchläufe an Ihr App Store-Konto verknüpft. Dieser Wert ist im iOS-Bereitstellungsportal sichtbar.
  • passTypeIdentifier : Registrieren Sie sich im Bereitstellungsportal, um Passläufe zu gruppieren (wenn Sie mehrere Typen erzeugen). Ein Café kann beispielsweise einen Store Karte Passtyp erstellen, damit seine Kunden Treueguthaben verdienen können, aber auch einen separaten Gutschein Passtyp zum Erstellen und Verteilen von Rabattgutscheinen. Dasselbe Café kann sogar Livemusikereignisse abhalten und Event Ticket-Pässe für diese ausstellen.
  • serialNumber : Eine eindeutige Zeichenfolge innerhalb dieses passTypeidentifier . Der Wert ist für Wallet undurchsichtig, ist aber wichtig für die Nachverfolgung bestimmter Läufe bei der Kommunikation mit Ihrem Server.

Es gibt eine große Anzahl anderer JSON-Schlüssel in jedem Pass, deren Beispiel unten gezeigt wird:

{
   "passTypeIdentifier":"com.xamarin.passkitdoc.banana",  //Type Identifier (iOS Provisioning Portal)
   "formatVersion":1,                                     //Always 1 (for now)
   "organizationName":"Xamarin",                          //The name which appears on push notifications
   "serialNumber":"12345436XYZ",                          //A number for you to identify this pass
   "teamIdentifier":"XXXAAA1234",                         //Your Team ID
   "description":"Xamarin Demo",                          //
   "foregroundColor":"rgb(54,80,255)",                    //color of the data text (note the syntax)
   "backgroundColor":"rgb(209,255,247)",                  //color of the background
   "labelColor":"rgb(255,15,15)",                         //color of label text and icons
   "logoText":"Banana ",                                  //Text that appears next to logo on top
   "barcode":{                                            //Specification of the barcode (optional)
      "format":"PKBarcodeFormatQR",                       //Format can be QR, Text, Aztec, PDF417
      "message":"FREE-BANANA",                            //What to encode in barcode
      "messageEncoding":"iso-8859-1"                      //Encoding of the message
   },
   "relevantDate":"2012-09-15T15:15Z",                    //When to show pass on screen. ISO8601 formatted.
  /* The following fields are specific to which type of pass. The name of this object specifies the type, e.g., boardingPass below implies this is a boarding pass. Other options include storeCard, generic, coupon, and eventTicket */
   "boardingPass":{
/*headerFields, primaryFields, secondaryFields, and auxiliaryFields are arrays of field object. Each field has a key, label, and value*/
      "headerFields":[          //Header fields appear next to logoText
         {
            "key":"h1-label",   //Must be unique. Used by iOS apps to get the data.
            "label":"H1-label", //Label of the field
            "value":"H1"        //The actual data in the field
         },
         {
            "key":"h2-label",
            "label":"H2-label",
            "value":"H2"
         }
      ],
      "primaryFields":[       //Appearance differs based on pass type
         {
            "key":"p1-label",
            "label":"P1-label",
            "value":"P1"
         }
      ],
      "secondaryFields":[     //Typically appear below primaryFields
         {
            "key":"s1-label",
            "label":"S1-label",
            "value":"S1"
         }
      ],
      "auxiliaryFields":[    //Appear below secondary fields
         {
            "key":"a1-label",
            "label":"A1-label",
            "value":"A1"
         }
      ],
      "transitType":"PKTransitTypeAir"  //Only present in boradingPass type. Value can
                                        //Air, Bus, Boat, or Train. Impacts the picture
                                        //that shows in the middle of the pass.
   }
}

Barcodes

Nur 2D-Formate werden unterstützt: PDF417, Aztec, QR. Apple behauptet, dass 1D-Barcodes nicht geeignet sind, um auf einem hintergrundbeleuchteten Telefonbildschirm zu scannen.

Alternativtext, der unter dem Barcode angezeigt wird, ist optional – einige Händler möchten manuell lesen/eingeben können.

ISO-8859-1-Codierung ist die am häufigsten verwendete Codierung. Überprüfen Sie, welche Codierung von den Scansystemen verwendet wird, die Ihre Durchläufe lesen.

Relevanz (Sperrbildschirm)

Es gibt zwei Arten von Daten, die dazu führen können, dass ein Pass auf dem Sperrbildschirm angezeigt wird:

Location

In einem Pass können bis zu 10 Standorte angegeben werden, z. B. Geschäfte, die ein Kunde häufig besucht, oder der Standort eines Kinos oder Flughafens. Ein Kunde kann diese Standorte über eine Begleit-App festlegen oder der Anbieter könnte sie anhand von Nutzungsdaten ermitteln (sofern er mit der Zustimmung des Kunden erfasst wird).

Wenn der Pass auf dem Sperrbildschirm angezeigt wird, wird ein Zaun berechnet, sodass beim Verlassen des Bereichs der Pass für den Sperrbildschirm ausgeblendet wird. Der Radius ist an das Passformat gebunden, um Missbrauch zu verhindern.

Datum und Uhrzeit

In einem Pass kann nur ein Datum/eine Uhrzeit angegeben werden. Das Datum und die Uhrzeit sind nützlich, um Sperrbildschirmerinnerungen für Bordkarten und Veranstaltungstickets auszulösen.

Kann per Push oder über die PassKit-API aktualisiert werden, sodass das Datum/die Uhrzeit bei einem Mehrfachticket aktualisiert werden kann (z. B. eine Dauerkarte für ein Theater oder einen Sportkomplex).

Lokalisierung

Das Übersetzen eines Passs in mehrere Sprachen ähnelt dem Lokalisieren einer iOS-Anwendung: Erstellen Sie sprachspezifische Verzeichnisse mit der .lproj Erweiterung, und platzieren Sie die lokalisierten Elemente darin. Textübersetzungen sollten in eine pass.strings Datei eingegeben werden, während lokalisierte Bilder den gleichen Namen wie das Bild haben sollten, das sie im Passstamm ersetzen.

Sicherheit

Durchläufe werden mit einem privaten Zertifikat signiert, das Sie im iOS-Bereitstellungsportal generieren. Die Schritte zum Signieren des Durchlaufs sind:

  1. Berechnen Sie einen SHA1-Hash für jede Datei im Passverzeichnis (schließen Sie die manifest.json Datei oder signature nicht ein, von denen in dieser Phase sowieso keine vorhanden sein sollte).
  2. Schreiben Sie manifest.json als JSON-Schlüssel-Wert-Liste für jeden Dateinamen mit seinem Hash.
  3. Verwenden Sie das Zertifikat, um die manifest.json Datei zu signieren und das Ergebnis in eine Datei namens signature zu schreiben.
  4. ZIPen Sie alles, und geben Sie der resultierenden Datei eine .pkpass Dateierweiterung.

Da Ihr privater Schlüssel zum Signieren des Passes erforderlich ist, sollte dieser Prozess nur auf einem sicheren Server ausgeführt werden, den Sie steuern. Verteilen Sie Ihre Schlüssel NICHT, um Zuläufe in einer Anwendung zu generieren.

Konfiguration und Setup

Dieser Abschnitt enthält Anweisungen zum Einrichten Ihrer Bereitstellungsdetails und zum Erstellen Ihres ersten Durchlaufs.

Bereitstellen von PassKit

Damit ein Pass den App Store eingeben kann, muss er mit einem Entwicklerkonto verknüpft sein. Dies erfordert zwei Schritte:

  1. Der Pass muss mit einem eindeutigen Bezeichner registriert werden, der als Passtyp-ID bezeichnet wird.
  2. Ein gültiges Zertifikat muss generiert werden, um den Pass mit der digitalen Signatur des Entwicklers zu signieren.

Gehen Sie wie folgt vor, um eine Passtyp-ID zu erstellen.

Erstellen einer Passtyp-ID

Der erste Schritt besteht darin, eine Passtyp-ID für jeden verschiedenen Zulauftyp einzurichten, der unterstützt werden soll. Die Pass-ID (oder Passtypbezeichner) erstellt einen eindeutigen Bezeichner für den Pass. Wir verwenden diese ID, um den Pass mithilfe eines Zertifikats mit Ihrem Entwicklerkonto zu verknüpfen.

  1. Navigieren Sie im Abschnitt Zertifikate, Bezeichner und Profile des iOS-Bereitstellungsportals zu Bezeichnern , und wählen Sie Pass Type IDs aus . Wählen Sie dann die + Schaltfläche aus, um einen neuen Passtyp zu erstellen: Erstellen eines neuen Passtyps

  2. Geben Sie eine Beschreibung (Name) und einen Bezeichner (eindeutige Zeichenfolge) für den Pass an. Beachten Sie, dass alle Pass-Typ-IDs mit der Zeichenfolge pass. beginnen müssen In diesem Beispiel wird folgendes verwendet pass.com.xamarin.coupon.banana : Geben Sie eine Beschreibung und einen Bezeichner an.

  3. Bestätigen Sie die Pass-ID, indem Sie die Schaltfläche Registrieren drücken.

Generieren eines Zertifikats

Gehen Sie wie folgt vor, um ein neues Zertifikat für diese Passtyp-ID zu erstellen:

  1. Wählen Sie die neu erstellte Pass-ID aus der Liste aus, und klicken Sie auf Bearbeiten: Wählen Sie die neue Pass-ID aus der Liste aus.

    Wählen Sie dann Zertifikat erstellen... aus:

    Wählen Sie Zertifikat erstellen aus.

  2. Führen Sie die Schritte zum Erstellen einer Zertifikatsignieranforderung (Certificate Signing Request, CSR) aus.

  3. Klicken Sie im Entwicklerportal auf die Schaltfläche Weiter , und laden Sie die CSR hoch, um Ihr Zertifikat zu generieren.

  4. Laden Sie das Zertifikat herunter, und doppelklicken Sie darauf, um es in Ihrem Keychain zu installieren.

Nachdem wir nun ein Zertifikat für diese Passtyp-ID erstellt haben, wird im nächsten Abschnitt beschrieben, wie ein Pass manuell erstellt wird.

Weitere Informationen zur Bereitstellung für Wallet finden Sie im Leitfaden Arbeiten mit Funktionen .

Manuelles Erstellen eines Durchlaufs

Nachdem wir nun den Passtyp erstellt haben, können wir manuell einen Pass erstellen, der auf dem Simulator oder auf einem Gerät getestet werden soll. Die Schritte zum Erstellen eines Durchlaufs sind:

  • Erstellen Sie ein Verzeichnis, das die Passdateien enthält.
  • Erstellen Sie eine Pass.json-Datei, die alle erforderlichen Daten enthält.
  • Schließen Sie Bilder in den Ordner ein (falls erforderlich).
  • Berechnen Sie SHA1-Hashes für jede Datei im Ordner, und schreiben Sie in manifest.json.
  • Signieren Sie manifest.json mit der heruntergeladenen Zertifikatdatei P12.
  • ZIPen Sie den Inhalt des Verzeichnisses, und benennen Sie sie mit der Erweiterung .pkpass um.

Der Beispielcode für diesen Artikel enthält einige Quelldateien, die zum Generieren eines Durchlaufs verwendet werden können. Verwenden Sie die Dateien im CouponBanana.raw Verzeichnis CreateAPassManually. Die folgenden Dateien sind vorhanden:

Diese Dateien sind vorhanden.

Öffnen Sie pass.json, und bearbeiten Sie den JSON-Code. Sie müssen mindestens das passTypeIdentifier und aktualisieren, teamIdentifer um Ihrem Apple Developer-Konto zu entsprechen.

"passTypeIdentifier" : "pass.com.xamarin.coupon.banana",
"teamIdentifier" : "?????????",

Anschließend müssen Sie die Hashes für jede Datei berechnen und die manifest.json Datei erstellen. Wenn Sie fertig sind, sieht es in etwa wie folgt aus:

{
  "icon@2x.png" : "30806547dcc6ee084a90210e2dc042d5d7d92a41",
  "icon.png" : "87e9ffb203beb2cce5de76113f8e9503aeab6ecc",
  "pass.json" : "c83cd1441c17ecc6c5911bae530d54500f57d9eb",
  "logo.png" : "b3cd8a488b0674ef4e7d941d5edbb4b5b0e6823f",
  "logo@2x.png" : "3ccd214765507f9eab7244acc54cc4ac733baf87"
}

Als Nächstes muss eine Signatur für diese Datei mithilfe des Zertifikats (P12-Datei) generiert werden, das für diese Passtyp-ID generiert wurde.

Anmelden auf einem Mac

Laden Sie die Wallet Seed-Supportmaterialien von der Apple Downloads-Website herunter . Verwenden Sie das signpass Tool, um Ihren Ordner in einen Durchlauf umzuwandeln (dadurch werden auch die SHA1-Hashes berechnet und die Ausgabe in eine PKPASS-Datei gezippt).

Testen

Wenn Sie die Ausgabe dieser Tools untersuchen würden (indem Sie den Dateinamen auf .zip festlegen und dann öffnen), werden die folgenden Dateien angezeigt (beachten Sie das Hinzufügen der manifest.json Dateien und signature ):

Untersuchen der Ausgabe dieser Tools

Nachdem Sie die Datei signiert, ZIPped und umbenannt haben (z. B. in BananaCoupon.pkpass), können Sie sie zum Testen in den Simulator ziehen oder sie per E-Mail an sich selbst senden, um sie auf einem echten Gerät abzurufen. Es sollte ein Bildschirm zum Hinzufügen des Durchlaufs wie folgt angezeigt werden:

Hinzufügen des Passbildschirms

Normalerweise wird dieser Prozess auf einem Server automatisiert, aber die manuelle Passerstellung kann eine Option für kleine Unternehmen sein, die nur Coupons erstellen, für die keine Unterstützung eines Back-End-Servers erforderlich ist.

Wallet

Wallet ist das zentrale Element des PassKit-Ökosystems. Dieser Screenshot zeigt die leere Brieftasche und das Aussehen der Passliste und der einzelnen Pässe:

Dieser Screenshot zeigt die leere Brieftasche und das Aussehen der Passliste und der einzelnen Pässe.

Zu den Features von Wallet gehören:

  • Es ist die einzige Stelle, an der Durchläufe mit ihrem Barcode zum Scannen gerendert werden.
  • Benutzer können die Einstellungen für Updates ändern. Wenn diese Option aktiviert ist, können Pushbenachrichtigungen Updates für die Daten im Pass auslösen.
  • Der Benutzer kann die Sperrbildschirmintegration aktivieren oder deaktivieren. Wenn diese Option aktiviert ist, kann der Pass basierend auf den im Pass eingebetteten relevanten Zeit- und Standortdaten automatisch auf dem Sperrbildschirm angezeigt werden.
  • Die Umgekehrte Seite des Durchlaufs unterstützt Pull-to-Refresh, wenn eine Web-Server-URL im Pass-JSON angegeben wird.
  • Begleit-Apps können geöffnet (oder heruntergeladen) werden, wenn die ID der App im Pass-JSON angegeben wird.
  • Durchläufe können gelöscht werden (mit einer niedlichen Zerkleinerungsanimation).

Hinzufügen von Pässen in die Brieftasche

Pässe können der Brieftasche auf folgende Weise hinzugefügt werden:

  • Conduit-Apps : Diese bearbeiten Durchläufe nicht direkt, sie laden einfach Passdateien und bieten dem Benutzer die Möglichkeit, sie zur Brieftasche hinzuzufügen.

  • Begleit-Apps : Diese werden von Anbietern geschrieben, um Pässe zu verteilen und zusätzliche Funktionen zum Durchsuchen oder Bearbeiten dieser zu bieten. Xamarin.iOS-Anwendungen haben vollständigen Zugriff auf die PassKit-API, um Durchläufe zu erstellen und zu bearbeiten. Pässe können dann der Brieftasche hinzugefügt werden, indem Sie verwenden PKAddPassesViewController. Dieser Prozess wird im Abschnitt Begleitanwendungen dieses Dokuments ausführlicher beschrieben.

Conduit-Anwendungen

Conduit-Anwendungen sind Zwischenanwendungen, die möglicherweise Pässe im Auftrag eines Benutzers erhalten und so programmiert werden sollten, dass sie ihren Inhaltstyp erkennen und Funktionen bereitstellen, die der Brieftasche hinzugefügt werden können. Beispiele für Conduit-Apps sind:

  • E-Mail : Erkennt die Anlage als Pass.
  • Safari : Erkennt den PassInhaltstyp, wenn auf einen Pass-URL-Link geklickt wird.
  • Andere benutzerdefinierte Apps : Jede App, die Anlagen oder offene Links empfängt (Social Media-Clients, E-Mail-Reader usw.).

Dieser Screenshot zeigt, wie E-Mail in iOS 6 eine Passanlage erkennt und (wenn sie berührt wird) anbietet, sie zur Brieftasche hinzufügen .

Dieser Screenshot zeigt, wie Mail in iOS 6 eine Passanlage erkennt

Dieser Screenshot zeigt, wie Mail anbietet, eine Passanlage zur Brieftasche hinzuzufügen.

Wenn Sie eine App erstellen, die ein Kanal für Pässe sein könnte, können sie von erkannt werden:

  • Dateierweiterung - .pkpass
  • MIME-Typ : application/vnd.apple.pkpass
  • UTI – com.apple.pkpass

Der grundlegende Vorgang einer Conduit-Anwendung besteht darin, die Passdatei abzurufen und PassKits PKAddPassesViewController aufzurufen, um dem Benutzer die Möglichkeit zu geben, den Pass zu seiner Brieftasche hinzuzufügen. Die Implementierung dieses Ansichtscontrollers wird im nächsten Abschnitt unter Begleitanwendungen behandelt.

Conduit-Anwendungen müssen für eine bestimmte Passtyp-ID nicht auf die gleiche Weise wie Begleitanwendungen bereitgestellt werden.

Begleitanwendungen

Eine Begleitanwendung bietet zusätzliche Funktionen zum Arbeiten mit Durchläufen, einschließlich der Erstellung eines Passs, aktualisieren von Informationen, die einem Pass zugeordnet sind, und anderweitig das Verwalten von Pässen, die der Anwendung zugeordnet sind.

Begleitanwendungen sollten nicht versuchen, die Features von Wallet zu duplizieren. Sie sind nicht für die Anzeige von Durchläufen zum Scannen vorgesehen.

In diesem weiteren Abschnitt wird beschrieben, wie Sie eine einfache Begleit-App erstellen, die mit PassKit interagiert.

Bereitstellung

Da Wallet eine Store-Technologie ist, muss die Anwendung separat bereitgestellt werden und kann kein Teambereitstellungsprofil oder eine Feldhalter-App-ID verwenden. Informationen zum Erstellen einer eindeutigen App-ID und eines Bereitstellungsprofils für die Wallet-Anwendung finden Sie im Leitfaden Arbeiten mit Funktionen .

Ansprüche

Die Entitlements.plist-Datei sollte in allen aktuellen Xamarin.iOS-Projekten enthalten sein. Führen Sie zum Hinzufügen einer neuen Entitlements.plist-Datei die Schritte im Leitfaden Arbeiten mit Berechtigungen aus .

Gehen Sie wie folgt vor, um Berechtigungen festzulegen:

Doppelklicken Sie auf die Datei Entitlements.plist im Projektmappenpad , um den Entitlements.plist-Editor zu öffnen:

Entitlements.plst-Editor

Wählen Sie im Abschnitt Brieftasche die Option Wallet aktivieren aus.

Aktivieren der Walletberechtigung

Die Standardoption ist, dass Ihre App alle Passtypen zulässt. Es ist jedoch möglich, Ihre App einzuschränken und nur eine Teilmenge von Teamdurchlauftypen zuzulassen. Um dies zu aktivieren, wählen Sie die Untermenge von Teampasstypen zulassen aus, und geben Sie den Passtypbezeichner der Teilmenge ein, die Sie zulassen möchten.

Debuggen

Wenn Sie Probleme bei der Bereitstellung Ihrer Anwendung haben, überprüfen Sie, ob Sie das richtige Bereitstellungsprofil verwenden und dass in Entitlements.plist den Optionen für die iPhone Bundle-Signatur als Datei für benutzerdefinierte Berechtigungen ausgewählt ist.

Wenn bei der Bereitstellung dieser Fehler auftritt:

Installation failed: Your code signing/provisioning profiles are not correctly configured (error: 0xe8008016)

dann ist das pass-type-identifiers Berechtigungsarray falsch (oder entspricht nicht dem Bereitstellungsprofil). Vergewissern Sie sich, dass die Passtyp-IDs und Ihre Team-ID korrekt sind.

Klassen

Die folgenden PassKit-Klassen sind für Apps für den Zugriff auf Durchläufe verfügbar:

  • PKPass – Ein instance eines Passes.
  • PKPassLibrary : Stellt die API für den Zugriff auf die Pässe auf dem Gerät bereit.
  • PKAddPassesViewController : Wird verwendet, um einen Pass anzuzeigen, durch den der Benutzer in seiner Brieftasche speichern kann.
  • PKAddPassesViewControllerDelegate – Xamarin.iOS-Entwickler

Beispiel

Lesen Sie das PassLibrary-Projekt im Beispielcode für diesen Artikel. Es werden die folgenden allgemeinen Funktionen veranschaulicht, die in einer Wallet Companion-Anwendung erforderlich wären:

Überprüfen Sie, ob das Wallet verfügbar ist.

Die Brieftasche ist auf dem iPad nicht verfügbar, daher sollten Anwendungen überprüfen, bevor sie versuchen, auf PassKit-Features zuzugreifen.

if (PKPassLibrary.IsAvailable) {
    // create an instance and do stuff...
}

Erstellen einer Passbibliotheksinstanz

Die PassKit-Bibliothek ist kein Singleton. Anwendungen sollten erstellen und speichern und instance, um auf die PassKit-API zuzugreifen.

if (PKPassLibrary.IsAvailable) {
    library = new PKPassLibrary ();
    // do stuff...
}

Abrufen einer Liste von Durchläufen

Anwendungen können eine Liste von Durchläufen von der Bibliothek anfordern. Diese Liste wird automatisch nach PassKit gefiltert, sodass Sie nur Läufe sehen können, die mit Ihrer Team-ID erstellt wurden und die in Ihren Berechtigungen aufgeführt sind.

var passes = library.GetPasses ();  // returns PKPass[]

Beachten Sie, dass der Simulator die Liste der zurückgegebenen Läufe nicht filtert, sodass diese Methode immer auf echten Geräten getestet werden sollte. Diese Liste kann in einer UITableView angezeigt werden. Die Beispiel-App sieht wie folgt aus, nachdem zwei Coupons hinzugefügt wurden:

Die Beispiel-App sieht wie folgt aus, nachdem zwei Coupons hinzugefügt wurden

Anzeigen von Durchläufen

Für das Rendern von Durchläufen in Begleit-Apps stehen nur wenige Informationen zur Verfügung.

Wählen Sie aus diesem Satz von Standardeigenschaften aus, um Listen von Durchläufen anzuzeigen, wie es im Beispielcode der Fall ist.

string passInfo =
                "Desc:" + pass.LocalizedDescription
                + "\nOrg:" + pass.OrganizationName
                + "\nID:" + pass.PassTypeIdentifier
                + "\nDate:" + pass.RelevantDate
                + "\nWSUrl:" + pass.WebServiceUrl
                + "\n#" + pass.SerialNumber
                + "\nPassUrl:" + pass.PassUrl;

Diese Zeichenfolge wird im Beispiel als Warnung angezeigt:

Warnung

Sie können die LocalizedValueForFieldKey() -Methode auch verwenden, um Daten aus Feldern in den von Ihnen entworfenen Durchläufen abzurufen (da Sie wissen, welche Felder vorhanden sein sollten). Der Beispielcode zeigt dies nicht an.

Laden eines Passs aus einer Datei

Da ein Pass nur mit der Berechtigung des Benutzers zur Brieftasche hinzugefügt werden kann, muss ein Ansichtscontroller angezeigt werden, damit er entscheiden kann. Dieser Code wird in der Schaltfläche Hinzufügen im Beispiel verwendet, um einen vordefinierten Pass zu laden, der in die App eingebettet ist (Sie sollten ihn durch einen von Ihnen signierten ersetzen):

NSData nsdata;
using ( FileStream oStream = File.Open (newFilePath, FileMode.Open ) ) {
        nsdata = NSData.FromStream ( oStream );
}
var err = new NSError(new NSString("42"), -42);
var newPass = new PKPass(nsdata,out err);
var pkapvc = new PKAddPassesViewController(newPass);
NavigationController.PresentModalViewController (pkapvc, true);

Der Pass wird mit den Optionen "Hinzufügen" und "Abbrechen" angezeigt:

Der Mit den Optionen Hinzufügen und Abbrechen angezeigte Pass

Ersetzen eines vorhandenen Passes

Das Ersetzen eines vorhandenen Passes erfordert keine Berechtigung des Benutzers, schlägt jedoch fehl, wenn der Pass noch nicht vorhanden ist.

if (library.Contains (newPass)) {
     library.Replace (newPass);
}

Bearbeiten eines Passes

PKPass ist nicht veränderbar, sodass Sie pass-Objekte im Code nicht aktualisieren können. Um die Daten in einem Pass zu ändern, muss eine Anwendung Zugriff auf einen Webserver haben, der eine Aufzeichnung der Durchläufe speichern und eine neue Passdatei mit aktualisierten Werten generieren kann, die die Anwendung herunterladen kann.

Die Erstellung der Passdatei muss auf einem Server erfolgen, da die Pässe mit einem Zertifikat signiert werden müssen, das geschützt und geschützt bleiben muss.

Nachdem eine aktualisierte Passdatei generiert wurde, verwenden Sie die Replace -Methode, um die alten Daten auf dem Gerät zu überschreiben.

Anzeigen eines Durchlaufs zum Scannen

Wie bereits erwähnt, kann nur die Brieftasche einen Pass für die Überprüfung anzeigen. Ein Pass kann mit der OpenUrl -Methode wie gezeigt angezeigt angezeigt werden:

UIApplication.SharedApplication.OpenUrl (p.PassUrl);

Empfangen von Benachrichtigungen über Änderungen

Anwendungen können mithilfe von PKPassLibraryDidChangeNotificationauf Änderungen an der Passbibliothek lauschen. Änderungen können durch Benachrichtigungen verursacht werden, die Updates im Hintergrund auslösen. Daher empfiehlt es sich, in Ihrer App darauf zu lauschen.

noteCenter = NSNotificationCenter.DefaultCenter.AddObserver (PKPassLibrary.DidChangeNotification, (not) => {
    BeginInvokeOnMainThread (() => {
        new UIAlertView("Pass Library Changed", "Notification Received", null, "OK", null).Show();
        // refresh the list
        var passlist = library.GetPasses ();
        table.Source = new TableSource (passlist, library);
        table.ReloadData ();
    });
}, library);  // IMPORTANT: must pass the library in

Es ist wichtig, bei der Registrierung für die Benachrichtigung eine Bibliothek instance zu übergeben, da PKPassLibrary kein Singleton ist.

Serververarbeitung

Eine ausführliche Erläuterung des Erstellens einer Serveranwendung zur Unterstützung von PassKit sprengt den Rahmen dieses Einführungsartikels.

Siehe dotnet-passbook Open Source serverseitigen C#-Code.

Pushbenachrichtigungen

Eine ausführliche Erläuterung der Verwendung von Pushbenachrichtigungen zum Aktualisieren von Durchläufen sprengt den Rahmen dieses Einführungsartikels.

Sie müssen die von Apple definierte REST-ähnliche API implementieren, um auf Webanforderungen von Wallet zu reagieren, wenn Updates erforderlich sind.

Weitere Informationen finden Sie unter Apples Leitfaden zum Aktualisieren eines Passes .

Zusammenfassung

In diesem Artikel wurde PassKit vorgestellt, einige der Gründe beschrieben, warum es nützlich ist, und die verschiedenen Teile beschrieben, die für eine vollständige PassKit-Lösung implementiert werden müssen. Es wurden die Schritte beschrieben, die zum Konfigurieren Ihres Apple Developer-Kontos zum Erstellen von Durchläufen erforderlich sind, der Prozess zum manuellen Erstellen eines Durchlaufs sowie der Zugriff auf die PassKit-APIs von einer Xamarin.iOS-Anwendung aus.