Freigeben über


PassKit in Xamarin.iOS

Mit der iOS Wallet-App können Benutzer digitale Übergänge 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 bis hin zu Treuekarten bis hin zu Bordkarten. Das PassKit-Framework ermöglicht Entwicklern die programmgesteuerte Interaktion mit Übergaben.

In diesem Dokument wird die Brieftasche eingeführt und die PassKit-API mit Xamarin.iOS verwendet.

Die Brieftasche speichert und organisiert alle Übergänge auf einem Telefon

Anforderungen

Die in diesem Dokument beschriebenen PassKit-Features erfordern iOS 6 und Xcode 4.5 zusammen mit Xamarin.iOS 6.0.

Einführung

Das wichtigste Problem, das PassKit löst, ist die Verteilung und Verwaltung von Barcodes. Einige beispiele für die verwendung von Barcodes in der Praxis sind:

  • Online-Kauf von Kinotickets – Kunden werden in der Regel per E-Mail an einen Barcode gesendet, der ihre Tickets darstellt. Dieser Barcode wird gedruckt und zum Kino gebracht, um zur Eingabe gescannt zu werden.
  • Treuekarten – Kunden tragen eine Reihe unterschiedlicher storespezifischer Karten in ihrer Brieftasche oder Geldbörse, zum Anzeigen und Scannen, wenn sie Waren kaufen.
  • Coupons – Coupons werden per E-Mail, als druckbare Webseiten, über Briefboxen und als Barcodes in Zeitungen und Zeitschriften verteilt. Kunden bringen sie zum Scannen in ein Geschäft, um Waren, Dienstleistungen oder Rabatte im Gegenzug zu erhalten.
  • Bordkarten – Ähnlich wie beim Kauf einer Kinokarte.

PassKit bietet eine Alternative für jedes dieser Szenarien:

  • Kinotickets – Nach dem Kauf fügt der Kunde einen Ticketpass (per E-Mail oder 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 der Brieftasche angezeigt.
  • Treuekarten – Anstatt (oder zusätzlich) eine physische Karte bereitzustellen, können Stores (per E-Mail oder nach einer Websiteanmeldung) einen Store Card Pass ausgeben. Der Store kann zusätzliche Features bereitstellen, z. B. das Aktualisieren des Kontos auf dem Pass über Pushbenachrichtigungen und die Verwendung von Geolocation-Diensten, die der Pass automatisch auf dem Sperrbildschirm angezeigt werden kann, wenn sich der Kunde in der Nähe eines Standorts befindet.
  • Coupons – Coupon-Pässe können leicht mit einzigartigen Merkmalen generiert werden, um bei der Nachverfolgung zu helfen und über E-Mail- oder Websitelinks zu verteilen. Heruntergeladene Coupons können automatisch auf dem Sperrbildschirm angezeigt werden, wenn sich der Benutzer in der Nähe eines bestimmten Orts und/oder an einem bestimmten Datum befindet (z. B. wenn sich das Ablaufdatum nähert). Da die Coupons auf dem Telefon des Benutzers gespeichert sind, sind sie immer praktisch und werden nicht falsch eingefügt. Coupons können Kunden ermutigen, Begleit-Apps herunterzuladen, da App Store-Links in den Pass integriert werden können, wodurch die Interaktion mit dem Kunden erhöht wird.
  • Bordkarten – Nach einem Online-Check-In-Prozess erhält der Kunde seine Bordkarte per E-Mail oder einen Link. Eine vom Transportanbieter bereitgestellte Begleit-App kann den Check-In-Prozess umfassen und es dem Kunden ermöglichen, zusätzliche Funktionen auszuführen, z. B. den Sitz oder die Mahlzeit auszuwählen. Der Transportanbieter kann Pushbenachrichtigungen verwenden, um den Pass zu aktualisieren, wenn der Transport verzögert oder abgebrochen wird. Wenn sich die Bordzeit nähert, wird der Pass auf dem Sperrbildschirm als Erinnerung angezeigt und bietet schnellen Zugriff auf den Pass.

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 des Sperrbildschirms für Zeit und Standort bietet die Integration von Pushbenachrichtigungen und Begleitanwendungen eine Grundlage für sehr anspruchsvolle Verkaufs-, Ticket- und Abrechnungsdienste.

PassKit-Ökosystem

PassKit ist nicht nur eine API innerhalb von 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 an der Erstellung und Verwendung von Durchläufen beteiligt sind.

Jeder Teil des Ökosystems hat eine klar definierte Rolle:

  • Brieftasche – Die integrierte iOS-App von Apple, die Stores und Displays speichert und anzeigt, besteht. Dies ist der einzige Ort, an dem Pass für die Verwendung in der realen Welt gerendert wird (d. h. der Barcode wird zusammen mit allen lokalisierten Daten im Pass angezeigt).
  • Begleit-Apps – iOS 6-Apps, die von Anbietern erstellt wurden, um die Funktionalität der ausstehenden Pässe zu erweitern, z. B. das Hinzufügen von Wert zu einer Store-Karte, ändern den Sitz auf einem Bordpass oder eine andere geschäftsspezifische Funktion. Begleit-Apps sind nicht erforderlich, damit ein Pass nützlich ist.
  • Ihr Server – ein sicherer Server, auf dem Pass 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 an vorhandenen Durchläufen anzufordern. Sie können optional die Webdienst-API implementieren, die die Brieftasche aufruft, um Aktualisierungsdurchläufe zu übergeben.
  • APNS-Server – Ihr Server verfügt über die Möglichkeit, die Brieftasche über Updates auf einem bestimmten Gerät mithilfe von APNS zu benachrichtigen. Pushen Sie eine Benachrichtigung an die Brieftasche, die sich dann an Ihren Server wenden wird, um Details zur Änderung zu erhalten. Begleit-Apps müssen keine APNS für dieses Feature implementieren (sie können auf das PKPassLibraryDidChangeNotification Feature lauschen).
  • Conduit-Apps – Anwendungen, die nicht direkt Pässe bearbeiten (z. B. Begleit-Apps), die jedoch ihr Dienstprogramm verbessern können, indem Sie Pässe erkennen und es ihnen ermöglichen, sie der Brieftasche hinzuzufügen. Mail-Clients, Browser für soziale Netzwerke und andere Datenaggregations-Apps können alle auf Anlagen oder Links stoßen, die bestehen.

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, einen Coupon oder eine Karte darstellen. Es kann für eine einzelne Verwendung durch eine Person vorgesehen sein (und daher Details wie eine Flugnummer und eine Platzzuweisung enthalten) oder ein Mehrfachverwendungstoken, das von einer beliebigen Anzahl von Benutzern (z. B. einem Rabattcopon) geteilt werden kann. Eine detaillierte Beschreibung finden Sie im Dokument "Infodateien" von Apple.

Typen

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

  • Event Ticket – kleiner halbkreisförmiger Ausschnitt.
  • Boarding Pass – Notches in Side, transportspezifisches Symbol können angegeben werden (z. B. Bus, Zug, Flugzeug).
  • Store Card – abgerundet, z. B. eine Kredit- oder Debitkarte.
  • Coupon – perforiert am oberen Rand.
  • Generisch – identisch mit der Store-Karte, gerundet oben.

Die fünf Passtypen werden in diesem Screenshot angezeigt (in der Reihenfolge: Coupon, generic, Store card, boarding pass and event ticket):

Die fünf Passtypen werden in diesem Screenshot angezeigt.

Dateistruktur

Eine Passdatei ist tatsächlich ein ZIP-Archiv mit der Erweiterung PKPASS , die 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 Durchlauf.
  • 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 wird unten angezeigt (dies ist der Inhalt des ZIP-Archivs):

Die Verzeichnisstruktur einer Passdatei wird hier gezeigt.

pass.json

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

  • teamIdentifier – Mit diesen Links werden Sie alle an Ihr App Store-Konto übergeben. Dieser Wert ist im iOS-Bereitstellungsportal sichtbar.
  • passTypeIdentifier – Registrieren Sie sich im Bereitstellungsportal, um gruppenweise zu gruppieren (wenn Sie mehrere Typen erstellen). Beispielsweise kann ein Café einen Passtyp für Store-Karten erstellen, damit seine Kunden Treueguthaben verdienen können, aber auch ein separater Coupon-Passtyp zum Erstellen und Verteilen von Rabattgutscheinen. Dieser Café kann sogar Live-Musikereignisse halten und Event Ticket-Pass für diese ausstellen.
  • serialNumber – Eine eindeutige Zeichenfolge in diesem passTypeidentifier Bereich. Der Wert ist undurchsichtig für die Brieftasche, ist aber wichtig für die Nachverfolgung bestimmter Pässe bei der Kommunikation mit Ihrem Server.

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

{
   "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, auf einem hinterleuchteten Telefonbildschirm zu scannen.

Alternativtext, der unterhalb des Barcodes 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, die 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

Bis zu 10 Standorte können in einem Pass angegeben werden, z. B. Stores, die ein Kunde häufig besucht, oder den Standort eines Kinos oder Flughafens. Ein Kunde könnte diese Standorte über eine Begleit-App oder den Anbieter aus Nutzungsdaten (sofern mit der Zustimmung des Kunden gesammelt) festlegen.

Wenn der Pass auf dem Sperrbildschirm angezeigt wird, wird ein Zaun berechnet, sodass beim Verlassen des Bereichs der Pass vom Sperrbildschirm ausgeblendet wird. Der Radius ist an das Übergeben des Stils 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 hilfreich zum Auslösen von Sperrbildschirmerinnerungen für Bordkarten und Veranstaltungstickets.

Kann per Push- oder PassKit-API aktualisiert werden, sodass das Datum/die Uhrzeit im Falle eines Mehrfachverwendungstickets aktualisiert werden kann (z. B. ein Saisonticket für ein Theater oder einen Sportkomplex).

Lokalisierung

Das Übersetzen eines Durchlaufs 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 denselben Namen wie das Bild haben sollten, das sie im Pass-Stamm ersetzen.

Sicherheit

Pässe werden mit einem privaten Zertifikat signiert, das Sie im iOS-Bereitstellungsportal generieren. Die Schritte zum Signieren des Durchgangs lauten wie folgt:

  1. Berechnen Sie einen SHA1-Hash für jede Datei im Passverzeichnis (schließen Sie die manifest.json signature Datei oder Datei nicht ein, von denen keiner in dieser Phase vorhanden sein sollte).
  2. Schreiben Sie manifest.json als JSON-Schlüssel-/Wertliste jedes Dateinamens mit seinem Hash.
  3. Verwenden Sie das Zertifikat, um die manifest.json Datei zu signieren und das Ergebnis in eine Datei mit dem Namen zu signature schreiben.
  4. Zippen Sie alles nach oben, und geben Sie der resultierenden Datei eine .pkpass Dateierweiterung.

Da Ihr privater Schlüssel zum Signieren des Pass erforderlich ist, sollte dieser Vorgang nur auf einem sicheren Server erfolgen, den Sie steuern. Verteilen Sie Ihre Schlüssel NICHT, um Zuläufe in einer Anwendung zu testen und zu generieren.

Konfiguration und Setup

Dieser Abschnitt enthält Anweisungen zum Einrichten der Bereitstellungsdetails und zum Erstellen des ersten Durchlaufs.

Bereitstellen von PassKit

Damit ein Pass den App Store eingibt, muss er mit einem Entwicklerkonto verknüpft werden. 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 unterschiedlichen Passtyp einzurichten, der unterstützt wird. Die Pass-ID (oder pass Type Identifier) erstellt einen eindeutigen Bezeichner für den Pass. Wir verwenden diese ID, um den Pass mit Ihrem Entwicklerkonto mithilfe eines Zertifikats zu verknüpfen.

  1. Navigieren Sie im Abschnitt "Zertifikate, Bezeichner und Profile" des iOS-Bereitstellungsportals zu Bezeichnern , und wählen Sie Pass-Typ-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 : Bereitstellen einer Beschreibung und eines Bezeichners

  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

  2. Führen Sie die Schritte aus, um eine Zertifikatsignaturanforderung (Certificate Signing Request, CSR) zu erstellen.

  3. Drücken Sie die Schaltfläche "Weiter " im Entwicklerportal, 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 Schlüsselbund zu installieren.

Nachdem wir nun ein Zertifikat für diese Passtyp-ID erstellt haben, beschreibt der nächste Abschnitt, wie ein Pass manuell erstellt wird.

Weitere Informationen zur Bereitstellung für die Brieftasche finden Sie im Handbuch "Arbeiten mit Funktionen" .

Manuelles Erstellen eines Durchlaufs

Nachdem wir den Passtyp erstellt haben, können wir manuell einen Pass erstellen, um den Simulator oder ein Gerät zu testen. Die Schritte zum Erstellen eines Durchlaufs lauten wie folgt:

  • Erstellen Sie ein Verzeichnis, das die Passdateien enthält.
  • Erstellen Sie eine pass.json Datei, die alle erforderlichen Daten enthält.
  • Bilder in Ordner einschließen (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 Zertifikat-P12-Datei.
  • Zippen Sie den Inhalt des Verzeichnisses, und benennen Sie sie mit der Erweiterung .pkpass um.

Es gibt einige Quelldateien im Beispielcode für diesen Artikel, die zum Generieren eines Durchlaufs verwendet werden können. Verwenden Sie die Dateien im CouponBanana.raw Verzeichnis des CreateAPassManually-Verzeichnisses. 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 Apple Developer-Konto aktualisieren und teamIdentifer mit ihrem Apple Developer-Konto übereinstimmen.

"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. Es sieht ungefähr so aus, wenn Sie fertig sind:

{
  "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 mit dem Zertifikat (P12-Datei) generiert werden, das für diese Passtyp-ID generiert wurde.

Signieren auf einem Mac

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

Testen

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

Untersuchen der Ausgabe dieser Tools

Nachdem Sie die Datei signiert haben, können Sie die Datei (z. B. in BananaCoupon.pkpass) in den Simulator ziehen, um sie zu testen, oder sie per E-Mail an sich selbst senden, um sie auf einem echten Gerät abzurufen. Sie sollten wie folgt einen Bildschirm zum Hinzufügen des Durchlaufs sehen:

Hinzufügen des Passbildschirms

Normalerweise wäre dieser Prozess auf einem Server automatisiert, aber die manuelle Passerstellung kann für kleine Unternehmen eine Option sein, die nur Coupons erstellen, die nicht die Unterstützung eines Back-End-Servers erfordern.

Wallet

Die Brieftasche ist das zentrale Teil des PassKit-Ökosystems. Dieser Screenshot zeigt die leere Brieftasche und wie die Passliste und einzelne Pässe aussehen:

Dieser Screenshot zeigt die leere Brieftasche und wie die Passliste und einzelne Passdurchläufe aussehen.

Zu den Features der Brieftasche gehören:

  • Es ist der einzige Ort, an dem die Pässe mit ihrem Barcode zum Scannen gerendert werden.
  • Der Benutzer kann die Einstellungen für Updates ändern. Wenn diese Option aktiviert ist, können Pushbenachrichtigungen Aktualisierungen der Daten im Pass auslösen.
  • Der Benutzer kann die Sperrbildschirmintegration aktivieren oder deaktivieren. Wenn diese Option aktiviert ist, kann der Pass automatisch auf dem Sperrbildschirm angezeigt werden, basierend auf relevanten Zeit- und Positionsdaten, die in den Pass eingebettet sind.
  • Die umgekehrte Seite des Durchlaufs unterstützt pull-to-refresh, wenn eine Webserver-URL im Pass-JSON angegeben wird.
  • Begleit-Apps können geöffnet (oder heruntergeladen) werden, wenn die ID der App im JSON-Pass angegeben wird.
  • Pässe können gelöscht werden (mit einer niedlichen Shredding-Animation).

Hinzufügen von Pässen in die Brieftasche

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

  • Conduit-Apps – Diese bearbeiten keine Übergaben direkt, sie laden einfach Passdateien und präsentieren den Benutzer mit der Möglichkeit, sie zur Brieftasche hinzuzufügen.

  • Begleit-Apps – Diese werden von Anbietern geschrieben, um Pass zu verteilen und zusätzliche Funktionen zum Durchsuchen oder Bearbeiten zu bieten. Xamarin.iOS-Anwendungen haben vollständigen Zugriff auf die PassKit-API zum Erstellen und Bearbeiten von Übergaben. Pässe können dann mithilfe der PKAddPassesViewControllerBrieftasche hinzugefügt werden. Dieser Vorgang wird im Abschnitt "Begleitanwendungen" dieses Dokuments ausführlicher beschrieben.

Conduit Applications

Conduit-Anwendungen sind Zwischen-Apps, die möglicherweise im Auftrag eines Benutzers übergeben werden, und sollten programmiert werden, um ihren Inhaltstyp zu erkennen und Funktionen bereitzustellen, die der Brieftasche hinzugefügt werden können. Beispiele für Conduit-Apps sind:

  • Mail – Erkennt Anlagen als Pass.
  • Safari – Erkennt den Übergeben-Inhaltstyp, wenn auf einen Pass-URL-Link geklickt wird.
  • Andere benutzerdefinierte Apps – Jede App, die Anlagen empfängt oder Links öffnet (Social Media-Clients, E-Mail-Leser usw.).

Dieser Screenshot zeigt, wie Mail in iOS 6 eine Passanlage erkennt und (wenn berührt) angebote zum Hinzufügen zur Brieftasche.

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

Dieser Screenshot zeigt, wie Mail-Angebote eine Passanlage zur Brieftasche hinzufügen

Wenn Sie eine App erstellen, bei der es sich um einen Durchleitungsdurchzug handeln könnte, können sie von folgenden Zwecken 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 zur Brieftasche hinzuzufügen. Die Implementierung dieses Ansichtscontrollers wird im nächsten Abschnitt zu Begleitanwendungen behandelt.

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

Begleitanwendungen

Eine Begleitanwendung bietet zusätzliche Funktionen für das Arbeiten mit Durchläufen, z. B. das Erstellen eines Pass, das Aktualisieren von Informationen, die einem Pass zugeordnet sind, und andernfalls das Verwalten von Pässen, die der Anwendung zugeordnet sind.

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

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

Bereitstellung

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

Berechtigungen

Die Datei "Entitlements.plist " sollte in allen zuletzt verwendeten Xamarin.iOS-Projekten enthalten sein. Führen Sie die Schritte im Leitfaden zum Arbeiten mit Berechtigungen aus, um eine neue Datei "Entitlements.plist " hinzuzufügen.

Gehen Sie wie folgt vor, um Berechtigungen festzulegen:

Doppelklicken Sie im Lösungspad auf die Datei "Entitlements.plist ", um den Editor "Entitlements.plist" zu öffnen:

Entitlements.plst Editor

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

Aktivieren der Brieftaschenberechtigung

Die Standardoption ist für Ihre App, um alle Passtypen zuzulassen. Es ist jedoch möglich, Ihre App einzuschränken und nur eine Teilmenge von Teamdurchlauftypen zuzulassen. Um dies zu aktivieren, wählen Sie die Teilmenge der Teamdurchlauftypen 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 die Entitlements.plist Datei "Benutzerdefinierte Berechtigungen" in den Signaturoptionen des iPhone-Bündels 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 stimmt nicht mit dem Bereitstellungsprofil überein). Überprüfen Sie, ob 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 – Eine Instanz eines Pass.
  • PKPassLibrary – Stellt die API für den Zugriff auf die Übergänge auf dem Gerät bereit.
  • PKAddPassesViewController – Wird verwendet, um einen Pass anzuzeigen, damit der Benutzer in seiner Brieftasche speichern kann.
  • PKAddPassesViewControllerDelegate – Xamarin.iOS-Entwickler

Beispiel

Lesen Sie das PassLibrary-Projekt im Beispiel für diesen Artikel. Es veranschaulicht die folgenden allgemeinen Funktionen, die in einer Brieftaschen-Begleitanwendung erforderlich wären:

Überprüfen, ob die Brieftasche 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 Instanzen für den Zugriff auf die PassKit-API.

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

Abrufen einer Liste von Pässen

Anwendungen können eine Liste der Durchläufe aus der Bibliothek anfordern. Diese Liste wird automatisch nach PassKit gefiltert, sodass Sie nur Pässe 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 Pässe nicht filtert, daher sollte diese Methode immer auf realen Geräten getestet werden. 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 Pässen

Für das Rendern von Übergängen in Begleit-Apps steht eine begrenzte Menge von Informationen zur Verfügung.

Wählen Sie aus dieser Reihe von Standardeigenschaften aus, um Listen mit Durchläufen anzuzeigen, wie der Beispielcode tut.

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 als Warnung im Beispiel angezeigt:

Die Coupon Selected-Warnung im Beispiel

Sie können die LocalizedValueForFieldKey() Methode auch verwenden, um Daten aus Feldern in den Läufen abzurufen, die Sie entworfen haben (da Sie wissen, welche Felder vorhanden sein sollen). Der Beispielcode zeigt dies nicht an.

Laden eines Pass 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 dies durch eine von Ihnen signierte 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 den Optionen "Hinzufügen" und "Abbrechen " angezeigt:

Der Pass, der den Optionen

Ersetzen eines vorhandenen Passs

Durch das Ersetzen eines vorhandenen Durchlaufs ist die Berechtigung des Benutzers nicht erforderlich, tritt jedoch ein Fehler auf, wenn der Pass noch nicht vorhanden ist.

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

Bearbeiten eines Passes

PKPass ist nicht änderbar, sodass Sie keine Passobjekte in Ihrem Code aktualisieren können. Zum Ändern der Daten in einem Pass muss eine Anwendung Zugriff auf einen Webserver haben, der einen Datensatz von Durchläufen behalten und eine neue Passdatei mit aktualisierten Werten generieren kann, die von der Anwendung heruntergeladen werden können.

Die Dateierstellung muss auf einem Server erfolgen, da Die Übergaben mit einem Zertifikat signiert werden müssen, das privat und sicher gehalten werden muss.

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

Anzeigen eines Pass zum Scannen

Wie bereits erwähnt, kann nur eine Brieftasche einen Pass zum Scannen anzeigen. Ein Pass kann mithilfe der OpenUrl Methode wie gezeigt angezeigt werden:

UIApplication.SharedApplication.OpenUrl (p.PassUrl);

Empfangen von Benachrichtigungen über Änderungen

Anwendungen können auf Änderungen lauschen, die an der Passbibliothek vorgenommen werden, mithilfe der PKPassLibraryDidChangeNotification. Änderungen können durch Benachrichtigungen verursacht werden, die Updates im Hintergrund auslösen, daher empfiehlt es sich, sie in Ihrer App zu überwachen.

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, eine Bibliotheksinstanz beim Registrieren für die Benachrichtigung zu übergeben, da PKPassLibrary kein Singleton ist.

Serververarbeitung

Eine ausführliche Erläuterung der Erstellung einer Serveranwendung zur Unterstützung von PassKit liegt außerhalb des Rahmens dieses Einführungsartikels.

Siehe dotnet-passbook open source C#-serverseitiger Code.

Pushbenachrichtigungen

Eine ausführliche Erläuterung der Verwendung von Pushbenachrichtigungen zu Updatedurchläufen geht über den Rahmen dieses Einführungsartikels hinaus.

Sie müssen die REST-ähnliche API implementieren, die von Apple definiert wird, um auf Webanforderungen aus der Brieftasche zu reagieren, wenn Updates erforderlich sind.

Weitere Informationen finden Sie im Leitfaden zum Aktualisieren eines Passes von Apple.

Zusammenfassung

In diesem Artikel wurde PassKit vorgestellt, einige der Gründe, warum es nützlich ist und die verschiedenen Teile beschrieben, die für eine vollständige PassKit-Lösung implementiert werden müssen. Es wurde beschrieben, welche Schritte erforderlich sind, um Ihr Apple Developer-Konto zum Erstellen von Läufen zu konfigurieren, der Prozess zum manuellen Ausführen eines Passvorgangs und zum Zugreifen auf die PassKit-APIs aus einer Xamarin.iOS-Anwendung.