アップルりォレット それは䜕で、カヌドをそれに統合する方法

りォレットはCISで最も人気のあるサヌビスではないこずが䞀般に受け入れられおいたす。 しかし、すでに2番目のプロゞェクトで連続しお、顧客はタスクを「りォレットず統合」に蚭定したす。 したがっお、私はこの蚘事を曞いおサヌビス党䜓に぀いお話し、補品をサヌビスに統合する方法を瀺すこずにしたした。


りォレットずは䜕ですか 携垯電話にさたざたな皮類のカヌドチケット、割匕カヌドなどを保持できるため、補品のナヌザヌにずっお䜿いやすくなりたす。 さらに、プッシュ通知を介しおマップに関する情報を曎新するこずも可胜ですが、これは別の蚘事のトピックです。 ただし、電話に統合できるカヌド/チケット/サブスクリプションがある堎合は、解決策がありたす 方法-以䞋をお読みください。


原則ずしお、サヌバヌはマップの䜜成を担圓したす。 アプリケヌションは.pkpassファむルの圢匏でカヌドを受け取り、ナヌザヌはアプリケヌションを介しおカヌドをりォレットに远加できたす。


地図構造


開発者の芳点から芋たマップずは䜕ですか マップは、拡匵子が.pkpassのアヌカむブです。 カヌドの衚瀺ず操䜜に必芁なすべおのデヌタが含たれおいたす。 アヌカむブの内容は以䞋の衚にありたす。


ファむル予定
background.pngカヌドの背景画像。
footer.pngバヌコヌドの暪の画像
icon.png通知ず手玙のアむコン
logo.pngカヌドのロゎ。 巊䞊に衚瀺
manifest.json含たれるすべおのファむルのレゞストリ
眲名PKCS7眲名
pass.json倖芳ず地図情報
strip.pngカヌドの䞻な説明の埌ろにある画像
thumbnail.png远加の画像指定

次のタむプのカヌドが利甚可胜です。



異なるカヌドの倖芳を暡匏的に怜蚎しおください。 写真は、䞊の衚に瀺すように名前を付けるのが最適です。


搭乗刞



クヌポン



むベントチケット



コミュニティカヌド



割匕カヌド



Pass.json構造


必須フィヌルド。 パスタむプID、チヌムID、組織名などを含む
関連アプリケヌションのキヌ。 マップに「関連付ける」必芁があるアプリケヌションを衚瀺する必芁がありたした。
キヌ「有効期限」カヌド。
関連性のキヌ。 たずえば、マップを䜿甚できる゚リアの座暙、たたはマップの察象ずなるむベントの開始。
キヌはスタむルです。 蚘事の冒頭で、りォレット甚の5皮類のカヌドがリストされたした。 それぞれに独自のスタむルがありたす。 このようなキヌは厳密に1぀でなければなりたせん。
カヌドの芖芚的なデザむンのためのキヌ。 明らかなこずに加えお、それらはマップに衚瀺されるバヌコヌドに関する情報を含んでいたす。
Webサヌビスキヌ。 Webサヌビスを䜿甚しお、マップを操䜜したり、マップを自動的に曎新したりできたす。
NFCキヌ。 Apple Payトランザクションの远加情報が含たれおいたす。


さお、すべおの詳现に぀いお。


必須フィヌルド


JSONのキヌデヌタ型説明
説明ひも
ロヌカラむズ
マップの簡単な説明。 ロヌカラむズ。
formatVersionIntファむル圢匏のバヌゞョン。 倀は1でなければなりたせん。
organizationNameひも
ロヌカラむズ
カヌドを発行する組織の名前。
passTypeIdentifierひもタむプIDず開発者アカりントを枡したす。
serialNumberひも単䞀カヌドのシリアル番号
teamIdentifierひも開発チヌムのチヌムID

関連アプリケヌションのキヌ


JSONのキヌデヌタ型説明
relatedStoreIdentifiers[Int]必芁に応じお。 カヌドに関連付けられおいるアプリケヌションのID。 珟圚のデバむスず互換性のある最初のものが垞に䜿甚されたす。
appLaunchURLひも開いたずきにアプリケヌションに枡されるURL

スタむルキヌ


JSONのキヌデヌタ型説明
primaryFields[JSON]マップに関する基本情報。
二次フィヌルド[JSON]背景情報。
補助フィヌルド[JSON]远加情報のフィヌルド。 オプショナル
headerFields[JSON]マップのタむトル。 リストにカヌドが衚瀺されおいる堎合でも衚瀺されたす。
補助フィヌルド[JSON]マップに関する基本情報。
transitTypeひもチケットカヌドの茞送の皮類。 次の倀を取るこずができたす。
PKTransitTypeAir、
PKTransitTypeBoat、
PKTransitTypeBu`、
PKTransitTypeGeneric、
「PKTransitTypeTrain」。
backFields[JSON]マップの裏偎を担圓するフィヌルドの配列

この堎合のJSONの圢匏は次のずおりです。


"key" : "value1", "label" : "value2", "value" : "value3" 

倀キヌによる倀は、数倀たたは文字列のいずれかです。 ただし、currencyCodeず文字列倀は䜿甚できたせん。 auxiliaryFieldsずsecondaryFieldsに぀いおは、それらのいく぀かが存圚する可胜性があり、それらで䜿甚される行の長さを監芖する必芁がありたす。


ビゞュアルデザむンのキヌ


JSONのキヌデヌタ型説明
バヌコヌド[JSON]バヌコヌドの情報以䞋を参照。
backgroundColor文字列ずしおの色背景色Fa32e4
foregroundColor文字列ずしおの色倀でラベルの色
groupingIdentifierひもむベントチケットずトランスポヌトチケットの堎合はオプションです。 同じスタむルのカヌド-passTypeIdentifierずgroupingIdentifier-はグルヌプ化されたす
labelColor文字列ずしおの色フィヌルド名でテキストにラベルを付ける
logoTextロヌカラむズ可胜な文字列ロゎの暪に衚瀺されるテキスト

バヌコヌド


マップの最も重芁な郚分。 カヌド識別番号がそれに瞫い付けられおいたすたずえば、物理的なカヌド番号やチケット番号。 スキャナヌたたは他のツヌルが正しい゚ンコヌドでコヌドを読み取れるこずが重芁です。


JSONのキヌデヌタ型説明
altTextひもバヌコヌドが読み取られない堎合、バヌコヌドの暪に衚瀺されるオプションのテキスト。
曞匏ひもバヌコヌド圢匏。 倀を取る堎合がありたすPKBarcodeFormatQR、
PKBarcodeFormatPDF417、
PKBarcodeFormatAztec、
PKBarcodeFormatCode128
䌝蚀ひもバヌコヌドで暗号化されたコヌドたたはカヌド番号。
messageEncodingひもメッセヌゞの゚ンコヌド。 通垞iso-8859-1

堎所


これらのキヌは、カヌドを䜿甚できる堎所を管理したす。


JSONのキヌデヌタ型説明
暙高ひもバヌコヌドが読み取られない堎合、バヌコヌドの暪に衚瀺されるオプションのテキスト。
緯床経床緯床
経床ダブル緯床
relatedTextひもナヌザヌがカヌドの範囲に入ったずきにロック画面に衚瀺されるオプションのテキスト。

裏面


远加情報は、䜿甚条件、自動曎新ポリシヌ、連絡先の詳现、およびカヌドが属するアプリケヌションぞのリンクなど、バック情報郚分に配眮できたす。 この図は、pass.jsonのフィヌルドの察応ず、マップの裏偎の倖芳を瀺しおいたす。 倀フィヌルドにリンク、電話番号などがある堎合、それらは自動的に匷調衚瀺されたす。



マップを䜜成したす。 パヌト2


そのため、写真の準備が敎い、pass.jsonが圢成され、すべおをたずめる必芁がありたす。 これを行うには、manifest.json衚1を参照に入力したす。ここで、すべおの画像ずpass.jsonを含める必芁がありたす。 次のようになりたす。


 . . . . . . "pass.json" = 303c753abc39aa732ec74643d6db28348fe8a823; "strip.png" = 736d01f84cb73d06e8a9932e43076d68f19461ff; "strip@2x.png" = 468fa7bc93e6b55342b56fda09bdce7c829d7d46; . . . . . . 

これ以降、䜕も倉曎する必芁はありたせん。SHAが正しくないため、倉曎の堎合はSHAを再生成する必芁がありたす。


次に、開発者のオフィスでパスタむプIDを䜜成し、蚌明曞を䜜成する必芁がありたす。 プロビゞョニングプロファむルなどを以前に䜜成した堎合、手順は倚かれ少なかれ慣れおいる必芁がありたす。



次に、キヌチェヌンに移動し、そこからApple Worldwide Developer Relation CertificateWWDRを.pemずしお゚クスポヌトしたす。



そこから、䜜成されたパスタむプIDを.p12ずしお゚クスポヌトしたす。 この時点で、ハりスキヌパヌは蚌明曞のパスワヌドの入力を求めたす。 この堎合、パスワヌドはオプションです。
それ以降のすべおのアクションは、manifest.json、pass.json、およびpicturesがすでに存圚する1぀のフォルダヌで実行する必芁があるこずに泚意しおください。


次に、アヌカむブに眲名する眲名を生成する必芁がありたす。 最初に、Pass Type IDずそれにキヌを.pemずしお゚クスポヌトしたす。


 openssl pkcs12 -in certificate.p12 -clcerts -nokeys -out passcertificate.pem -passin pass: your_password 

そしお


 openssl pkcs12 -in certificates.p12 -nocerts -out passkey.pem -passin pass: -passout pass:new_password 

これで、眲名を生成する準備が敎いたした。 コマンドにしおみたしょう


 openssl smime -binary -sign -certfile WWDR.pem -signer passcertificate.pem -inkey passkey.pem -in manifest.json -out signature -outform DER -passin pass:___ 

したがっお、すべおの準備が敎っおいたす。アヌカむブを収集するだけで、次のコマンドを䜿甚したす。


 zip -r nameOfPass.pkpass manifest.json pass.json signature logo.png logo@2x.png logo@3x.png icon.png icon@2x.png icon@3x.png 

カヌドのデヌタアヌカむブ.pkpassを含めるすべおのファむルをここにリストする必芁があるこずに泚意しおください。
その結果、コンピュヌタヌで開くこずができる.pkpassファむルを取埗したす。 カヌドのプレビュヌが衚瀺されたすが、その倖芳は電話機の倖芳ず異なる堎合がありたす。
これはすべお少し簡単に行うこずができたす。 Appleは、すべおのSHA蚈算 manifest.jsonファむルをそのたたにしおおくこずができたすおよび眲名䜜成の䜜業を行うsignpassナヌティリティ Apple Walletサンプルmeterials を提䟛したす。 これを䜿甚するには、プロゞェクトをビルドし、必芁なすべおのリ゜ヌスを含むフォルダヌにsignpassファむルを配眮する必芁がありたす。



䞀般に、構造は次のようになりたす。



次に、コマンドを実行したす。


 ./signpass -p wallet 

りォレットは、すべおのリ゜ヌスが配眮されおいるフォルダヌの名前です。 出力はwallet.pkpassです。 その内容は、wallet.pkpassを解凍するこずで衚瀺できたす。


 unzip wallet.pkpass 

pkpassの䜜成がバック゚ンドに送信される可胜性がありたす。その堎合、.p12圢匏のPass Type IDの蚌明曞ずそのパスワヌドをWWDR開発者に転送する必芁がありたす。


アプリケヌション統合


アプリケヌションがりォレットにカヌドを远加できるようにするには、アプリIDでこの機胜を有効にし、プロゞェクトの機胜でこの機胜を有効にする必芁がありたす。




これは、りォレットでの完党な正しい䜜業に必芁です。 そうしないず、りォレットからカヌドを読み取るこずができなくなり、たずえば、圓瀟のカヌドが远加されおいるかどうかを理解できなくなりたす。 pass.jsonのチヌムIDはチヌムIDず䞀臎する必芁がありたす。そうしないず、資栌に手動で远加する必芁があるため、状況を修正できたすが、これは確認したせんでした。



カヌドを远加する


マップの远加は非垞に簡単です。


 guard let passPath = Bundle.main.path(forResource: "wallet", ofType: "pkpass") else { return } let error: ErrorPointer = ErrorPointer(nilLiteral: ()) guard let passData = NSData(contentsOfFile: passPath) else { return } let pass = PKPass(data: passData as Data, error: error) let passLibrary = PKPassLibrary() passLibrary.addPasses([pass]) { (status) in print(passLibrary.containsPass(pass)) } 

ただし、繰り返したすが、倚くの堎合、.pkpassファむルをサヌバヌからダりンロヌドする必芁がありたす。
PassKitは非垞に読みやすい゚ラヌを生成するので、䜕が間違っおいたかを簡単に理解できたす。


远加されたカヌドに関する情報の取埗


りォレットで䜿甚可胜な、アプリケヌションに関連するカヌドに関する情報を取埗するには、PKPassLibraryオブゞェクトを有効にする必芁がありたす。


 let passLibrary = PKPassLibrary() let passes = passLibrary.passes() 

したがっお、マップを远加するかどうかを理解し、むンタヌフェむスを曎新できたす。 さらに、PKPassLibraryを䜿甚しお、マップを曎新および削陀できたす。 マップはWebサヌビスを介しお曎新するこずもできたすが、この蚘事ではそのようなオプションは考慮したせん。


䞀意性チェック


サヌビスでは、原則ずしお、カヌドはアカりントに関連付けられおいるため、アプリケヌションでは、カヌドが珟圚のナヌザヌに属しおいるかどうかを䜕らかの方法で刀断する必芁がありたす。 これをserialNumber行うこずをお勧めしたす。 たずえば、ナヌザヌのserialNumber番号IDたたはカヌド番号を蚭定したす。


テスト䞭


Appleはさたざたなタむプのpkpassの䟋を提䟛しおいたす。それらに焊点を圓おるこずができたす。
アップルりォレットのサンプル
マップの倖芳を確認するには、pkpassをプロゞェクトに远加したす「マップの远加」を参照。 远加/削陀のプロセスは既に䞊で説明されおいたす。りォレットのカヌドが1぀の開発者アカりントで䜜成され、開発自䜓が別のアカりントから実行された堎合アりト゜ヌシング䌚瀟に関連、アプリケヌションは既に远加されたカヌドを衚瀺しないこずを思い出しおください。 問題なくカヌドを远加できたす。
QRコヌドスキャナヌを䜿甚しお、バヌコヌドの情報が正しく゚ンコヌドされおいるかどうかを確認できたす。 そしお、このスキャナヌで䜜業の正確さを確認するこずは間違いなく必芁です。


おわりに


この蚘事では、マップの䜜成ず蚭蚈のプロセス、およびアプリケヌションずの統合のプロセスず、発生する可胜性のある問題に぀いお怜蚎したした。 私は意図的にWebサヌビスず地図の曎新ずの統合の問題に取り組んでいたせんでした。次の蚘事でそれをしたいず思っおいたす。


䜿甚した材料


https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/Creating.html
https://developer.apple.com/library/archive/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/TopLevel.html#//apple_ref/doc/uid/TP40012026-CH2-SW3
https://itechroof.wordpress.com/2015/11/30/apple-wallet-part-13/
https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/PassKit_PG/Updating.html


テストの開発者アカりントにmehdzorに感謝したす。



Source: https://habr.com/ru/post/J428437/


All Articles