Bagikan melalui


PassKit di Xamarin.iOS

Aplikasi Dompet iOS memungkinkan pengguna untuk menyimpan pass digital di perangkat mereka. Pass ini dihasilkan oleh pedagang dan dikirim ke pelanggan melalui email, URL, atau melalui aplikasi iOS pedagang sendiri. Pass ini dapat mewakili berbagai hal, mulai dari tiket film hingga kartu loyalitas hingga boarding pass. Kerangka kerja PassKit memungkinkan pengembang berinteraksi dengan lulus secara terprogram.

Dokumen ini memperkenalkan Wallet dan menggunakan API PassKit dengan Xamarin.iOS.

Dompet menyimpan dan mengatur semua pass di telepon

Persyaratan

Fitur PassKit yang dibahas dalam dokumen ini memerlukan iOS 6 dan Xcode 4.5, bersama dengan Xamarin.iOS 6.0.

Pengantar

Masalah utama yang dipecahkan PassKit adalah distribusi dan manajemen kode batang. Beberapa contoh dunia nyata tentang bagaimana kode batang saat ini digunakan meliputi:

  • Membeli tiket film secara online - Pelanggan biasanya mengirim kode batang melalui email yang mewakili tiket mereka. Kode batang ini dicetak dan dibawa ke bioskop untuk dipindai untuk entri.
  • Kartu loyalitas – Pelanggan membawa sejumlah kartu khusus toko yang berbeda di dompet atau dompet mereka, untuk ditampilkan dan dipindai ketika mereka membeli barang.
  • Kupon - Kupon didistribusikan melalui email, sebagai halaman web yang dapat dicetak, melalui kotak surat dan sebagai kode batang di surat kabar dan majalah. Pelanggan membawa mereka ke toko untuk dipindai, untuk menerima barang, layanan atau diskon sebagai gantinya.
  • Boarding pass – Mirip dengan membeli tiket film.

PassKit menawarkan alternatif untuk setiap skenario ini:

  • Tiket film – Setelah pembelian, pelanggan menambahkan tiket acara (melalui email atau tautan situs web). Ketika waktu untuk film mendekati, pass akan secara otomatis muncul di layar kunci sebagai pengingat, dan pada saat kedatangan di bioskop, pass mudah diambil dan ditampilkan di Dompet untuk pemindaian.
  • Kartu loyalitas - Daripada (atau selain) menyediakan kartu fisik, toko dapat mengeluarkan (melalui email atau setelah login situs web) Store Card Pass. Penyimpanan dapat menyediakan fitur tambahan seperti memperbarui saldo akun pada pass melalui pemberitahuan push, dan menggunakan layanan geolokasi, pass dapat secara otomatis muncul di layar kunci ketika pelanggan berada di dekat lokasi toko.
  • Kupon – Kupon lolos dapat dengan mudah dihasilkan dengan karakteristik unik untuk membantu pelacakan, dan didistribusikan melalui email atau tautan situs web. Kupon yang diunduh dapat secara otomatis muncul di layar kunci ketika pengguna berada di dekat lokasi tertentu, dan/atau pada tanggal tertentu (seperti ketika tanggal kedaluwarsa mendekati). Karena kupon disimpan di ponsel pengguna, mereka selalu berguna dan tidak salah tempat. Kupon mungkin mendorong pelanggan untuk mengunduh Aplikasi Pendamping karena tautan App Store dapat dimasukkan ke dalam Pass, meningkatkan keterlibatan dengan pelanggan.
  • Boarding pass – Setelah proses check-in online, pelanggan akan menerima boarding pass mereka melalui email atau tautan. Aplikasi Pendamping yang disediakan oleh penyedia transportasi dapat mencakup proses check-in, dan juga memungkinkan pelanggan untuk melakukan fungsi tambahan seperti memilih kursi atau makanan mereka. Penyedia transportasi dapat menggunakan pemberitahuan push untuk memperbarui pass jika transportasi tertunda atau dibatalkan. Saat waktu boarding mendekati pass akan muncul di layar kunci sebagai pengingat dan untuk memberikan akses cepat ke Pass.

Pada intinya, PassKit menyediakan cara sederhana dan nyaman untuk menyimpan dan menampilkan kode batang di perangkat iOS Anda. Dengan integrasi layar kunci lokasi dan waktu tambahan, pemberitahuan push dan Aplikasi Pendamping mengintegrasikannya menawarkan fondasi untuk layanan penjualan, tiket, dan penagihan yang sangat canggih.

Ekosistem PassKit

PassKit bukan hanya API dalam CocoaTouch, melainkan merupakan bagian dari ekosistem aplikasi, data, dan layanan yang lebih besar yang memfasilitasi berbagi dan manajemen kode batang yang aman dan data lainnya. Diagram tingkat tinggi ini menunjukkan berbagai entitas yang dapat terlibat dalam membuat dan menggunakan pass:

Diagram tingkat tinggi ini menunjukkan entitas yang terlibat dalam pembuatan dan penggunaan pass

Setiap bagian ekosistem memiliki peran yang jelas:

  • Wallet – Aplikasi iOS bawaan Apple yang menyimpan dan menampilkan pass. Ini adalah satu-satunya tempat yang lolos dirender untuk digunakan di dunia nyata (yaitu kode batang ditampilkan, bersama dengan semua data yang dilokalkan dalam pass).
  • Aplikasi Pendamping – aplikasi iOS 6 yang dibangun oleh penyedia pass untuk memperluas fungsionalitas pass yang mereka terbitkan, seperti menambahkan nilai ke kartu toko, mengubah seat pada boarding pass atau fungsi khusus bisnis lainnya. Aplikasi Pendamping tidak diperlukan agar pass berguna.
  • Server Anda - Server aman tempat pass dapat dihasilkan dan ditandatangani untuk distribusi. Aplikasi Pendamping Anda dapat terhubung ke server Anda untuk menghasilkan pass baru atau meminta pembaruan ke pass yang ada. Anda dapat secara opsional menerapkan API layanan web yang akan dipanggil Wallet untuk memperbarui pass.
  • Server APNS – Server Anda memiliki kemampuan untuk memberi tahu Wallet pembaruan ke pass pada perangkat tertentu menggunakan APNS. Dorong pemberitahuan ke Wallet yang kemudian akan menghubungi server Anda untuk detail perubahan. Aplikasi pendamping tidak perlu menerapkan APNS untuk fitur ini (mereka dapat mendengarkan PKPassLibraryDidChangeNotification ).
  • Conduit Apps – Aplikasi yang tidak secara langsung memanipulasi pass (seperti yang dilakukan aplikasi pendamping), tetapi yang dapat meningkatkan utilitas mereka dengan mengenali pass dan memungkinkan mereka untuk ditambahkan ke Wallet. Klien email, browser jejaring sosial, dan aplikasi agregasi data lainnya mungkin semua menemukan lampiran atau tautan ke pass.

Seluruh ekosistem terlihat kompleks, jadi perlu dicatat bahwa beberapa komponen bersifat opsional dan implementasi PassKit yang jauh lebih sederhana dimungkinkan.

Apa itu Pass?

Pass adalah kumpulan data yang mewakili tiket, kupon, atau kartu. Ini mungkin ditujukan untuk satu penggunaan oleh individu (dan oleh karena itu berisi detail seperti nomor penerbangan dan alokasi kursi) atau mungkin beberapa token penggunaan yang dapat dibagikan oleh sejumlah pengguna (seperti kupon diskon). Deskripsi terperinci tersedia dalam dokumen Tentang File Pass Apple.

Jenis

Saat ini lima jenis yang didukung, yang dapat dibedakan di aplikasi Wallet dengan tata letak dan tepi atas pass:

  • Tiket Acara – potongan kecil semisal.
  • Boarding Pass – takik di samping, ikon khusus transportasi dapat ditentukan (misalnya bus, kereta api, pesawat).
  • Kartu Toko – dibulatkan ke atas, seperti kartu kredit atau debit.
  • Kupon – berlubang di sepanjang bagian atas.
  • Generik – sama seperti Kartu Toko, dibulatkan ke atas.

Lima jenis pass ditampilkan dalam cuplikan layar ini (dalam urutan: kupon, generik, kartu toko, boarding pass dan tiket acara):

Lima jenis pass ditampilkan dalam cuplikan layar ini

Struktur File

File pass sebenarnya adalah arsip ZIP dengan ekstensi .pkpass , yang berisi beberapa file JSON tertentu (diperlukan), berbagai file gambar (opsional) serta string yang dilokalkan (juga opsional).

  • pass.json – diperlukan. Berisi semua informasi untuk pass.
  • manifest.json – diperlukan. Berisi hash SHA1 untuk setiap file dalam pass kecuali file tanda tangan dan file ini (manifest.json).
  • signature – diperlukan. Dibuat dengan menandatangani manifest.json file dengan sertifikat yang dihasilkan di Portal Provisi iOS.
  • logo.png – opsional.
  • background.png – opsional.
  • icon.png – opsional.
  • File string yang dapat dilokalkan – opsional.

Struktur direktori file pass ditunjukkan di bawah ini (ini adalah konten arsip ZIP):

Struktur direktori file pass diperlihatkan di sini

pass.json

JSON adalah format karena pass biasanya dibuat di server - itu berarti bahwa kode pembuatan adalah platform-agnostic di server. Tiga bagian utama informasi dalam setiap pass adalah:

  • teamIdentifier – Ini menautkan semua pass yang Anda buat ke akun App Store Anda. Nilai ini terlihat di Portal Provisi iOS.
  • passTypeIdentifier – Daftar di Portal Provisi ke grup yang diteruskan bersamaan (jika Anda menghasilkan lebih dari satu jenis). Misalnya, kedai kopi mungkin membuat jenis kartu toko untuk memungkinkan pelanggan mereka mendapatkan kredit loyalitas, tetapi juga jenis pass kupon terpisah untuk membuat dan mendistribusikan kupon diskon. Kedai kopi yang sama bahkan dapat mengadakan acara musik langsung dan mengeluarkan tiket Event Ticket untuk mereka.
  • serialNumber – String unik dalam ini passTypeidentifier . Nilai buram ke Wallet, tetapi penting untuk melacak pass tertentu saat berkomunikasi dengan server Anda.

Ada sejumlah besar kunci JSON lainnya di setiap Pass, contohnya ditunjukkan di bawah ini:

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

Barcode

Hanya format 2D yang didukung: PDF417, Aztec, QR. Apple mengklaim bahwa kode batang 1D tidak cocok untuk dipindai di layar ponsel dengan lampu latar.

Teks alternatif yang ditampilkan di bawah kode batang bersifat opsional – beberapa pedagang ingin dapat membaca/mengetik secara manual.

Pengodean ISO-8859-1 adalah yang paling umum, periksa pengodean mana yang digunakan oleh sistem pemindaian yang akan membaca pass Anda.

Relevansi (Layar Kunci)

Ada dua jenis data yang dapat menyebabkan pass ditampilkan di layar kunci:

Location

Hingga 10 lokasi dapat ditentukan dalam Pass, misalnya toko yang sering dikunjungi pelanggan, atau lokasi bioskop atau bandara. Pelanggan dapat mengatur lokasi ini melalui Aplikasi Pendamping atau penyedia dapat menentukannya dari data penggunaan (jika dikumpulkan dengan izin pelanggan).

Saat pass ditampilkan di layar kunci, pagar dihitung sehingga ketika pengguna meninggalkan area, pass disembunyikan dari layar kunci. Radius terikat dengan gaya untuk mencegah penyalahgunaan.

Tanggal dan Waktu

Hanya satu tanggal/waktu yang dapat ditentukan dalam Pass. Tanggal dan waktu berguna untuk memicu pengingat layar kunci untuk boarding pass dan tiket acara.

Dapat diperbarui melalui push atau melalui PassKit API, sehingga tanggal/waktu dapat diperbarui dalam kasus tiket multi-penggunaan (seperti tiket musiman ke teater atau kompleks olahraga).

Pelokalan

Menerjemahkan pass ke dalam beberapa bahasa mirip dengan melokalisasi aplikasi iOS – membuat direktori khusus bahasa dengan .lproj ekstensi dan menempatkan elemen yang dilokalkan di dalamnya. Terjemahan teks harus dimasukkan ke dalam pass.strings file, sementara gambar yang dilokalkan harus memiliki nama yang sama dengan gambar yang mereka ganti di akar Pass.

Keamanan

Pass ditandatangani dengan sertifikat privat yang Anda buat di Portal Provisi iOS. Langkah-langkah untuk menandatangani pass adalah:

  1. Hitung hash SHA1 untuk setiap file di direktori pass (jangan sertakan manifest.json file atau signature , yang seharusnya tidak ada pada tahap ini).
  2. Tulis manifest.json sebagai daftar kunci/nilai JSON dari setiap nama file dengan hash-nya.
  3. Gunakan sertifikat untuk menandatangani manifest.json file dan menulis hasilnya ke file yang disebut signature .
  4. ZIP semuanya dan berikan file yang .pkpass dihasilkan ekstensi file.

Karena kunci privat Anda diperlukan untuk menandatangani pass, proses ini hanya boleh dilakukan pada server aman yang Anda kontrol. JANGAN mendistribusikan kunci Anda untuk mencoba dan menghasilkan pass dalam aplikasi.

Konfigurasi dan Penyiapan

Bagian ini berisi instruksi untuk membantu menyiapkan detail provisi Anda dan membuat pass pertama Anda.

PassKit Provisi

Agar pass masuk ke App Store, kode harus ditautkan ke akun pengembang. Ini memerlukan dua langkah:

  1. Pass harus didaftarkan menggunakan pengidentifikasi unik, yang disebut ID Jenis Pass.
  2. Sertifikat yang valid harus dibuat untuk menandatangani pass dengan tanda tangan digital pengembang.

Untuk membuat ID Tipe Pass, lakukan hal berikut.

Membuat ID Jenis Pass

Langkah pertama adalah menyiapkan ID Jenis Pass untuk setiap jenis pass yang berbeda untuk didukung. ID Pass (atau pengidentifikasi Jenis Pass) membuat pengidentifikasi unik untuk Pass. Kami akan menggunakan ID ini untuk menautkan pass dengan akun pengembang Anda menggunakan Sertifikat.

  1. Di bagian Sertifikat, Pengidentifikasi, dan Profil dari Portal Provisi iOS, navigasikan ke Pengidentifikasi dan pilih ID Jenis Pass . Lalu pilih tombol + untuk membuat jenis pass baru: Membuat jenis pass baru

  2. Berikan Deskripsi (nama) dan Pengidentifikasi (string unik) untuk Pass. Perhatikan bahwa semua ID Jenis Pass harus dimulai dengan string pass. Dalam contoh ini kita menggunakan pass.com.xamarin.coupon.banana : Berikan Deskripsi dan Pengidentifikasi

  3. Konfirmasi ID Pass dengan menekan tombol Daftar .

Membuat sertifikat

Untuk membuat Sertifikat baru untuk ID Tipe Pass ini, lakukan hal berikut:

  1. Pilih ID Pass yang baru dibuat dari daftar, dan klik Edit : Pilih ID Pass baru dari daftar

    Kemudian, pilih Buat Sertifikat... :

    Pilih Buat Sertifikat

  2. Ikuti langkah-langkah untuk membuat Permintaan Penandatanganan Sertifikat (CSR).

  3. Tekan tombol Lanjutkan di portal pengembang dan unggah CSR untuk menghasilkan sertifikat Anda.

  4. Unduh sertifikat dan klik dua kali untuk menginstalnya di rantai kunci Anda.

Sekarang setelah kita membuat sertifikat untuk ID Jenis Pass ini, bagian berikutnya menjelaskan cara membuat pass secara manual.

Untuk informasi selengkapnya tentang Provisi untuk Dompet, lihat panduan Bekerja dengan Kemampuan .

Membuat Pass Secara Manual

Sekarang setelah kita membuat Jenis Pass, kita dapat membuat pass secara manual untuk menguji pada simulator atau perangkat. Langkah-langkah untuk membuat pass adalah:

  • Buat direktori untuk memuat file pass.
  • Buat file pass.json yang berisi semua data yang diperlukan.
  • Sertakan gambar dalam folder (jika diperlukan).
  • Hitung hash SHA1 untuk setiap file dalam folder, dan tulis ke manifest.json.
  • Tanda tangani manifest.json dengan file .p12 sertifikat yang diunduh.
  • ZIP konten direktori dan ganti nama dengan ekstensi .pkpass.

Ada beberapa file sumber dalam kode sampel untuk artikel ini yang dapat digunakan untuk menghasilkan pass. Gunakan file dalam CouponBanana.raw direktori direktori CreateAPassManually. File berikut ada:

File-file ini ada

Buka pass.json dan edit JSON. Anda setidaknya harus memperbarui passTypeIdentifier dan teamIdentifer agar sesuai dengan akun Pengembang Apple Anda.

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

Anda kemudian harus menghitung hash untuk setiap file dan membuat manifest.json file. Ini akan terlihat seperti ini ketika Anda selesai:

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

Selanjutnya tanda tangan harus dibuat untuk file ini menggunakan sertifikat (file.p12) yang dihasilkan untuk ID Tipe Pass ini.

Menandatangani Di Mac

Unduh Bahan Dukungan Benih Dompet dari situs Unduhan Apple. signpass Gunakan alat untuk mengubah folder Anda menjadi pass (ini juga akan menghitung hash SHA1 dan ZIP output menjadi file .pkpass).

Pengujian

Jika Anda memeriksa output alat-alat ini (dengan mengatur nama file ke .zip dan kemudian membukanya), Anda akan melihat file berikut (perhatikan penambahan manifest.json file dan signature ):

Memeriksa output alat-alat ini

Setelah Anda menandatangani, ZIPped dan mengganti nama file (misalnya menjadi BananaCoupon.pkpass) Anda dapat menyeretnya ke simulator untuk menguji, atau mengirim email ke diri Anda sendiri untuk mengambil pada perangkat nyata. Anda akan melihat layar untuk Menambahkan pass, seperti ini:

Tambahkan layar pass

Biasanya proses itu akan diotomatisasi di server, namun pembuatan pass manual mungkin menjadi opsi untuk bisnis kecil yang hanya membuat kupon yang tidak memerlukan dukungan server back-end.

Dompet

Dompet adalah bagian tengah dari ekosistem PassKit. Cuplikan layar ini memperlihatkan Dompet kosong, dan tampilan daftar pass dan pass individual:

Cuplikan layar ini memperlihatkan Dompet kosong, dan tampilan daftar pass dan pass individual

Fitur Wallet meliputi:

  • Ini adalah satu-satunya tempat yang lolos dirender dengan kode batang mereka untuk pemindaian.
  • Pengguna dapat mengubah pengaturan untuk pembaruan. Jika diaktifkan, pemberitahuan push dapat memicu pembaruan pada data di Pass.
  • Pengguna dapat mengaktifkan atau menonaktifkan integrasi layar kunci. Jika diaktifkan, ini memungkinkan pass muncul secara otomatis di layar kunci mereka, berdasarkan waktu dan data lokasi yang relevan yang disematkan dalam pass.
  • Sisi terbalik pass mendukung pull-to-refresh, jika URL-server web disediakan di JSON pass.
  • Aplikasi Pendamping dapat dibuka (atau diunduh) jika ID aplikasi disediakan di JSON pass.
  • Pass dapat dihapus (dengan animasi shredding lucu).

Menambahkan Passes ke Wallet

Pass dapat ditambahkan ke Wallet dengan cara berikut:

  • Conduit Apps – Ini tidak memanipulasi pass secara langsung, mereka hanya memuat file pass dan menyajikan pengguna dengan opsi untuk menambahkannya ke Wallet.

  • Aplikasi Pendamping – Ini ditulis oleh penyedia untuk mendistribusikan pass dan menawarkan fungsionalitas tambahan untuk menelusuri atau mengeditnya. Aplikasi Xamarin.iOS memiliki akses lengkap ke PASSKit API untuk membuat dan memanipulasi pass. Pass kemudian dapat ditambahkan ke Wallet menggunakan PKAddPassesViewController. Proses ini dijelaskan secara lebih rinci di bagian Aplikasi Pendamping dari dokumen ini.

Aplikasi Saluran

Aplikasi conduit adalah aplikasi perantara yang mungkin menerima pass atas nama pengguna, dan harus diprogram untuk mengenali jenis konten mereka dan menyediakan fungsionalitas untuk ditambahkan ke Wallet. Contoh aplikasi saluran meliputi:

  • Mail – Mengenali lampiran sebagai Pass.
  • Safari – Mengenali Jenis Konten pass saat tautan URL pass diklik.
  • Aplikasi kustom lainnya - Aplikasi apa pun yang menerima lampiran atau tautan terbuka (klien media sosial, pembaca email, dll).

Cuplikan layar ini menunjukkan bagaimana Mail di iOS 6 mengenali lampiran pass dan (saat disentuh) menawarkan untuk Menambahkannya ke Wallet.

Cuplikan layar ini memperlihatkan bagaimana Mail di iOS 6 mengenali lampiran pass

Cuplikan layar ini memperlihatkan bagaimana mail menawarkan untuk menambahkan lampiran pass ke Wallet

Jika Anda membangun aplikasi yang bisa menjadi saluran untuk lulus, aplikasi tersebut dapat dikenali dengan:

  • Ekstensi file - .pkpass
  • Jenis MIME - application/vnd.apple.pkpass
  • UTI – com.apple.pkpass

Operasi dasar aplikasi saluran adalah mengambil file pass dan memanggil PassKit PKAddPassesViewController untuk memberi pengguna opsi untuk menambahkan pass ke Wallet mereka. Implementasi pengontrol tampilan ini tercakup di bagian berikutnya pada Aplikasi Pendamping.

Aplikasi Conduit tidak perlu disediakan untuk JENIS ID pass tertentu dengan cara yang sama seperti yang dilakukan Aplikasi Pendamping.

Aplikasi Pendamping

Aplikasi pendamping menyediakan fungsionalitas tambahan untuk bekerja dengan pass, termasuk membuat Pass, memperbarui informasi yang terkait dengan Pass dan mengelola pass yang terkait dengan aplikasi.

Aplikasi pendamping tidak boleh mencoba menduplikasi fitur Wallet. Mereka tidak dimaksudkan untuk menampilkan pass untuk pemindaian.

Sisa bagian ini menjelaskan cara membuat Aplikasi Pendamping dasar yang berinteraksi dengan PassKit.

Penyediaan

Karena Wallet adalah teknologi toko, aplikasi perlu disediakan secara terpisah dan tidak dapat menggunakan Profil Provisi Tim atau ID Aplikasi Wildcard. Lihat panduan Bekerja dengan Kemampuan untuk membuat ID Aplikasi dan Profil Provisi unik untuk aplikasi Wallet.

Penetapan

File Entitlements.plist harus disertakan dalam semua proyek Xamarin.iOS terbaru. Untuk menambahkan file Entitlements.plist baru, ikuti langkah-langkah dalam panduan Bekerja dengan Pemberian Izin.

Untuk mengatur pemberian izin, lakukan hal berikut:

Klik dua kali pada file Entitlements.plist di Solution Pad untuk membuka editor Entitlements.plist:

Editor Entitlements.plst

Di bawah bagian Dompet, pilih opsi Aktifkan Dompet

Aktifkan pemberian kepemilikan dompet

Opsi default adalah agar aplikasi Anda mengizinkan semua jenis pass. Namun, dimungkinkan untuk membatasi aplikasi Anda dan hanya mengizinkan subset jenis pass tim. Untuk mengaktifkan ini, pilih Izinkan subset jenis pass tim dan masukkan pengidentifikasi jenis pass subset yang ingin Anda izinkan.

Awakutu

Jika Anda mengalami masalah saat menyebarkan aplikasi, periksa apakah Anda menggunakan Profil Provisi yang benar dan bahwa Entitlements.plist dipilih sebagai file Pemberian izin Kustom di opsi i Telepon Penandatanganan Bundel.

Jika Anda mengalami kesalahan ini saat menyebarkan:

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

pass-type-identifiers maka array pemberian izin salah (atau tidak cocok dengan Profil Provisi). Verifikasi ID Jenis Pass dan ID Tim Anda sudah benar.

Kelas

Kelas PassKit berikut tersedia bagi aplikasi untuk mengakses pass:

  • PKPass – Instans Pass.
  • PKPassLibrary – Menyediakan API untuk mengakses pass pada perangkat.
  • PKAddPassesViewController – Digunakan untuk menampilkan pass bagi pengguna untuk menyimpan di Wallet mereka.
  • PKAddPassesViewControllerDelegate – Pengembang Xamarin.iOS

Contoh

Lihat proyek PassLibrary dalam sampel untuk artikel ini. Ini menunjukkan fungsi umum berikut yang akan diperlukan dalam Aplikasi Pendamping Dompet:

Periksa apakah Dompet Tersedia

Dompet tidak tersedia di iPad, jadi aplikasi harus memeriksa sebelum mencoba mengakses fitur PassKit.

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

Membuat Instans Pustaka Pass

Pustaka PassKit bukan singleton, aplikasi harus membuat dan menyimpan dan instans untuk mengakses API PassKit.

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

Dapatkan Daftar Passes

Aplikasi dapat meminta daftar pass dari pustaka. Daftar ini secara otomatis difilter oleh PassKit, sehingga Anda hanya dapat melihat pass yang telah dibuat dengan ID Tim Anda dan yang tercantum dalam Pemberian Izin Anda.

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

Perhatikan bahwa simulator tidak memfilter daftar pass yang dikembalikan, sehingga metode ini harus selalu diuji pada perangkat nyata. Daftar ini dapat ditampilkan dalam UITableView. Aplikasi sampel terlihat seperti ini setelah dua kupon ditambahkan:

Aplikasi sampel terlihat seperti ini setelah dua kupon ditambahkan

Menampilkan Pass

Sekumpulan informasi terbatas tersedia untuk penyajian pass dalam aplikasi pendamping.

Pilih dari kumpulan properti standar ini untuk menampilkan daftar pass, seperti kode contoh.

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

String ini ditampilkan sebagai pemberitahuan dalam sampel:

Pemberitahuan Kupon Dipilih dalam sampel

Anda juga dapat menggunakan LocalizedValueForFieldKey() metode untuk mengambil data dari bidang dalam pass yang telah Anda rancang (karena Anda akan tahu bidang apa yang harus ada). Contoh kode tidak menunjukkan ini.

Memuat Pass dari File

Karena pass hanya dapat ditambahkan ke Wallet dengan izin pengguna, pengontrol tampilan harus disajikan untuk membiarkan mereka memutuskan. Kode ini digunakan dalam tombol Tambahkan dalam contoh, untuk memuat pass bawaan yang disematkan di aplikasi (Anda harus menggantinya dengan yang telah Anda tandatangani):

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 disajikan dengan opsi Tambahkan dan Batalkan :

Pass yang disajikan dengan opsi Tambahkan dan Batalkan

Ganti Pass yang Sudah Ada

Mengganti pass yang ada tidak memerlukan izin pengguna, namun akan gagal jika pass belum ada.

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

Mengedit Pass

PKPass tidak dapat diubah, sehingga Anda tidak dapat memperbarui objek pass dalam kode Anda. Untuk mengubah data dalam pass, aplikasi harus memiliki akses ke server web yang dapat menyimpan catatan pass dan menghasilkan file pass baru dengan nilai yang diperbarui yang dapat diunduh aplikasi.

Pembuatan file pass harus dilakukan di server karena pass harus ditandatangani dengan sertifikat yang harus dijaga kerahasiaannya dan aman.

Setelah file pass yang diperbarui dibuat, gunakan Replace metode untuk menimpa data lama pada perangkat.

Menampilkan Pass untuk pemindaian

Seperti yang disebutkan sebelumnya, hanya Wallet yang dapat menampilkan pass untuk pemindaian. Pass dapat ditampilkan menggunakan metode seperti yang ditunjukkan OpenUrl :

UIApplication.SharedApplication.OpenUrl (p.PassUrl);

Menerima Pemberitahuan Perubahan

Aplikasi dapat mendengarkan perubahan yang dilakukan pada Pustaka Pass menggunakan PKPassLibraryDidChangeNotification. Perubahan dapat disebabkan oleh pemberitahuan yang memicu pembaruan di latar belakang, jadi ada baiknya untuk mendengarkannya di aplikasi Anda.

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

Penting untuk meneruskan instans pustaka saat mendaftar untuk pemberitahuan karena PKPassLibrary bukan singleton.

Pemrosesan Server

Diskusi terperinci tentang membangun aplikasi server untuk mendukung PassKit berada di luar cakupan artikel pengantar ini.

Lihat kode sisi server dotnet-passbook sumber terbuka C#.

Pemberitahuan Push

Diskusi terperinci tentang menggunakan pemberitahuan push untuk memperbarui pass berada di luar cakupan artikel pengantar ini.

Anda akan diminta untuk menerapkan REST-like API yang ditentukan oleh Apple untuk menanggapi permintaan web dari Wallet saat pembaruan diperlukan.

Lihat Panduan Memperbarui Pass Apple untuk informasi selengkapnya.

Ringkasan

Artikel ini memperkenalkan PassKit, menguraikan beberapa alasan mengapa itu berguna dan menjelaskan berbagai bagian yang harus diimplementasikan untuk solusi PassKit lengkap. Ini menjelaskan langkah-langkah yang diperlukan untuk mengonfigurasi akun Pengembang Apple Anda untuk membuat pass, proses untuk membuat pass secara manual dan juga cara mengakses API PassKit dari aplikasi Xamarin.iOS.