PassKit v Xamarin.iOS

Aplikace iOS Wallet umožňuje uživatelům ukládat digitální průchody na svých zařízeních. Tyto průchody generují obchodníci a odesílají zákazníkovi e-mailem, adresami URL nebo vlastní aplikací pro iOS obchodníka. Tyto průchody můžou představovat různé věci, od filmových lístků po věrnostní karty až po propustky. Architektura PassKit umožňuje vývojářům interagovat programově.

Tento dokument představuje peněženku a použití rozhraní API PassKitu s Xamarin.iOS.

The Wallet stores and organizes all the passes on a phone

Požadavky

Funkce PassKitu popsané v tomto dokumentu vyžadují iOS 6 a Xcode 4.5 spolu s Xamarin.iOS 6.0.

Úvod

Klíčovým problémem, který PassKit řeší, je distribuce a správa čárových kódů. Mezi příklady, jak se aktuálně používají čárové kódy, patří:

  • Nákup filmových lístků online – Zákazníci obvykle e-mailem pošle čárový kód, který představuje jejich lístky. Tento čárový kód se vytiskne a převeze do kina, aby se naskenoval záznam.
  • Věrnostní karty – Zákazníci mají ve své peněženkě nebo kabelce řadu různých karet specifických pro obchod, pro zobrazení a kontrolu při nákupu zboží.
  • Kupóny – Kupóny se distribuují e-mailem, jako tisknutelné webové stránky, prostřednictvím poštovních schránek a čárových kódů v novinách a časopisech. Zákazníci je přinesou do obchodu pro vyhledávání, příjem zboží, služeb nebo slev ve vrácení.
  • Boarding passes – Podobá se zakoupení lístku na film.

PassKit nabízí alternativu pro každý z těchto scénářů:

  • Vstupenky na film – Po zakoupení zákazník přidá lístek události (prostřednictvím e-mailu nebo odkazu na web). Jak se blíží čas pro film, pass se automaticky objeví na zamykací obrazovce jako připomenutí a při příjezdu do kina se průchod snadno načte a zobrazí v Peněženkě pro skenování.
  • Věrnostní karty – nikoli (nebo kromě) poskytování fyzické karty, můžou obchody vydávat (e-mailem nebo po přihlášení na webu) průchod karty Obchodu. Obchod může poskytovat další funkce, jako je aktualizace zůstatku účtu při průchodu prostřednictvím nabízených oznámení a použití služeb geografické polohy, které se průchod automaticky objeví na zamykací obrazovce, když se zákazník nachází v blízkosti místa obchodu.
  • Kupóny – Kupónové průchody lze snadno vygenerovat s jedinečnými vlastnostmi, které vám pomůžou se sledováním a distribuují prostřednictvím e-mailu nebo odkazů na web. Stažené kupóny se můžou automaticky zobrazovat na zamykací obrazovce, když se uživatel blíží určitému umístění nebo k danému datu (například když se blíží datum vypršení platnosti). Vzhledem k tomu, že kupóny jsou uloženy na telefonu uživatele, jsou vždy užitečné a nejsou chybně umístěné. Kupóny můžou zákazníkům povzbuzovat ke stažení doprovodných aplikací, protože App Store odkazy je možné začlenit do passu a zvýšit tak zapojení zákazníka.
  • Projde se na palubě – po online procesu přihlášení by zákazník obdržel průchod na palubě e-mailem nebo odkazem. Doprovodná aplikace poskytovaná poskytovatelem dopravy může zahrnovat proces vracení se změnami a také umožnit zákazníkovi provádět další funkce, jako je volba svého sedadla nebo jídla. Poskytovatel přenosu může použít nabízená oznámení k aktualizaci průchodu, pokud je přenos zpožděný nebo zrušený. Jakmile se přístup k průchodu zprovozní, zobrazí se na zamykací obrazovce jako připomenutí a k zajištění rychlého přístupu k průchodu.

V jádru nabízí PassKit jednoduchý a pohodlný způsob ukládání a zobrazování čárových kódů na zařízení s iOSem. Díky dodatečné integraci zamykací obrazovky a polohy nabízí nabízená oznámení a doprovodná aplikace základ pro velmi sofistikované prodejní, lístkové a fakturační služby.

Ekosystém PassKit

PassKit není jen rozhraní API v CocoaTouchu, spíše je součástí většího ekosystému aplikací, dat a služeb, které usnadňují zabezpečené sdílení a správu čárových kódů a dalších dat. Tento diagram vysoké úrovně znázorňuje různé entity, které je možné zapojit do vytváření a používání průchodů:

This high level diagram shows the entities involved in creating and using passes

Každá část ekosystému má jasně definovanou roli:

  • Peněženka – integrovaná aplikace Apple pro iOS, která ukládá a zobrazuje průchody. Toto je jediné místo, kde jsou průchody vykresleny pro použití v reálném světě (tj. čárový kód se zobrazí spolu se všemi lokalizovanými daty v průchodu).
  • Doprovodné aplikace – aplikace pro iOS 6 vytvořené předávají poskytovatelé, aby rozšířili funkčnost těchto průchodů, jako je přidání hodnoty na kartu obchodu, změna sedadla na palubě nebo jiné funkce specifické pro firmu. Doprovodné aplikace nemusí být užitečné pro předání.
  • Váš server – zabezpečený server, kde lze vygenerovat a podepsat pro distribuci. Vaše doprovodná aplikace se může připojit k vašemu serveru, aby se vygenerovaly nové průchody nebo žádosti o aktualizace stávajících průchodů. Volitelně můžete implementovat rozhraní API webové služby, které peněženka volá za účelem aktualizace.
  • Servery APNS – Váš server má možnost informovat peněženku o aktualizacích na předání na dané zařízení pomocí služby APNS. Nasdílejte oznámení do Peněženky, které pak kontaktuje váš server s podrobnostmi o změně. Doprovodné aplikace nemusí implementovat APNS pro tuto funkci (můžou naslouchat ).PKPassLibraryDidChangeNotification
  • Conduit Apps – Aplikace, které přímo manipulují s průchody (jako jsou doprovodné aplikace), ale které mohou zlepšit jejich nástroj rozpoznáváním průchodů a povolením jejich přidání do Peněženky. Poštovní klienti, prohlížeče sociálních sítí a další aplikace pro agregaci dat můžou narazit na přílohy nebo odkazy na průchody.

Celý ekosystém vypadá složitě, takže stojí za zmínku, že některé komponenty jsou volitelné a mnohem jednodušší implementace PassKitu jsou možné.

Co je pass?

Pass je kolekce dat představujících lístek, kupón nebo kartu. Může být určen pro jedno použití jednotlivcem (a proto obsahují podrobnosti, jako je číslo letu a přidělení sedadla), nebo může mít více tokenů použití, které může sdílet libovolný počet uživatelů (například slevový kupón). Podrobný popis je k dispozici v dokumentu Apple About Pass Files .

Typy

V současné době pět podporovaných typů, které je možné rozlišit v aplikaci Peněženka rozložením a horním okrajem průchodu:

  • Lístek události – malý středník výřez.
  • Palubní průchod – zářezy na straně, ikona specifická pro dopravu lze zadat (např. autobus, vlak, letadlo).
  • Platební karta – zaokrouhlená nahoru, jako je kreditní nebo debetní karta.
  • Kupón – perforovaný podél horní části.
  • Obecný – stejný jako store card, zaokrouhlený nahoře.

Na tomto snímku obrazovky se zobrazí pět typů průchodů (v pořadí: kupón, obecný, karta obchodu, lístky na palubě a lístek události):

The five pass types are shown in this screenshot

Struktura souborů

Soubor pass je ve skutečnosti archiv ZIP s příponou .pkpass , která obsahuje některé konkrétní soubory JSON (povinné), různé soubory obrázků (volitelné) a lokalizované řetězce (také volitelné).

  • pass.json – povinné. Obsahuje všechny informace o průchodu.
  • manifest.json – povinné. Obsahuje hodnoty hash SHA1 pro každý soubor v průchodu s výjimkou souboru podpisu a tohoto souboru (manifest.json).
  • podpis – povinný argument. Vytvořili jste soubor manifest.json podepsáním certifikátu vygenerovaného na portálu zřizování pro iOS.
  • logo.png – volitelné.
  • background.png – volitelné.
  • icon.png – volitelné.
  • Soubory lokalizovatelných řetězců – volitelné.

Adresářová struktura předávacího souboru je uvedena níže (toto je obsah archivu ZIP):

Directory structure of a pass file is shown here

pass.json

JSON je formát, protože průchody se obvykle vytvářejí na serveru – znamená to, že kód generování je na serveru nezávislý na platformě. Tři klíčové informace v každém průchodu jsou:

  • teamIdentifier – všechny odkazy, které vygenerujete, předá váš účet App Store. Tato hodnota je viditelná na portálu zřizování pro iOS.
  • passTypeIdentifier – Zaregistrujte se na portálu zřizování pro seskupení (pokud vytvoříte více typů). Například kávovar může vytvořit typ lístku karty obchodu, který umožní svým zákazníkům získat věrnostní kredity, ale také samostatný typ kuponového passu pro vytvoření a distribuci slevových kupónů. Stejná kavárna může dokonce uchovávat živé hudební události a vydávat lístek události pro ty.
  • serialNumber – jedinečný řetězec v rámci tohoto passTypeidentifier . Hodnota je neprůhlé pro Peněženku, ale je důležitá pro sledování konkrétních průchodů při komunikaci se serverem.

V každém průchodu existuje velký počet dalších klíčů JSON, z nichž je znázorněno níže:

{
   "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.
   }
}

Čárové kódy

Podporují se pouze 2D formáty: PDF417, Aztec, QR. Apple tvrdí, že 1D čárové kódy nejsou pro skenování na zadní obrazovce telefonu.

Alternativní text zobrazený pod čárovým kódem je volitelný – někteří obchodníci chtějí mít možnost číst a psát ručně.

Kódování ISO-8859-1 je nejběžnější, zkontrolujte, které kódování používají skenovací systémy, které budou číst vaše průchody.

Převýšení (zamykací obrazovka)

Existují dva typy dat, které můžou způsobit zobrazení průchodu na zamykací obrazovce:

Umístění

V Passu lze zadat až 10 míst, např. prodejny, které zákazník často navštíví, nebo umístění kina nebo letiště. Zákazník může tato umístění nastavit prostřednictvím doprovodné aplikace nebo ho poskytovatel může určit z dat o využití (pokud se shromažďuje s oprávněním zákazníka).

Když se průchod zobrazí na zamykací obrazovce, vypočítá se plot tak, aby když uživatel opustí oblast, je průchod skrytý od zamykací obrazovky. Poloměr je svázán s předáváním stylu, aby se zabránilo zneužití.

Datum a čas

V passu je možné zadat pouze jedno datum a čas. Datum a čas jsou užitečné pro aktivaci připomenutí zamykací obrazovky pro vstupy a lístky událostí.

Můžete je aktualizovat prostřednictvím nabízeného nebo přes rozhraní API PassKitu, aby bylo možné aktualizovat datum a čas v případě lístku s více použitím (například lístek na sezónu do divadla nebo sportovního komplexu).

Lokalizace

Překlad průchodu do více jazyků se podobá lokalizaci aplikace pro iOS – vytvořte adresáře specifické pro jazyk s .lproj rozšířením a umístěte lokalizované prvky dovnitř. Textové překlady by měly být zadány do pass.strings souboru, zatímco lokalizované obrázky by měly mít stejný název jako obrázek, který nahradí v kořenovém adresáři Pass.

Zabezpečení

Průchody jsou podepsané privátním certifikátem, který vygenerujete na portálu zřizování pro iOS. Postup podepsání průchodu:

  1. Vypočítejte hodnotu hash SHA1 pro každý soubor v adresáři pass (nezahrňte ani manifest.jsonsignature soubor, ani jeden z nich by v této fázi přesto neměl existovat).
  2. Zápis manifest.json jako seznam klíčů a hodnot JSON každého názvu souboru s hodnotou hash.
  3. Pomocí certifikátu podepište manifest.json soubor a zapište výsledek do souboru s názvem signature .
  4. ZIP vše nahoru a dát výsledný soubor příponu .pkpass souboru.

Vzhledem k tomu, že se k podepsání průchodu vyžaduje váš privátní klíč, měl by se tento proces provést pouze na zabezpečeném serveru, který řídíte. Nedistribuujte klíče, abyste mohli vyzkoušet a vygenerovat průchody v aplikaci.

Konfigurace a nastavení

Tato část obsahuje pokyny, které vám pomůžou nastavit podrobnosti o zřizování a vytvořit první průchod.

Zřizování PassKitu

Aby mohl průchod zadat App Store, musí být propojený s účtem pro vývojáře. To vyžaduje dva kroky:

  1. Pass musí být registrován pomocí jedinečného identifikátoru, který se nazývá ID typu pass.
  2. Musí se vygenerovat platný certifikát pro podepsání průchodu digitálním podpisem vývojáře.

Pokud chcete vytvořit ID typu pass, postupujte následovně.

Vytvoření ID typu pass

Prvním krokem je nastavení ID typu pass pro každý jiný typ průchodu, který se má podporovat. ID pass (nebo identifikátor typu pass) vytvoří jedinečný identifikátor pro pass. Toto ID použijeme k propojení průchodu s vaším účtem pro vývojáře pomocí certifikátu.

  1. V části Certifikáty, identifikátory a profily na portálu zřizování pro iOS přejděte na Identifikátory a vyberte Id typu . Pak výběrem + tlačítka vytvořte nový typ průchodu: Create a new pass type

  2. Zadejte popis (název) a identifikátor (jedinečný řetězec) pro předání. Všimněte si, že všechny ID typu pass musí začínat řetězcem pass. V tomto příkladu používáme pass.com.xamarin.coupon.banana : Provide a Description and Identifier

  3. Potvrďte ID průchodu stisknutím tlačítka Zaregistrovat .

Vygenerování certifikátu

Pokud chcete vytvořit nový certifikát pro toto ID typu pass, postupujte takto:

  1. V seznamu vyberte nově vytvořené ID pass a klikněte na Upravit : Select the new Pass ID from the list

    Pak vyberte Vytvořit certifikát... :

    Select Create Certificate

  2. Postupujte podle pokynů k vytvoření žádosti o podepsání certifikátu (CSR).

  3. Stiskněte tlačítko Pokračovat na portálu pro vývojáře a nahrajte CSR a vygenerujte certifikát.

  4. Stáhněte si certifikát a poklikáním ho nainstalujte do klíčenky.

Teď, když jsme pro toto ID typu pass vytvořili certifikát, popisuje další část postup ručního sestavení průchodu.

Další informace o zřizování pro Peněženku najdete v příručce Práce s funkcemi .

Ruční vytvoření průchodu

Teď, když jsme vytvořili typ průchodu, můžeme ručně vytvořit test na simulátoru nebo zařízení. Postup vytvoření průchodu:

  • Vytvořte adresář, který bude obsahovat předávací soubory.
  • Vytvořte soubor pass.json, který obsahuje všechna požadovaná data.
  • Zahrnout obrázky do složky (v případě potřeby).
  • Vypočítejte hodnoty hash SHA1 pro každý soubor ve složce a zapište je do souboru manifest.json.
  • Podepište soubor manifest.json se staženým souborem .p12 certifikátu.
  • Zazipujte obsah adresáře a přejmenujte ho pomocí přípony .pkpass.

V ukázkovém kódu tohoto článku jsou některé zdrojové soubory, které lze použít k vygenerování průchodu. Použijte soubory v CouponBanana.raw adresáři CreateAPassManually adresáře. K dispozici jsou následující soubory:

These files are present

Otevřete soubor pass.json a upravte JSON. Musíte aspoň aktualizovat passTypeIdentifier účet Apple Developer a teamIdentifer shodovat ho.

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

Pak je nutné vypočítat hodnoty hash pro každý soubor a vytvořit manifest.json soubor. Až budete hotovi, bude vypadat přibližně takto:

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

Dále musí být pro tento soubor vygenerován podpis pomocí certifikátu (soubor .p12), který byl vygenerován pro toto ID typu pass.

Podepisování na Macu

Stáhněte si materiály pro podporu peněženky Seed z webu Apple Downloads . signpass Pomocí nástroje můžete složku převést na průchod (tím se vypočítají také hodnoty hash SHA1 a ZIP výstupu do souboru .pkpass).

Testování

Pokud byste chtěli prozkoumat výstup těchto nástrojů (nastavením názvu souboru na .zip a jeho otevřením), uvidíte následující soubory (všimněte si přidání manifest.json souborů a signature souborů):

Examining the output of these tools

Jakmile jste podepsali, ZIPped a přejmenovali soubor (např. na BananaCoupon.pkpass) můžete přetáhnout do simulátoru, který chcete otestovat, nebo poslat e-mailem sami sobě, aby se načetl na skutečném zařízení. Měla by se zobrazit obrazovka pro přidání průchodu, například takto:

Add the pass screen

Za normálních okolností by tento proces byl automatizovaný na serveru, ale ruční vytvoření průchodu může být možnost pro malé firmy, které vytvářejí pouze kupóny, které nevyžadují podporu back-endového serveru.

Wallet

Peněženka je ústřední součástí ekosystému PassKit. Tento snímek obrazovky ukazuje prázdnou peněženku a jak vypadá seznam průchodů a jednotlivé průchody:

This screenshot shows the empty Wallet, and how the pass list and individual passes look

Mezi funkce peněženky patří:

  • Je to jediné místo, kde jsou průchody vykresleny s čárovým kódem pro skenování.
  • Uživatel může změnit nastavení aktualizací. Pokud je tato možnost povolená, můžou nabízená oznámení aktivovat aktualizace dat v passu.
  • Uživatel může povolit nebo zakázat integraci zamykací obrazovky. Pokud je tato možnost povolená, umožní se průchodu automaticky zobrazit na zamykací obrazovce na základě relevantních dat o čase a poloze vložených do průchodu.
  • Pokud je adresa URL webového serveru zadaná v předávacím kódu JSON, podporuje se zpětná strana pass-to-refresh.
  • Doprovodné aplikace je možné otevřít (nebo stáhnout), pokud je ID aplikace zadané ve formátu JSON.
  • Průchody je možné odstranit (s roztomilou animací prohazování).

Přidání průchodů do peněženky

Průchody lze do Peněženky přidat následujícími způsoby:

  • Aplikace Conduit – Tyto aplikace nechovají s průchody přímo, jednoduše načítají soubory a prezentují uživatele s možností jejich přidání do Peněženky.

  • Doprovodné aplikace – Tyto aplikace píší poskytovatelé k distribuci předplatných a nabízejí další funkce pro procházení nebo úpravy. Aplikace Xamarin.iOS mají úplný přístup k rozhraní API PassKitu a vytvářejí a manipulují s průchody. Poté lze do Peněženky přidat průchody pomocí .PKAddPassesViewController Tento proces je podrobněji popsán v části Doprovodné aplikace tohoto dokumentu.

Aplikace conduit

Aplikace Conduit jsou zprostředkující aplikace, které můžou přijímat průchody jménem uživatele, a měly by být naprogramovány tak, aby rozpoznaly svůj typ obsahu a poskytovaly funkce pro přidání do peněženky. Mezi příklady aplikací conduit patří:

  • Pošta – rozpozná přílohu jako průchod.
  • Safari – Rozpozná typ obsahu, když kliknete na odkaz pass URL.
  • Jiné vlastní aplikace – Jakákoli aplikace, která přijímá přílohy nebo otevřené odkazy (klienti sociálních médií, čtenáři pošty atd.).

Tento snímek obrazovky ukazuje, jak Pošta v iOSu 6 rozpozná přílohu a (když se dotknete) nabídek Přidat do peněženky.

This screenshot shows how Mail in iOS 6 recognizes a pass attachment

This screenshot shows how Mail offers to add a pass attachment to Wallet

Pokud vytváříte aplikaci, která by mohla být konduitem pro průchody, můžete ji rozpoznat takto:

  • Přípona souboru – .pkpass
  • Typ MIME – application/vnd.apple.pkpass
  • UTI – com.apple.pkpass

Základním provozem aplikace conduit je načtení souboru pass a volání PassKitu PKAddPassesViewController dát uživateli možnost přidat průchod do peněženky. Implementace tohoto kontroleru zobrazení je popsána v další části o doprovodných aplikacích.

Aplikace conduit nemusí být zřízeny pro konkrétní ID typu stejným způsobem jako doprovodné aplikace.

Doprovodné aplikace

Doprovodná aplikace poskytuje další funkce pro práci s průchody, včetně vytvoření průchodu, aktualizace informací spojených s passem a jinak správa průchodů přidružených k aplikaci.

Doprovodné aplikace by se neměly pokoušet duplikovat funkce Peněženky. Nejsou určeny k zobrazení průchodů pro kontrolu.

Tento zbytek této části popisuje, jak vytvořit základní doprovodnou aplikaci, která komunikuje s PassKitem.

Zřizování

Vzhledem k tomu, že Peněženka je technologie obchodu, musí být aplikace zřízena samostatně a nemůže používat profil zřizování týmu nebo ID aplikace se zástupnými kóty. Informace o vytvoření jedinečného ID aplikace a zřizovacího profilu pro aplikaci Peněženka najdete v průvodci prací s funkcemi .

Entitlements

Soubor Entitlements.plist by měl být součástí všech nedávných projektů Xamarin.iOS. Pokud chcete přidat nový soubor Entitlements.plist, postupujte podle pokynů v příručce Práce s nároky .

Pokud chcete nastavit nároky, postupujte takto:

Poklikejte na soubor Entitlements.plist na panelu řešení a otevřete editor Entitlements.plist:

Entitlements.plst editor

V části Peněženka vyberte možnost Povolit peněženku .

Enable wallet entitlement

Výchozí možností je, že vaše aplikace povolí všechny typy průchodů. Aplikaci ale můžete omezit a povolit jenom podmnožinu typů týmových průchodů. Pokud chcete tuto možnost povolit, vyberte možnost Povolit podmnožinu typů předání týmu a zadejte identifikátor typu průchodu podmnožině, kterou chcete povolit.

Ladění

Pokud máte problémy s nasazením aplikace, zkontrolujte, že používáte správný profil zřizování a že Entitlements.plist je vybraný jako soubor vlastních nároků v možnostech podepisování iPhone sady prostředků.

Pokud při nasazování dojde k této chybě:

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

pass-type-identifiers pole nároků je nesprávné (nebo neodpovídá profilu zřizování). Ověřte správnost ID typů a ID vašeho týmu.

Třídy

Pro aplikace pro přístup ke průchodům jsou k dispozici následující třídy PassKitu:

  • PKPass – instance Pass.
  • PKPassLibrary – poskytuje rozhraní API pro přístup ke průchodům na zařízení.
  • PKAdd PassViewController – Slouží k zobrazení průchodu pro uživatele uložit do své peněženky.
  • PKAddPassesViewControllerDelegate – vývojáři Xamarin.iOS

Příklad

Projděte si projekt PassLibrary v ukázkovém kódu pro tento článek. Ukazuje následující běžné funkce, které by se vyžadovaly v aplikaci Wallet Companion:

Zkontrolujte, jestli je peněženka dostupná.

Peněženka není na iPad k dispozici, takže aplikace by se měly před pokusem o přístup k funkcím PassKitu zkontrolovat.

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

Vytvoření instance předávací knihovny

Knihovna PassKit není singleton, aplikace by měly vytvářet a ukládat a ukládat instance pro přístup k rozhraní PassKit API.

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

Získání seznamu průchodů

Aplikace mohou požádat o seznam průchodů z knihovny. Tento seznam se automaticky filtruje pomocí PassKitu, takže uvidíte jenom předané lístky vytvořené pomocí ID vašeho týmu a které jsou uvedené v nárocích.

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

Všimněte si, že simulátor nefiltruje seznam vrácených průchodů, takže tato metoda by měla být vždy testována na skutečných zařízeních. Tento seznam lze zobrazit v objektu UITableView. Ukázková aplikace vypadá takto po přidání dvou kupónů:

The sample app look like this after two coupons have been added

Zobrazení předplatných

K dispozici je omezená sada informací pro vykreslování průchodů v rámci doprovodných aplikací.

V této sadě standardních vlastností můžete zobrazit seznamy průchodů, jak to dělá ukázkový kód.

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

Tento řetězec se v ukázce zobrazí jako výstraha:

The Coupon Selected alert in the sample

Můžete také použít metodu LocalizedValueForFieldKey() k načtení dat z polí v předplatných, které jste navrhli (protože budete vědět, jaká pole by měla být k dispozici). Ukázkový kód tento kód nezobrazuje.

Načtení průchodu ze souboru

Protože průchod lze přidat pouze do Peněženky s oprávněním uživatele, musí se zobrazit kontroler zobrazení, aby se mohl rozhodnout. Tento kód se používá v tlačítku Přidat v příkladu k načtení předem připraveného průchodu, který je vložený v aplikaci (měli byste ho nahradit podpisem):

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);

Předání se zobrazí s možnostmi Přidat a Zrušit :

The pass presented with Add and Cancel options

Nahrazení existujícího průchodu

Nahrazení existujícího průchodu nevyžaduje oprávnění uživatele, ale pokud průchod ještě neexistuje, selže.

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

Úprava průchodu

PKPass není proměnlivý, takže nemůžete aktualizovat předávací objekty ve vašem kódu. Pokud chcete změnit data v průchodu aplikací, musí mít přístup k webovému serveru, který může uchovávat záznam o průchodech a generovat nový soubor pass s aktualizovanými hodnotami, které může aplikace stáhnout.

Vytvoření souboru musí být provedeno na serveru, protože průchody musí být podepsané certifikátem, který musí být soukromý a zabezpečený.

Po vygenerování aktualizovaného souboru pass použijte metodu Replace k přepsání starých dat na zařízení.

Zobrazení průchodu pro kontrolu

Jak už bylo uvedeno dříve, může jen Peněženka zobrazit průchod pro kontrolu. Pass lze zobrazit pomocí OpenUrl metody, jak je znázorněno:

UIApplication.SharedApplication.OpenUrl (p.PassUrl);

Příjem oznámení o změnách

Aplikace můžou naslouchat změnám provedeným v knihovně pass pomocí .PKPassLibraryDidChangeNotification Změny můžou být způsobené oznámeními aktivujícími aktualizace na pozadí, takže je vhodné je v aplikaci poslouchat.

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

Při registraci oznámení je důležité předat instanci knihovny, protože PKPassLibrary není singleton.

Zpracování serveru

Podrobná diskuze o vytváření serverové aplikace pro podporu PassKitu je nad rámec tohoto úvodního článku.

Viz dotnet-passbook open source kódu na straně serveru C#.

Nabízená oznámení

Podrobná diskuze o používání nabízených oznámení k aktualizaci předplatných je nad rámec tohoto úvodního článku.

K implementaci rozhraní REST API definovaného společností Apple byste museli reagovat na webové požadavky z Peněženky, pokud jsou požadovány aktualizace.

Další informace najdete v průvodci aktualizací Pass společnosti Apple.

Souhrn

Tento článek představil PassKit, nastínil některé z důvodů, proč je užitečné a popsal různé části, které musí být implementovány pro úplné řešení PassKit. Popisuje kroky potřebné ke konfiguraci účtu Apple Developer tak, aby se vytvořily průchody, proces ručního předání a také postup pro přístup k rozhraním PassKit API z aplikace Xamarin.iOS.