Share via


Xamarin.iOS'ta PassKit

iOS Cüzdan uygulaması, kullanıcıların cihazlarında dijital geçişleri depolamasına olanak tanır. Bu geçişler satıcılar tarafından oluşturulur ve müşteriye e-posta, URL'ler veya satıcının kendi iOS uygulaması aracılığıyla gönderilir. Bu geçişler, film biletlerinden sadakat kartlarına ve biniş kartlarına kadar çeşitli şeyleri temsil edebilir. PassKit çerçevesi, geliştiricilerin geçişlerle program aracılığıyla etkileşim kurmasına olanak tanır.

Bu belgede Cüzdan ve Xamarin.iOS ile PassKit API'sini kullanma tanıtılması.

Cüzdan, telefondaki tüm kartları depolar ve düzenler

Gereksinimler

Bu belgede açıklanan PassKit özellikleri, Xamarin.iOS 6.0 ile birlikte iOS 6 ve Xcode 4.5 gerektirir.

Giriş

PassKit'in çözdüğü temel sorun, barkodların dağıtımı ve yönetimidir. Barkodların şu anda nasıl kullanıldığına dair bazı gerçek dünya örnekleri şunlardır:

  • Çevrimiçi film biletleri satın alma – Müşterilere genellikle biletlerini temsil eden bir barkod e-posta ile gönderilir. Bu barkod yazdırılır ve giriş için taranmak üzere sinemaya alınır.
  • Bağlılık programı kartları – Müşteriler, ürün satın aldıklarında görüntülemek ve taramak için cüzdanlarında veya çantalarında mağazaya özgü bir dizi farklı kart taşır.
  • Kuponlar – Kuponlar e-posta yoluyla, yazdırılabilir web sayfaları olarak, letterbox'lar aracılığıyla ve gazetelerde ve dergilerde barkod olarak dağıtılır. Müşteriler bunları taramak, karşılığında ürün, hizmet veya indirim almak üzere bir mağazaya getirir.
  • Biniş kartları – Film bileti satın almaya benzer.

PassKit, bu senaryoların her biri için bir alternatif sunar:

  • Film biletleri – Satın aldıktan sonra müşteri bir etkinlik bileti kartı ekler (e-posta veya web sitesi bağlantısı aracılığıyla). Filmin zamanı yaklaştıkça, pass otomatik olarak kilit ekranında bir anımsatıcı olarak görünür ve sinemaya varışınızda geçiş kolayca alınır ve tarama için Cüzdan'da görüntülenir.
  • Bağlılık programı kartları – Mağazalar fiziksel kart sağlamak yerine (veya bunlara ek olarak) Mağaza Kartı Kartı Kartı verebilir (e-postayla veya web sitesi oturum açmasından sonra). Mağaza, anında iletme bildirimleri aracılığıyla geçişte hesabın bakiyesini güncelleştirme ve coğrafi konum hizmetlerini kullanma gibi ek özellikler sağlayabilir ve müşteri bir mağaza konumuna yaklaştığında geçiş otomatik olarak kilit ekranında görünebilir.
  • Kuponlar – Kupon geçişleri, izlemeye yardımcı olmak için benzersiz özelliklerle kolayca oluşturulabilir ve e-posta veya web sitesi bağlantıları aracılığıyla dağıtılabilir. İndirilen kuponlar, kullanıcı belirli bir konuma yaklaştığında ve/veya belirli bir tarihte (örneğin, süre sonu tarihi yaklaştığında) kilit ekranında otomatik olarak görüntülenebilir. Kuponlar kullanıcının telefonunda depolandığından, her zaman kullanışlıdır ve yanlış yerleştirilmemektedir. Kuponlar müşterilerin Yardımcı Uygulamaları indirmesini teşvik edebilir çünkü App Store bağlantıları Pass'e dahil edilebilir ve müşteriyle etkileşimi artırır.
  • Biniş geçişleri – Çevrimiçi bir check-in işleminden sonra müşteri, e-posta veya bağlantı yoluyla biniş kartını alır. Taşıma sağlayıcısı tarafından sağlanan Bir Eşlikçi Uygulaması, check-in işlemini içerebilir ve ayrıca müşterinin koltuğunu veya yemeğini seçme gibi ek işlevleri gerçekleştirmesine izin verebilir. Aktarım sağlayıcısı, aktarım gecikirse veya iptal edilirse geçişi güncelleştirmek için anında iletme bildirimlerini kullanabilir. Biniş süresi yaklaştıkça geçiş, kilit ekranında bir anımsatıcı olarak ve Geçişe hızlı erişim sağlamak için görünür.

PassKit, iOS cihazınızda barkodları depolamak ve görüntülemek için basit ve kullanışlı bir yol sağlar. Ek zaman ve konum kilit ekranı tümleştirmesi ile anında iletme bildirimleri ve Eşlikçi Uygulaması, çok gelişmiş satış, bilet ve faturalama hizmetleri için bir temel sunar.

PassKit Ekosistemi

PassKit yalnızca CocoaTouch içindeki bir API değildir, barkodların ve diğer verilerin güvenli paylaşımını ve yönetimini kolaylaştıran daha büyük bir uygulama, veri ve hizmet ekosisteminin bir parçasıdır. Bu üst düzey diyagram, geçişleri oluşturma ve kullanma konusunda yer alan farklı varlıkları gösterir:

Bu üst düzey diyagramda geçiş oluşturma ve kullanma ile ilgili varlıklar gösterilir

Ekosistemin her parçasının açıkça tanımlanmış bir rolü vardır:

  • Cüzdan – Apple'ın geçişleri depolayan ve görüntüleyen yerleşik iOS uygulaması. Geçişlerin gerçek dünyada kullanılmak üzere işlendiği tek yer burasıdır (yani barkod, geçişteki tüm yerelleştirilmiş verilerle birlikte görüntülenir).
  • Yardımcı Uygulamalar – Mağaza kartına değer ekleme, biniş kartındaki koltuğu değiştirme veya işletmeye özgü başka bir işlev gibi, verdikleri geçişlerin işlevselliğini genişletmek için geçiş sağlayıcıları tarafından oluşturulan iOS 6 uygulamaları. Geçişin yararlı olması için Yardımcı Uygulamalar gerekli değildir.
  • Sunucunuz – Geçişlerin oluşturulabileceği ve dağıtım için imzalandığı güvenli bir sunucu. Eşlikçi Uygulamanız yeni geçişler oluşturmak veya mevcut geçişlere güncelleştirme isteğinde bulunmak için sunucunuza bağlanabilir. İsteğe bağlı olarak Wallet'ın geçişleri güncelleştirmek için çağıracağı web hizmeti API'sini uygulayabilirsiniz.
  • APNS Sunucuları – Sunucunuz, APNS kullanarak belirli bir cihazda yapılan güncelleştirmeleri Cüzdan'a bildirebilir. Cüzdan'a bir bildirim göndererek değişikliğin ayrıntıları için sunucunuzla iletişime geçin. Yardımcı uygulamaların bu özellik için APNS uygulaması gerekmez (bunu dinleyebilirler PKPassLibraryDidChangeNotification ).
  • Conduit Apps – Doğrudan geçişleri işlemeyen (yardımcı uygulamalar gibi) ancak geçişleri tanıyarak ve Cüzdan'a eklenmesine izin vererek yardımcı programını geliştirebilen uygulamalar. Posta istemcileri, sosyal ağ tarayıcıları ve diğer veri toplama uygulamalarının tümü eklerle veya geçiş bağlantılarıyla karşılaşabilir.

Ekosistemin tamamı karmaşık göründüğünden bazı bileşenlerin isteğe bağlı olduğunu ve çok daha basit PassKit uygulamalarının mümkün olduğunu belirtmek gerekir.

Pass nedir?

Geçiş, bilet, kupon veya kartı temsil eden bir veri koleksiyonudur. Bir kişi tarafından tek bir kullanıma yönelik olabilir (ve bu nedenle uçuş numarası ve koltuk ayırma gibi ayrıntıları içerebilir) veya herhangi bir sayıda kullanıcı (indirim kuponu gibi) tarafından paylaşılabilen birden çok kullanım belirteci olabilir. Apple'ın Dosyaları Geçirme Hakkında belgesinde ayrıntılı bir açıklama mevcuttur.

Türler

Şu anda cüzdan uygulamasında geçişin düzeni ve üst kenarı ile ayırt edilebilen beş desteklenen tür:

  • Olay Bileti – küçük yarı daire kesim.
  • Biniş Kartı – yan çentikler, ulaşıma özgü simge belirtilebilir (örn. otobüs, tren, uçak).
  • Mağaza Kartı – kredi kartı veya banka kartı gibi yuvarlanmış üst.
  • Kupon – üst kısım boyunca delikli.
  • Genel – Mağaza Kartı ile aynı, üstte yuvarlatılmış.

Beş geçiş türü bu ekran görüntüsünde gösterilir (sırasıyla: kupon, genel, mağaza kartı, biniş kartı ve etkinlik bileti):

Beş geçiş türü bu ekran görüntüsünde gösterilmiştir

Dosya Yapısı

Geçiş dosyası aslında bazı belirli JSON dosyalarını (gerekli), çeşitli görüntü dosyalarını (isteğe bağlı) ve yerelleştirilmiş dizeleri (ayrıca isteğe bağlı) içeren bir .pkpass uzantısına sahip bir ZIP arşividir.

  • pass.json – gereklidir. Geçiş için tüm bilgileri içerir.
  • manifest.json – gereklidir. İmza dosyası ve bu dosya (manifest.json) dışında geçişteki her dosya için SHA1 karmaları içerir.
  • signature – gerekli. Dosyayı iOS Sağlama Portalı'nda oluşturulan sertifikayla imzalayarak manifest.json oluşturulur.
  • logo.png – isteğe bağlı.
  • background.png – isteğe bağlı.
  • icon.png – isteğe bağlı.
  • Yerelleştirilebilir dize dosyaları – isteğe bağlı.

Bir geçiş dosyasının dizin yapısı aşağıda gösterilmiştir (bu, ZIP arşivinin içeriğidir):

Bir geçiş dosyasının dizin yapısı burada gösterilmiştir

pass.json

JSON biçimidir çünkü geçişler genellikle bir sunucuda oluşturulur; bu, oluşturma kodunun sunucuda platformdan bağımsız olduğu anlamına gelir. Her geçişteki üç önemli bilgi parçası şunlardır:

  • teamIdentifier – Bu, oluşturduğunuz tüm geçişleri App Store hesabınıza bağlar. Bu değer iOS Sağlama Portalı'nda görünür.
  • passTypeIdentifier – Geçişleri birlikte gruplandırmak için Sağlama Portalı'na kaydolun (birden fazla tür üretirseniz). Örneğin, bir kafe, müşterilerinin sadakat kredisi kazanmasını sağlamak için bir mağaza kartı kartı kartı türü oluşturabilir, aynı zamanda indirim kuponları oluşturmak ve dağıtmak için ayrı bir kupon geçiş türü oluşturabilir. Aynı kafe canlı müzik etkinlikleri bile düzenleyebilir ve bunlar için Etkinlik Bileti geçişi düzenleyebilir.
  • serialNumber – Bu passTypeidentifier içinde benzersiz bir dize. Değer Cüzdan'a uygun değildir, ancak sunucunuzla iletişim kurarken belirli geçişleri izlemek için önemlidir.

Her Pass'te çok sayıda başka JSON anahtarı vardır ve bunun bir örneği aşağıda gösterilmiştir:

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

Barkod

Yalnızca 2B biçimler desteklenir: PDF417, Aztec, QR. Apple, 1B barkodların arka aydınlatmalı bir telefon ekranında tarama yapmaya uygun olmadığını iddia ediyor.

Barkod altında görüntülenen alternatif metin isteğe bağlıdır. Bazı satıcılar el ile okuyabilmek/yazabilmek ister.

ISO-8859-1 kodlaması en yaygın olanıdır ve geçişlerinizi okuyacak tarama sistemleri tarafından hangi kodlamanın kullanıldığını denetleyin.

İlgi (Kilit Ekranı)

Kilit ekranında bir geçişin görüntülenmesine neden olabilecek iki tür veri vardır:

Konum

Pass'te 10'a kadar konum belirtilebilir; örneğin müşterinin sık ziyaret yaptığı mağazalar veya bir sinema veya havaalanının konumu. Bir müşteri bu konumları Bir Yardımcı Uygulama aracılığıyla ayarlayabilir veya sağlayıcı kullanım verilerinden (müşterinin izniyle toplanırsa) bu konumları belirleyebilir.

Geçiş kilit ekranında görüntülendiğinde, kullanıcı alandan ayrıldığında geçişin kilit ekranından gizlenmesi için bir çit hesaplanır. Yarıçap, kötüye kullanımı önlemek için geçiş stiline bağlıdır.

Tarih ve Saat

Geçişte yalnızca bir tarih/saat belirtilebilir. Tarih ve saat, biniş kartları ve etkinlik biletleri için kilit ekranı anımsatıcılarını tetiklemede kullanışlıdır.

Birden çok kullanımlık bilet (tiyatro veya spor kompleksi için sezon bileti gibi) durumunda tarih/saatin güncelleştirilebilmesi için anında iletme veya PassKit API aracılığıyla güncelleştirilebilir.

Localization (Yerelleştirme)

Geçişi birden çok dile çevirmek, bir iOS uygulamasını yerelleştirmeye benzer; uzantıyla .lproj dile özgü dizinler oluşturun ve yerelleştirilmiş öğeleri içine yerleştirin. Metin çevirileri bir pass.strings dosyaya girilmelidir, yerelleştirilmiş görüntülerin ise Geçiş kökünde değiştirdikleri görüntüyle aynı ada sahip olması gerekir.

Güvenlik

Geçişler, iOS Sağlama Portalı'nda oluşturduğunuz özel bir sertifikayla imzalar. Geçişi imzalama adımları şunlardır:

  1. Geçiş dizinindeki her dosya için bir SHA1 karması hesaplayın (veya signature dosyasını eklemeyinmanifest.json; bunların hiçbiri bu aşamada zaten bulunmamalıdır).
  2. Her dosya adının JSON anahtarı/değer listesi olarak kendi karmasıyla yazın manifest.json .
  3. Dosyayı imzalamak manifest.json ve sonucu adlı signature bir dosyaya yazmak için sertifikayı kullanın.
  4. Her şeyi sıkıştırın ve sonuçta elde edilen dosyaya bir .pkpass dosya uzantısı verin.

Geçişi imzalamak için özel anahtarınız gerektiğinden, bu işlem yalnızca sizin denetlediğiniz güvenli bir sunucuda yapılmalıdır. Bir uygulamada geçişleri denemek ve oluşturmak için anahtarlarınızı DAĞıTMAYIN.

Yapılandırma ve Kurulum

Bu bölüm, sağlama ayrıntılarınızı ayarlamanıza ve ilk geçişinizi oluşturmanıza yardımcı olacak yönergeler içerir.

PassKit sağlama

Geçişin App Store'a girebilmesi için bir geliştirici hesabına bağlanması gerekir. Bunun için iki adım gerekir:

  1. Geçiş, Geçiş Türü Kimliği olarak adlandırılan benzersiz bir tanımlayıcı kullanılarak kaydedilmelidir.
  2. Geçişi geliştiricinin dijital imzası ile imzalamak için geçerli bir Sertifika oluşturulmalıdır.

Geçiş Türü Kimliği oluşturmak için aşağıdakileri yapın.

Geçiş Türü Kimliği oluşturma

İlk adım, desteklenecek her farklı geçiş türü için bir Geçiş Türü Kimliği ayarlamaktır. Geçiş Kimliği (veya Geçiş Türü tanımlayıcısı), Geçiş için benzersiz bir tanımlayıcı oluşturur. Sertifika kullanarak geçişi geliştirici hesabınızla ilişkilendirmek için bu kimliği kullanacağız.

  1. iOS Sağlama Portalı'nın Sertifikalar, Tanımlayıcılar ve Profiller bölümünde Tanımlayıcılar'a gidin ve Tür Kimliklerini Geçir'i seçin. Ardından yeni bir geçiş türü oluşturmak için düğmeyi seçin + : Yeni bir geçiş türü oluşturma

  2. Geçiş için bir Açıklama (ad) ve Tanımlayıcı (benzersiz dize) sağlayın. Tüm Geçiş Türü kimliklerinin dize pass. ile başlaması gerektiğini unutmayın. Bu örnekte şunu kullanırız pass.com.xamarin.coupon.banana : Açıklama ve Tanımlayıcı Sağlayın

  3. Kaydet düğmesine basarak Kimlik Geçir'i onaylayın.

Sertifika oluşturma

Bu Geçiş Türü Kimliği için yeni bir Sertifika oluşturmak için aşağıdakileri yapın:

  1. Listeden yeni oluşturulan Geçiş Kimliğini seçin ve Düzenle'ye tıklayın:Listeden yeni Geçiş Kimliğini seçin

    Ardından Sertifika Oluştur... öğesini seçin:

    Sertifika Oluştur'u seçin

  2. Sertifika İmzalama İsteği (CSR) oluşturmak için adımları izleyin.

  3. Geliştirici portalında Devam düğmesine basın ve sertifikanızı oluşturmak için CSR'yi karşıya yükleyin.

  4. Sertifikayı indirin ve anahtarlığınıza yüklemek için sertifikaya çift tıklayın.

Bu Geçiş Türü Kimliği için bir sertifika oluşturduğumuza göre, sonraki bölümde el ile geçişin nasıl derlendiğini açıklanmaktadır.

Cüzdan Için Sağlama hakkında daha fazla bilgi için Özelliklerle Çalışma kılavuzuna bakın.

El ile Geçiş Oluşturma

Artık Geçiş Türü'nü oluşturduğumuza göre simülatörde veya cihazda test etmek için el ile bir geçiş oluşturabiliriz. Geçiş oluşturma adımları şunlardır:

  • Geçiş dosyalarını içerecek bir dizin oluşturun.
  • Gerekli tüm verileri içeren bir pass.json dosyası oluşturun.
  • Klasöre görüntü ekleyin (gerekirse).
  • Klasördeki her dosya için SHA1 karmalarını hesaplayın ve manifest.json yazın.
  • İndirilen sertifika .p12 dosyasıyla manifest.json imzalayın.
  • Dizinin içeriğini sıkıştırın ve .pkpass uzantısıyla yeniden adlandırın.

Bu makalenin örnek kodunda geçiş oluşturmak için kullanılabilecek bazı kaynak dosyaları vardır. CreateAPassManually dizininin dizinindeki CouponBanana.raw dosyaları kullanın. Aşağıdaki dosyalar vardır:

Bu dosyalar var

pass.json açın ve JSON'ı düzenleyin. Apple Geliştirici hesabınızla eşleşmesi passTypeIdentifier için en azından ve teamIdentifer öğesini güncelleştirmeniz gerekir.

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

Daha sonra her dosya için karmaları hesaplamanız ve dosyayı oluşturmanız manifest.json gerekir. İşiniz bittiğinde şuna benzer olacaktır:

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

Daha sonra, bu Geçiş Türü Kimliği için oluşturulan sertifika (.p12 dosyası) kullanılarak bu dosya için bir imza oluşturulmalıdır.

Mac'te Oturum Açma

Apple İndirmeleri sitesinden Cüzdan Tohumu Destek Malzemeleriniindirin. signpass Klasörünüzü geçişe dönüştürmek için aracını kullanın (bu, SHA1 karmalarını da hesaplar ve çıkışı bir .pkpass dosyasına sıkıştırır).

Test Etme

Bu araçların çıkışını incelemeniz gerekirse (dosya adını .zip olarak ayarlayarak ve ardından açarak), aşağıdaki dosyaları görürsünüz (ve signature dosyalarının eklenmesine manifest.json dikkat edin):

Bu araçların çıkışını inceleme

İmzaladıktan sonra ZIPped ve dosyayı yeniden adlandırdıktan (örneğin, olarak BananaCoupon.pkpass) test etmek için simülatörün içine sürükleyebilir veya gerçek bir cihazda almak için kendinize e-posta ile gönderebilirsiniz. Geçişi eklemek için aşağıdaki gibi bir ekran görmeniz gerekir:

Geçiş ekranını ekleme

Normalde bu işlem bir sunucuda otomatik hale getirilebilir, ancak el ile geçiş oluşturma, yalnızca arka uç sunucusunun desteğini gerektirmeyen kuponlar oluşturan küçük işletmeler için bir seçenek olabilir.

Cüzdan

Cüzdan, PassKit ekosisteminin merkezi parçasıdır. Bu ekran görüntüsü boş Cüzdan'ı ve geçiş listesinin ve tek tek geçişlerin nasıl göründüğünü gösterir:

Bu ekran görüntüsü boş Cüzdan'ı ve geçiş listesinin ve tek tek geçişlerin nasıl göründüğünü gösterir

Cüzdan'ın özellikleri şunlardır:

  • Bu, geçişlerin tarama için barkodlarıyla işlendiği tek yerdir.
  • Kullanıcı güncelleştirmelerin ayarlarını değiştirebilir. Etkinleştirilirse anında iletme bildirimleri, Geçiş'teki verilerde güncelleştirmeleri tetikleyebilir.
  • Kullanıcı kilit ekranı tümleştirmesini etkinleştirebilir veya devre dışı bırakabilir. Etkinleştirilirse, bu, geçişe eklenen ilgili zamana ve konum verilerine göre geçişin kilit ekranında otomatik olarak görünmesini sağlar.
  • Geçişin ters tarafı, geçiş JSON'unda bir web-server-URL'si sağlanıyorsa, çekme-yenilemeyi destekler.
  • Uygulamanın kimliği geçiş JSON'unda sağlanıyorsa Yardımcı Uygulamalar açılabilir (veya indirilebilir).
  • Geçişler silinebilir (sevimli bir parçalama animasyonu ile).

Cüzdana Geçiş Ekleme

Cüzdan'a aşağıdaki yollarla geçişler eklenebilir:

  • Conduit Apps – Bunlar doğrudan geçişleri işlemez, doğrudan geçiş dosyalarını yükler ve kullanıcıya bunları Cüzdan'a ekleme seçeneği sunar.

  • Yardımcı Uygulamalar – Bunlar, geçişleri dağıtmak ve bunlara göz atmak veya düzenlemek için ek işlevler sunmak için sağlayıcılar tarafından yazılır. Xamarin.iOS uygulamaları, geçişleri oluşturmak ve işlemek için PassKit API'sine tam erişime sahiptir. Geçişler daha sonra kullanılarak Cüzdan'a PKAddPassesViewControllereklenebilir. Bu işlem, bu belgenin Yardımcı Uygulamalar bölümünde daha ayrıntılı olarak açıklanmıştır.

Kanal Uygulamaları

Kanal uygulamaları, bir kullanıcı adına geçiş alabilen ara uygulamalardır ve içerik türünü tanıyacak ve Cüzdan'a ekleme işlevselliği sağlayacak şekilde programlanmalıdır. Kanal uygulamalarına örnek olarak şunlar verilebilir:

  • Posta : Eki Geçiş olarak tanır.
  • Safari : Bir geçiş URL'si bağlantısına tıklandığında pass Content-Type'ı tanır.
  • Diğer özel uygulamalar – Ek alan veya açık bağlantılar (sosyal medya istemcileri, posta okuyucular vb.) tüm uygulamalar.

Bu ekran görüntüsü, iOS 6'da Posta'nın bir geçiş eklerini nasıl tanıdığını ve (dokunulduğunda) Cüzdan'a ekleme tekliflerini gösterir.

Bu ekran görüntüsü, iOS 6'da Posta'nın geçiş eklerini nasıl tanıdığını gösterir

Bu ekran görüntüsü, Posta'nın Cüzdan'a nasıl geçiş eki ekleme tekliflerini gösterir

Geçişler için uygun olabilecek bir uygulama oluşturuyorsanız, bunlar şu şekilde tanınabilir:

  • Dosya uzantısı - .pkpass
  • MIME Türü - application/vnd.apple.pkpass
  • UTI – com.apple.pkpass

Bir kanal uygulamasının temel işlemi, geçiş dosyasını almak ve kullanıcıya pass'i Cüzdan'larına ekleme seçeneği vermek için PassKit'leri PKAddPassesViewController çağırmaktır. Bu görünüm denetleyicisinin uygulanması, Tamamlayıcı Uygulamalar'ın sonraki bölümünde ele alınmıştır.

Conduit Uygulamalarının, Eşlikçi Uygulamalarla aynı şekilde belirli bir geçiş Türü Kimliği için sağlanması gerekmez.

Yardımcı Uygulamalar

Yardımcı uygulama, Geçiş oluşturma, Geçiş ile ilişkili bilgileri güncelleştirme ve uygulamayla ilişkili geçişleri yönetme gibi geçişlerle çalışmak için ek işlevler sağlar.

Yardımcı uygulamalar Cüzdan'ın özelliklerini yinelemeye çalışmamalıdır. Tarama için geçişleri görüntülemeleri amaçlanmamıştır.

Bu bölümün geri kalanında PassKit ile etkileşim kuran temel bir Yardımcı Uygulamanın nasıl derlendiğini açıklanmaktadır.

Hazırlanıyor

Cüzdan bir mağaza teknolojisi olduğundan, uygulamanın ayrı olarak sağlanması gerekir ve Ekip Sağlama Profili veya Joker Karakter Uygulama Kimliği kullanılamaz. Cüzdan uygulaması için benzersiz bir Uygulama Kimliği ve Sağlama Profili oluşturmak için Özelliklerle Çalışma kılavuzuna bakın.

Destek Hakları

Entitlements.plist dosyası tüm son Xamarin.iOS projesine eklenmelidir. Yeni bir Entitlements.plist dosyası eklemek için Yetkilendirmelerle Çalışma kılavuzundaki adımları izleyin.

Yetkilendirmeleri ayarlamak için aşağıdakileri yapın:

Entitlements.plist düzenleyicisini açmak için Çözüm Bölmesi'ndeki Entitlements.plist dosyasına çift tıklayın:

Entitlements.plst düzenleyicisi

Cüzdan bölümünde Cüzdan'ı Etkinleştir seçeneğini belirleyin

Cüzdan yetkilendirmesini etkinleştirme

Varsayılan seçenek, uygulamanızın tüm geçiş türlerine izin vermesine yöneliktir. Ancak uygulamanızı kısıtlamak ve yalnızca takım geçişi türlerinin bir alt kümesine izin vermek mümkündür. Bunu etkinleştirmek için Takım geçişi türlerinin alt kümesine izin ver'i seçin ve izin vermek istediğiniz alt kümenin geçiş türü tanımlayıcısını girin.

Hata ayıklama

Uygulamanızı dağıtırken sorun yaşıyorsanız doğru Sağlama Profilini kullandığınızdan ve Entitlements.plist i Telefon Paket İmzalama seçeneklerinde Özel yetkilendirmeler dosyası olarak öğesinin seçili olduğundan emin olun.

Dağıtım sırasında bu hatayla karşılaşırsanız:

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

pass-type-identifiers sonra yetkilendirmeler dizisi yanlıştır (veya Sağlama Profili ile eşleşmiyor). Geçiş Türü Kimliklerinin ve Ekip Kimliğinizin doğru olduğunu doğrulayın.

Sınıflar

Uygulamaların geçişlere erişmesi için aşağıdaki PassKit sınıfları kullanılabilir:

  • PKPass : Geçiş örneği.
  • PKPassLibrary – Cihazdaki geçişlere erişmek için API sağlar.
  • PKAddPassesViewController – Kullanıcının Cüzdan'ında kaydetmesi için bir geçiş kartı görüntülemek için kullanılır.
  • PKAddPassesViewControllerDelegate – Xamarin.iOS geliştiricileri

Örnek

Bu makale için örnekteki PassLibrary projesine bakın. Cüzdan Eşlikçisi Uygulamasında gerekli olabilecek aşağıdaki yaygın işlevleri gösterir:

Cüzdan'ın Kullanılabilir olup olmadığını kontrol edin

Cüzdan iPad'de mevcut olmadığından uygulamaların PassKit özelliklerine erişmeye çalışmadan önce kontrol etmesi gerekir.

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

Geçiş Kitaplığı Örneği Oluşturma

PassKit kitaplığı tek bir kitaplık değildir, uygulamaların PassKit API'sine erişmek için oluşturması ve depolaması ve örneği oluşturması gerekir.

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

Geçişlerin Listesini Alma

Uygulamalar kitaplıktan bir geçiş listesi isteyebilir. Bu liste Otomatik olarak PassKit tarafından filtrelenir, böylece yalnızca Ekip Kimliğiniz ile oluşturulmuş ve Yetkilendirmelerinizde listelenen geçişleri görebilirsiniz.

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

Simülatörün döndürülen geçişlerin listesini filtrelemediğini, bu nedenle bu yöntemin her zaman gerçek cihazlarda test edilmesi gerektiğini unutmayın. Bu liste bir UITableView içinde görüntülenebilir. Örnek uygulama, iki kupon eklendikten sonra aşağıdaki gibi görünür:

İki kupon eklendikten sonra örnek uygulama şöyle görünür

Geçişleri Görüntüleme

Yardımcı uygulamalar içindeki geçişlerin işlenmesi için sınırlı bir bilgi kümesi sağlanır.

Örnek kodda olduğu gibi geçiş listelerini görüntülemek için bu standart özellikler kümesinden seçim yapın.

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

Bu dize örnekte bir uyarı olarak gösterilir:

ÖrnekteKi Kupon Seçili uyarısı

Yöntemini, tasarladığınız geçişlerdeki alanlardan veri almak için de kullanabilirsiniz LocalizedValueForFieldKey() (çünkü hangi alanların mevcut olması gerektiğini bilirsiniz). Örnek kod bunu göstermez.

Dosyadan Geçiş Yükleme

Cüzdan'a yalnızca kullanıcının izniyle bir geçiş eklenebildiği için, karar vermelerini sağlamak için bir görünüm denetleyicisi sunulmalıdır. Bu kod, örnekteki Ekle düğmesinde, uygulamaya eklenmiş önceden oluşturulmuş bir geçişi yüklemek için kullanılır (bunu imzalamış olduğunuz parolayla değiştirmelisiniz):

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

Geçiş, Ekle ve İptal seçenekleriyle sunulur:

Ekle ve İptal seçenekleriyle sunulan geçiş

Var Olan Bir Geçişi Değiştirme

Mevcut bir geçişin değiştirilmesi kullanıcının iznini gerektirmez, ancak geçiş zaten yoksa başarısız olur.

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

Geçiş Düzenleme

PKPass değiştirilemez, bu nedenle kodunuzdaki geçiş nesnelerini güncelleştiremezsiniz. Geçişteki verileri değiştirmek için, bir uygulamanın geçişlerin kaydını tutabilen ve uygulamanın indirebileceği güncelleştirilmiş değerlerle yeni bir geçiş dosyası oluşturabilen bir web sunucusuna erişimi olmalıdır.

Geçişlerin özel ve güvenli tutulması gereken bir sertifikayla imzalanması gerektiğinden, geçiş dosyası oluşturma işlemi sunucuda yapılmalıdır.

Güncelleştirilmiş bir geçiş dosyası oluşturulduktan sonra, cihazdaki Replace eski verilerin üzerine yazmak için yöntemini kullanın.

Tarama için geçiş görüntüleme

Daha önce belirtildiği gibi yalnızca Cüzdan tarama için bir geçiş kartı görüntüleyebilir. Aşağıdaki gibi yöntemi kullanılarak OpenUrl bir Geçiş görüntülenebilir:

UIApplication.SharedApplication.OpenUrl (p.PassUrl);

Değişiklik Bildirimlerini Alma

Uygulamalar, kullanarak PKPassLibraryDidChangeNotificationGeçiş Kitaplığı'na yapılan değişiklikleri dinleyebilir. Değişikliklere arka planda güncelleştirmeleri tetikleyen bildirimler neden olabilir, bu nedenle bunları uygulamanızda dinlemek iyi bir uygulamadır.

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

PKPassLibrary tekil olmadığından bildirime kaydolırken bir kitaplık örneğinin geçirilmesi önemlidir.

Sunucu İşleme

PassKit'i desteklemek için bir sunucu uygulaması oluşturmanın ayrıntılı bir tartışması bu giriş makalesinin kapsamı dışındadır.

Bkz. dotnet-passbook açık kaynak C# sunucu tarafı kodu.

Anında İletme Bildirimleri

Geçişleri güncelleştirmek için anında iletme bildirimleri kullanma hakkında ayrıntılı bir tartışma, bu giriş makalesinin kapsamı dışındadır.

Güncelleştirmeler gerektiğinde Cüzdan'dan gelen web isteklerine yanıt vermek için Apple tarafından tanımlanan REST benzeri API'yi uygulamanız gerekir.

Daha fazla bilgi için Apple'ın Geçiş Bilgilerini Güncelleştirme kılavuzuna bakın.

Özet

Bu makalede PassKit tanıtıldı, yararlı olmasının bazı nedenleri açıklandı ve tam bir PassKit çözümü için uygulanması gereken farklı parçalar açıklandı. Burada, Apple Developer hesabınızı geçiş oluşturmak üzere yapılandırmak için gereken adımlar, el ile geçiş yapma işlemi ve ayrıca Xamarin.iOS uygulamasından PassKit API'lerine erişme adımları açıklanmıştır.