PassKit v Xamarin.iOS
Aplikace Peněženka pro iOS umožňuje uživatelům ukládat digitální průchody na svých zařízeních. Tyto průchody vygenerují obchodníci a posílají zákazníkovi e-mailem, adresami URL nebo vlastní aplikací pro iOS daného obchodníka. Tyto průchody mohou představovat různé věci, od filmových lístků až po karty věrnosti až po palubu průchodů. Architektura PassKit umožňuje vývojářům pracovat s předáváním prostřednictvím kódu programu.
Tento dokument představuje peněženku a použití rozhraní API PassKitu s Xamarin.iOS.
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 použití čárových kódů v reálném světě patří:
- Nákup filmových lístků online – Zákazníci obvykle e-mailem e-mailem e-mailem čárový kód, který představuje jejich vstupenky. Tento čárový kód se vytiskne a převeze do kina, kde se má naskenovat vstup.
- Věrnostní karty – Zákazníci mají v peněžence nebo kabelce řadu různých karet specifických pro obchod, pro zobrazení a skenování 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 skenování, dostanou zboží, služby nebo slevy vratce.
- Boarding průchody – podobně jako nákup 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 čas pro film blíží, pass se automaticky objeví na zamykací obrazovce jako připomenutí, a při příjezdu do kina pass je snadno načten a zobrazen v Peněženka pro skenování.
- Partnerské karty – místo (nebo kromě) poskytování fyzické karty mohou obchody vydávat (e-mailem nebo po přihlášení na webu) kartu Storu. Obchod může poskytovat další funkce, jako je například aktualizace zůstatku účtu při průchodu prostřednictvím nabízených oznámení a použití služeb geografické polohy, které pass může automaticky zobrazit na zamykací obrazovce, když se zákazník nachází poblíž místa obchodu.
- Kupóny – Kupóny lze snadno generovat s jedinečnými vlastnostmi, které pomáhají se sledováním a distribuovány prostřednictvím e-mailu nebo webových odkazů. Stažené kupóny se můžou automaticky objevit na zamykací obrazovce, když se uživatel nachází poblíž konkrétního umístění nebo v daném 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 odkazy z App Storu je možné začlenit do passu a zvýšit tak zapojení zákazníka.
- Boarding pass – Po online check-inu obdrží zákazník průchod z paluby e-mailem nebo odkazem. Doprovodná aplikace poskytovaná poskytovatelem dopravy může zahrnovat proces vrácení se změnami a také umožnit zákazníkovi provádět další funkce, jako je volba sedadla nebo jídla. Poskytovatel přenosu může k aktualizaci průchodu použít nabízená oznámení, pokud je přenos zpožděný nebo zrušený. Když se přechod blíží, zobrazí se na zamykací obrazovce jako připomenutí a k zajištění rychlého přístupu k průchodu.
V jádru poskytuje PassKit jednoduchý a pohodlný způsob, jak ukládat a zobrazovat čárové kódy 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é prodeje, lístky a fakturační služby.
Ekosystém PassKit
PassKit není jen rozhraní API v CocoaTouchu, ale je součástí většího ekosystému aplikací, dat a služeb, které usnadňují bezpečné sdílení a správu čárových kódů a dalších dat. Tento diagram vysoké úrovně znázorňuje různé entity, které mohou být zapojeny do vytváření a používání průchodů:
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áváním poskytovatelům za účelem rozšíření funkcí, které vydávají, například přidání hodnoty na kartu obchodu, změna sedadla na palubě nebo jiné funkce specifické pro firmy. Doprovodné aplikace nejsou potřeba, aby byl průchod užitečný.
- Váš server – zabezpečený server, kde je možné vygenerovat průchody a podepsat pro distribuci. Vaše doprovodná aplikace se může připojit k vašemu serveru a vygenerovat nové průchody nebo požádat 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. Odešlete oznámení do peněženky, která se pak bude obrátit na váš server s podrobnostmi o změně. Doprovodné aplikace nemusí pro tuto funkci implementovat APNS (mohou naslouchat
PKPassLibraryDidChangeNotification
). - Conduit Apps – Aplikace, které přímo manipulují s průchody (jako jsou doprovodné aplikace), ale které můžou 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 jiné 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čeno 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
Aktuálně pět podporovaných typů, které lze v aplikaci Peněženka odlišit 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ě, ikonu specifickou pro dopravu lze zadat (např. autobus, vlak, letadlo).
- Karta storu – zaokrouhlená nahoru, jako je kreditní nebo debetní karta.
- Kupón – perforovaný podél horní části.
- Obecný – stejný jako karta obchodu, zaokrouhlený nahoře.
Na tomto snímku obrazovky se zobrazuje pět typů průchodů (v pořadí: kupón, obecný, karta obchodu, průchod na palubě a lístek události):
Struktura souborů
Pass file 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é) i 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 s výjimkou souboru podpisu a tohoto souboru (manifest.json).
- podpis – povinný. Vytvořili jste ho
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):
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 vám předá vygenerovaný účet z App Storu. Tato hodnota je viditelná na portálu zřizování pro iOS.
- passTypeIdentifier – Registrace na portálu zřizování pro seskupení seskupí (pokud vytvoříte více typů). Například v kavárně můžete vytvořit typ lístku karty obchodu, který umožní svým zákazníkům získávat partnerské kredity, ale také samostatný typ kupónu 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 tomto
passTypeidentifier
řetězci . Hodnota je neprůsledná pro peněženku, ale je důležitá pro sledování konkrétních průchodů při komunikaci se serverem.
Každý pass obsahuje velký počet dalších klíčů JSON, což je příklad uvedený 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 podsvícené obrazovce telefonu.
Alternativní text zobrazený pod čárovým kódem je volitelný – někteří prodejci chtějí být schopni číst nebo psát ručně.
Kódování ISO-8859-1 je nejběžnější, zkontrolujte, které kódování používají systémy skenování, které budou číst vaše průchody.
Nálevnost (zamykací obrazovka)
Existují dva typy dat, které můžou způsobit zobrazení průchodu na zamykací obrazovce:
Místo
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 jsou shromažďovány 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ázaný s předáváním stylu, aby se zabránilo zneužití.
Datum a čas
V pass je možné zadat pouze jedno datum a čas. Datum a čas jsou užitečné pro aktivaci připomenutí zamykací obrazovky pro průchody a lístky událostí.
Dá se aktualizovat prostřednictvím nabízení nebo prostřednictvím 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 rozšířením .lproj
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 pro podepsání průchodu:
- Vypočítejte hodnotu hash SHA1 pro každý soubor v adresáři pass (nezahrnujte ani
manifest.json
signature
soubor, ani jeden z nich by v této fázi přesto neměl existovat). - Zapište
manifest.json
jako seznam klíč/hodnota JSON každého názvu souboru s hodnotou hash. - Pomocí certifikátu podepište
manifest.json
soubor a zapište výsledek do souboru s názvemsignature
. - ZIP všechno 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 být tento proces proveden pouze na zabezpečeném serveru, který řídíte. NEDISTRIBUUJTE klíče k vyzkoušení a vygenerování průchodů 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 bylo možné zadat průchod do App Storu, musí být propojený s vývojářským účtem. To vyžaduje dva kroky:
- Předání musí být registrováno pomocí jedinečného identifikátoru označovaného jako ID typu pass.
- Pro podepsání průchodu digitálním podpisem vývojáře musí být vygenerován platný certifikát.
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 vývojářským účtem pomocí certifikátu.
V části Certifikáty, Identifikátory a Profily portálu pro zřizování iOS přejděte na Identifikátory a vyberte Předat ID typů . Pak výběrem + tlačítka vytvořte nový typ průchodu:
Zadejte popis (název) a identifikátor (jedinečný řetězec) pro předání. Všimněte si, že všechna ID typu pass musí začínat řetězcem
pass.
v tomto příkladu, který používámepass.com.xamarin.coupon.banana
:Potvrďte ID pass stisknutím tlačítka Zaregistrovat .
Vygenerování certifikátu
Pokud chcete vytvořit nový certifikát pro toto ID typu pass, postupujte takto:
V seznamu vyberte nově vytvořené ID pass a klikněte na Upravit :
Pak vyberte Vytvořit certifikát... :
Postupujte podle pokynů k vytvoření žádosti o podepsání certifikátu (CSR).
Stiskněte tlačítko Pokračovat na portálu pro vývojáře a nahrajte CSR a vygenerujte certifikát.
Stáhněte si certifikát a poklikáním ho nainstalujte do klíčenky.
Teď, když jsme vytvořili certifikát pro toto ID typu pass, popisuje následující část, jak sestavit předání ručně.
Další informace o zřizování pro peněženku najdete v průvodci prací s funkcemi .
Ruční vytvoření průchodu
Teď, když jsme vytvořili typ průchodu, můžeme ručně vytvořit průchod pro testování na simulátoru nebo zařízení. Postup vytvoření průchodu:
- Vytvořte adresář, který bude obsahovat předávací soubory.
- Vytvořte pass.json soubor, 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 zapisujte do manifest.json.
- Podepište manifest.json staženým souborem .p12 certifikátu.
- Zazipujte obsah adresáře a přejmenujte ho s příponou .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. Existují následující soubory:
Otevřete pass.json a upravte JSON. Musíte aspoň aktualizovat passTypeIdentifier
účet Apple Developer a teamIdentifer
přizpůsobit ho.
"passTypeIdentifier" : "pass.com.xamarin.coupon.banana",
"teamIdentifier" : "?????????",
Pak musíte 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 (souboru .p12), který byl vygenerován pro toto ID typu pass.
Podepisování na Macu
Stáhněte si materiály pro podporu peněženky z webu Apple Downloads. signpass
Pomocí tohoto nástroje převést složku na průchod (tím se také vypočítají 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), zobrazí se následující soubory (všimněte si přidání manifest.json
souborů a signature
souborů):
Jakmile budete podepsáni, ZIPped a přejmenujete soubor (např. na BananaCoupon.pkpass
) můžete ho přetáhnout do simulátoru, abyste ho otestovali, nebo ho pošlete e-mailem, 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:
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í jenom kupóny, které nevyžadují podporu back-endového serveru.
Peněženka
Peněženka je ústřední součástí ekosystému PassKit. Tento snímek obrazovky ukazuje prázdnou peněženku a způsob, jakým vypadá seznam průchodů a jednotlivé průchody:
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 rámci předávání.
- Uživatel může povolit nebo zakázat integraci zamykací obrazovky. Pokud je tato možnost povolená, umožní se průchod automaticky objevit na zamykací obrazovce v závislosti na relevantním čase a datech o poloze vložených do průchodu.
- Pokud je adresa URL webového serveru zadaná v předávacím kódu JSON, podporuje zadní 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í shredding).
Přidání průchodů do peněženky
Průchody lze přidat do peněženky následujícími způsoby:
Conduit Apps – Tyto neprocházejí 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 průchodů a nabízejí další funkce pro procházení nebo úpravy. Aplikace Xamarin.iOS mají úplný přístup k rozhraní API PassKitu k vytváření a manipulaci s průchody. Průchody lze pak přidat do peněženky
PKAddPassesViewController
pomocí . Tento proces je podrobněji popsán v části Doprovodné aplikace tohoto dokumentu.
Conduit Applications
Aplikace Conduit jsou zprostředkující aplikace, které můžou přijímat předané jménem uživatele, a měly by být naprogramované 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 pass.
- Safari – Rozpozná předávací typ obsahu při kliknutí na předávací odkaz URL.
- Jiné vlastní aplikace – Všechny aplikace, které přijímají 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.
Pokud vytváříte aplikaci, která by mohla být konduit pro průchody, je možné je 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í předávacího souboru a volání PassKitu PKAddPassesViewController
dát uživateli možnost přidat průchod do své 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 pass 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 skenování.
Zbývající část 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ým znakem. 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.
Nároky
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 průvodci Práce s nároky .
Chcete-li nastavit nároky, postupujte takto:
Poklikáním na soubor Entitlements.plist v oblasti řešení otevřete editor Entitlements.plist:
V části Peněženka vyberte možnost Povolit peněženku.
Výchozí možností je, že vaše aplikace povolí všechny typy průchodů. Aplikaci je ale možné omezit a povolit jenom podmnožinu typů passů týmu. Chcete-li tuto možnost povolit, vyberte možnost Povolit podmnožinu typů průchodů týmu a zadejte identifikátor typu průchodu podmnožinu, kterou chcete povolit.
Ladění
Pokud máte problémy s nasazením aplikace, zkontrolujte, že používáte správný zřizovací profil a že Entitlements.plist
je vybraný jako soubor vlastních nároků v možnostech podepisování balíčků iPhone.
Pokud při nasazování dojde k této chybě:
Installation failed: Your code signing/provisioning profiles are not correctly configured (error: 0xe8008016)
pole pass-type-identifiers
nároků je nesprávné (nebo neodpovídá profilu zřizování). Ověřte správnost ID typu pass 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 k průchodům na zařízení.
- PKAdd PassViewController – slouží k zobrazení průchodu pro uživatele k uložení do své peněženky.
- PKAddPassesViewControllerDelegate – vývojáři Xamarin.iOS
Příklad
V ukázce tohoto článku si projděte projekt PassLibrary. Ukazuje následující běžné funkce, které by se vyžadovaly v aplikaci Průvodce peněženkou:
Zkontrolujte, jestli je peněženka k dispozici.
Peněženka není na iPadu dostupná, 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í jediné, aplikace by měly vytvářet a ukládat a ukládat instance pro přístup k rozhraní API PassKitu.
if (PKPassLibrary.IsAvailable) {
library = new PKPassLibrary ();
// do stuff...
}
Získání seznamu průchodů
Aplikace můžou požádat o seznam průchodů z knihovny. Tento seznam se automaticky vyfiltruje pomocí PassKitu, takže můžete zobrazit jenom průchody vytvořené pomocí ID vašeho týmu a které jsou uvedené ve vašich 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 uiTableView. Ukázková aplikace vypadá takto po přidání dvou kupónů:
Zobrazení průchodů
K dispozici je omezená sada informací pro vykreslování průchodů v doprovodných aplikacích.
Vyberte si z této sady standardních vlastností, abyste zobrazili 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:
Metodu LocalizedValueForFieldKey()
můžete také použít k načtení dat z polí v předplatných, která jste navrhli (protože budete vědět, která pole mají být k dispozici). Příklad kódu toto nezobrazuje.
Načtení průchodu ze souboru
Vzhledem k tomu, že průchod lze přidat pouze do peněženky s oprávněním uživatele, musí být předložen 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);
Pass se zobrazí s možnostmi Přidat a Zrušit :
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 v kódu. Pokud chcete změnit data v předávací aplikaci, 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í proběhnout 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 předávacího souboru použijte Replace
metodu k přepsání starých dat v zařízení.
Zobrazení průchodu pro kontrolu
Jak už jsme si poznamenali dříve, může jen peněženka zobrazit průchod pro skenování. Pass se dá zobrazit pomocí metody, jak je znázorněno na obrázku OpenUrl
:
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í metody PKPassLibraryDidChangeNotification
. Změny můžou být způsobené oznámeními aktivujícími aktualizace na pozadí, takže je vhodné je naslouchat v aplikaci.
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 vytvoření serverové aplikace pro podporu PassKitu je nad rámec tohoto úvodního článku.
Viz open source kód na straně serveru C# pro dotnet-passbook .
Nabízená oznámení
Podrobná diskuze o používání nabízených oznámení k aktualizaci je nad rámec tohoto úvodního článku.
Abyste mohli reagovat na webové požadavky z peněženky, budete muset implementovat rozhraní REST API definované společností Apple, když se vyžadují aktualizace.
Další informace najdete v průvodci aktualizací pass společnosti Apple.
Shrnutí
Tento článek představil PassKit, který popisuje některé z důvodů, proč je užitečné a popisuje 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é přístup k rozhraním API PassKitu z aplikace Xamarin.iOS.
Související odkazy
- Peněženka pro vývojáře
- Příručka pro vývojáře peněženky
- Architektury – Apple Pay a Peněženka (videa WWDC)
- Referenční informace k rozhraní PassKit
- Referenční informace k webové službě Passbook
- Informace o předávání souborů
- dotnet-passbook, opensourcová knihovna pro generování balíčků peněženky pro iOS
- Úvod do iOSu 6