Xamarin.iOS에서 PassKitPassKit in Xamarin.iOS

IOS Wallet 앱을 사용 하면 장치의 디지털 전달을 저장할 수 있습니다.The iOS Wallet app allows users to store digital passes on their devices. 이러한 전달 merchants에서 생성 되며 전자 메일에 Url 통해 또는 판매자의 iOS 앱을 통해 고객에 게 전송 됩니다.These passes are generated by merchants and sent to the customer via email, URLs, or through the merchant's own iOS app. 이러한 전달 탑승권 로열티 카드에 영화 티켓에서 다양 한 항목을 나타낼 수 있습니다.These passes can represent various things, from movie tickets to loyalty cards to boarding passes. PassKit framework에는 개발자를 패스를 프로그래밍 방식으로 조작할 수 있습니다.The PassKit framework allows developers to interact with passes programmatically.

이 문서는 Wallet 및 PassKit API를 사용 하 여 Xamarin.iOS와 함께 소개 합니다.This document introduces Wallet and using the PassKit API with Xamarin.iOS.

요구 사항Requirements

이 문서에 설명 된 PassKit 기능에는 iOS 6 및 Xamarin.iOS 6.0 함께 Xcode 4.5 필요 합니다.The PassKit features discussed in this document require iOS 6 and Xcode 4.5, along with Xamarin.iOS 6.0.

소개Introduction

PassKit 해결 하는 주요 문제를 배포 및 관리 바코드입니다.The key problem that PassKit solves is the distribution and management of barcodes. 바코드 현재 사용 하는 방법의 몇 가지 실제 예에는 다음이 포함 됩니다.Some real-world examples of how barcodes are currently used include:

  • 영화 티켓 온라인 구매 – 고객은 해당 티켓을 나타내는 바코드 전자 메일로 일반적으로 합니다.Buying movie tickets online – Customers are typically emailed a barcode that represents their tickets. 이 바코드는 인쇄 하 고는 영화를 검색 하 여 항목에 대 한 이동 됩니다.This barcode is printed and taken to the cinema to be scanned for entry.
  • 로열티 카드 – 상품을 구매할 때 검색 및 표시, 고객에 게 다양 한 해당 wallet 나 핸드백에 있는 서로 다른 저장소 특정 카드를 포함 합니다.Loyalty cards – Customers carry a number of different store-specific cards in their wallet or purse, for display and scanning when they purchase goods.
  • 쿠폰 – 쿠폰 인쇄할 수 있는 웹 페이지, 신문 및 잡지에서 바코드와 레터 박스를 통해 전자 메일을 통해 배포 됩니다.Coupons – Coupons are distributed via email, as printable web pages, through letterboxes and as barcodes in newspapers and magazines. 고객에 게 반환 상품, 서비스 또는 할인을 받으려면 검색에 대 한 저장소에 맞게 합니다.Customers bring them to a store for scanning, to receive goods, services or discounts in return.
  • 전달 보드 – 영화 티켓을 구매 하는 경우와 유사 합니다.Boarding passes – Similar to buying a movie ticket.

PassKit는 이러한 각 시나리오에 대 한 대안을 제공합니다.PassKit offers an alternative for each of these scenarios:

  • 영화 티켓 – 고객 구매 후 (전자 메일 또는 웹 사이트 링크)를 통해 이벤트 티켓 패스를를 추가 합니다.Movie tickets – After purchase, the customer adds an event ticket pass (via email or a website link). 동영상 방법에 대 한 시간을 참고로, 잠금 화면에서 단계를 자동으로 표시 됩니다와 영화 도착에 패스를 쉽게 검색 하 고 스캔 Wallet에 표시 합니다.As the time for the movie approaches, the pass will automatically appear on the lock-screen as a reminder, and on arrival at the cinema the pass is easily retrieved and displayed in Wallet for scanning.
  • 로열티 카드 – 대신 (또는 외에) 실제 카드를 제공 저장소 실행할 수 있습니다 (전자 메일을 통해 또는 웹 사이트 로그인 한 후) 저장소 카드 전달 합니다.Loyalty cards – Rather than (or in addition to) providing a physical card, stores can issue (via email or after a website login) a Store Card Pass. 저장소, 푸시 알림을 통해 패스에서 계좌의 잔고를 업데이트 하는 등 추가 기능을 제공할 수 있습니다 나타나고 지리적 위치 서비스를 사용 하 여 패스를 수 자동으로 잠금 화면에 고객은 저장소 위치 근처 하는 경우.The store can provide additional features such as updating the balance of the account on the pass via push notifications, and using geolocation services the pass could automatically appear on the lock-screen when the customer is near a store location.
  • 쿠폰 – 쿠폰 전달 쉽게 추적을 사용 하는 데 고유한 특성을 사용 하 여 생성 및 전자 메일 또는 웹 사이트 링크를 통해 배포할 수 있습니다.Coupons – Coupon passes can easily be generated with unique characteristics to help with tracking, and distributed via email or website links. 사용자가 특정 위치 주변 및/또는 지정된 된 날짜 (예: 때 만료 날짜가 임박)에 다운로드 한 쿠폰 수 자동으로 잠금 화면에 표시 됩니다.Downloaded coupons can automatically appear on the lock-screen when the user is near a specific location, and/or on a given date (such as when the expiry date is approaching). 쿠폰 사용자의 전화에 저장 되므로 항상 유용한 이며 위치가 가져오기 수행 합니다.Because the coupons are stored on the user’s phone, they are always handy and do not get misplaced. 쿠폰에는 고객이 앱 스토어 링크 고객과 engagement 증가 단계를 통합할 수 있으므로 도우미 앱을 다운로드할 수 있습니다 것이 좋습니다.Coupons might encourage customers to download Companion Apps because App Store links can be incorporated into the Pass, increasing engagement with the customer.
  • 전달 보드 – 온라인 체크 인 프로세스를 고객 전자 메일 또는 링크를 통해 해당 탑승권 받게 됩니다.Boarding passes – After an online check-in process, the customer would receive their boarding pass via email or a link. 전송 자가 제공한 도우미 앱을 체크 인 프로세스를 포함을 해당 사용자 또는 음식 선택과 같은 추가 기능을 수행 하는 고객을 허용할 수 있습니다.A Companion App provided by the transport provider could include the check-in process, and also allow the customer to perform additional functions like choosing their seat or meal. 전송 공급자를 사용 하 여 푸시 알림을 업데이트 pass 전송 지연 또는 취소 하는 경우.The transport provider can use push notifications to update the pass if transport is delayed or canceled. 탑승 시간 접근 방식으로 알림으로 및 패스에 빠르게 액세스할 수 패스에 잠금 화면에 표시 됩니다.As the boarding time approaches the pass will appear on the lock-screen as a reminder and to provide quick access to the Pass.

본질적으로 PassKit 저장 하 고 iOS 장치에서 바코드를 표시 하는 간단 하 고 편리한 방법을 제공 합니다.At its core, PassKit provides a simple and convenient way to store and display barcodes on your iOS device. 추가 시간 및 위치 잠금 화면 통합을 사용 하 여 푸시 알림 및 관련 응용 프로그램 통합 매우 복잡 한 판매에 대 한 토대를 제공 티켓팅 및 서비스를 청구 합니다.With the additional time and location lock-screen integration, push notifications and Companion Application integrate it offers a foundation for very sophisticated sales, ticketing and billing services.

PassKit 에코 시스템PassKit Ecosystem

PassKit 아니며 CocoaTouch 내에서 API만, 대신 앱, 데이터 및 보안 공유에 도움이 되는 서비스 및 관리 바코드 및 기타 데이터를 더 큰 에코 시스템의 일부입니다.PassKit is not just an API within CocoaTouch, rather it is part of a larger ecosystem of apps, data and services that facilitate the secure sharing and management of barcodes and other data. 이 높은 수준의 다이어그램을 만들고 패스를 사용 하 여 관련 될 수 있는 다양 한 엔터티를 보여 줍니다.This high-level diagram shows the different entities that can be involved in creating and using passes:

에코 시스템의 각 부분을 명확 하 게 정의 된 역할에 있습니다.Each piece of the ecosystem has a clearly-defined role:

  • Wallet – Apple의 기본 제공 iOS 앱을 저장 하 고 전달 표시 합니다.Wallet – Apple’s built-in iOS app that stores and displays passes. Pass (ie 바코드와 함께 표시 됩니다는 패스에서 지역화 된 모든 데이터) 실제 세계에서 사용 하기 위해 렌더링 되는 유일한 위치입니다.This is the only place that passes are rendered for use in the real world (ie the barcode is displayed, along with all the localized data in the pass).
  • 도우미 앱 –에서 제작한 iOS 6 응용 프로그램의 저장소 카드, 탑승권 이나 다른 비즈니스 관련 함수에 사용자를 변경 하려면 값을 추가 하는 등 실행 전달 기능을 확장 하는 공급자를 전달 합니다.Companion Apps – iOS 6 apps built by pass providers to extend the functionality of the passes they issue, such as adding value to a store card, changing the seat on a boarding pass or other business-specific function. 도우미 앱 유용 하 게 전달에 대 한 필요 하지 않습니다.Companion Apps are not required for a pass to be useful.
  • 서버 – 여기서 전달 수 생성 하 고 배포에 대 한 서명 된 보안 서버입니다.Your server – A secure server where passes can be generated and signed for distribution. 도우미 앱은 새 패스를 생성 하거나 기존 전달에 대 한 업데이트 요청을 서버에 연결할 수 있습니다.Your Companion App may connect to your server to generate new passes or request updates to existing passes. 필요에 따라 Wallet은 업데이트를 호출 하는 서비스 API에 전달 하는 웹을 구현할 수 있습니다.You may optionally implement the web service API that Wallet would call to update passes.
  • APNS 서버 – 서버 Wallet APNS를 사용 하 여 지정된 된 장치에서 전달에 대 한 업데이트를 알릴 수 있습니다.APNS Servers – Your server has the ability to notify Wallet of updates to a pass on a given device using APNS. 변경의 세부 정보에 대 한 서버 연락을 다음는 Wallet에 알림을 푸시하십시오.Push a notification to Wallet which will then contact your server for details of the change. 도우미 앱이이 기능에 대 한 APNS를 구현할 필요가 없습니다 (대기할 수는 PKPassLibraryDidChangeNotification ).Companion apps do not need to implement APNS for this feature (they can listen to the PKPassLibraryDidChangeNotification ).
  • 통로 앱 – 직접 조작 하지는 응용 프로그램 (예: 도우미 앱 수행 됨)를 통과 하지만 전달 인식 Wallet에 추가할 수 있도록 하는 유틸리티를 향상 시킬 수 있습니다.Conduit Apps – Applications that don’t directly manipulate passes (like companion apps do), but which can improve their utility by recognizing passes and allowing them to be added to Wallet. 메일 클라이언트, 소셜 네트워크 브라우저 및 기타 데이터 집계 앱 모두 발생할 첨부 파일 또는 전달에 대 한 링크입니다.Mail clients, social network browsers and other data aggregation apps may all encounter attachments or links to passes.

일부 구성 요소가 선택 사항임을 훨씬 PassKit 구현 가능한는 주목할 만한 가치가 전체 에코 시스템은 복잡 합니다.The entire ecosystem looks complex, so it’s worth noting that some components are optional and much simpler PassKit implementations are possible.

전달 이란?What is a Pass?

패스를는 티켓, 쿠폰 또는 카드를 나타내는 데이터의 컬렉션입니다.A pass is a collection of data representing a ticket, coupon or card. 해당 개별 사용자가 단일 사용을 위한 것일 수 있습니다 (및 따라서 비행 수 및 사용자 할당 등의 세부 정보를 포함) 또는 원하는 수의 사용자 (예: 할인 쿠폰)에서 공유할 수 있는 여러 사용 하 여 토큰을 될 수 있습니다.It may be intended for a single use by an individual (and therefore contain details such as a flight number and seat allocation) or it may a multiple use token that can be shared by any number of users (such as a discount coupon). Apple에 대 한 자세한 설명을 수 전달에 대 한 파일 문서.A detailed description is available in Apple’s About Pass Files document.

유형Types

현재 5 지원 형식인 패스의 레이아웃 및 위쪽 가장자리도 Wallet 앱에서 구분할 수 있습니다.Currently five supported types, which can be distinguished in the Wallet app by the layout and top edge of the pass:

  • 이벤트 티켓 -작은 반원형 잘라낸 부분입니다.Event Ticket – small semicircular cutout.
  • 딩 전달 – 쪽, 전송별 아이콘에 대 한 조건 (예: 지정할 수 있습니다Boarding Pass – notches in side, transport-specific icon can be specified (eg. 버스, 기차, 항공기)입니다.bus, train, airplane).
  • 카드 저장 반올림 된-신용 카드나 직불 카드와 같은 상위 합니다.Store Card – rounded top, like a credit or debit card.
  • 쿠폰 맨 위에 있는 천공 – 합니다.Coupon – perforated along the top.
  • 제네릭 – 저장소 카드에 둥근된 top와 동일 합니다.Generic – same as Store Card, rounded top.

5 단계 형식을이 스크린샷에 표시 됩니다 (순서 대로: 쿠폰, 일반, 카드, 탑승권 및 이벤트 티켓 저장):The five pass types are shown in this screenshot (in order: coupon, generic, store card, boarding pass and event ticket):

파일 구조File Structure

Pass 파일을 사용 하 여 ZIP 보관 파일을 실제로 .pkpass 확장을 일부 특정 JSON 파일 (필수), 다양 한 이미지 파일 (선택 사항) 및 지역화 된 문자열 (옵션).A pass file is actually a ZIP archive with a .pkpass extension, containing some specific JSON files (required), a variety of image files (optional) as well as localized strings (also optional).

  • pass.json – 필수 항목입니다.pass.json – required. Pass에 대 한 모든 정보를 포함합니다.Contains all the information for the pass.
  • manifest.json – 필수 항목입니다.manifest.json – required. 서명 파일을 제외 하 고 패스에서 각 파일과이 파일 (은 manifest.json)에 대 한 SHA1 해시를 포함합니다.Contains SHA1 hashes for each file in the pass except the signature file and this file (manifest.json).
  • 서명 – 필수 항목입니다.signature – required. 서명 하 여 만들어진 여 manifest.json iOS 프로 비전 포털에서에서 생성 된 인증서를 사용 하 여 파일입니다.Created by signing the manifest.json file with the certificate generated in the iOS Provisioning Portal.
  • logo.png – 선택 사항입니다.logo.png – optional.
  • background.png – 선택 사항입니다.background.png – optional.
  • icon.png – 선택 사항입니다.icon.png – optional.
  • 지역화 가능한 문자열 파일 – 선택 사항입니다.Localizable strings files – optional.

Pass 파일의 디렉터리 구조는 다음과 같습니다 (이 ZIP 보관 파일의 내용을):Directory structure of a pass file is shown below (this is the contents of the ZIP archive):

pass.jsonpass.json

전달 서버에서 일반적으로 만들어지기 때문에 JSON 형식은 – 즉, 생성 코드를 플랫폼 제약 없는 서버에 있습니다.JSON is the format because passes are typically created on a server – it means that the generation code is platform-agnostic on the server. 모든 패스에서 정보의 세 가지 주요 부분은 다음과 같습니다.The three key pieces of information in every pass are:

  • teamIdentifier –이 앱 스토어 계정에 생성 되는 모든 패스를 연결 합니다.teamIdentifier – This links all passes you generate to your App Store account. 이 값은 iOS 프로 비전 포털에에서 표시 합니다.This value is visible in the iOS Provisioning Portal.
  • passTypeIdentifier – (둘 이상의 형식 생성) 하는 경우 그룹에 프로 비전 포털에서 등록을 함께 전달 합니다.passTypeIdentifier – Register in Provisioning Portal to group passes together (if you produce more than one type). 예를 들어 커피숍 해당 고객 충성도 크레딧을 수 있도록 저장소 카드 전달 형식을 만들 수 있지만 개별 쿠폰 만들어 할인 쿠폰을 배포 하는 형식 전달 합니다.For example, a coffee shop might create a store card pass type to allow their customers to earn loyalty credits, but also a separate coupon pass type to create and distribute discount coupons. 도 해당 동일한 커피숍 라이브 뮤직 이벤트를 저장 하 고 대해서 이벤트 티켓 패스를 실행할 수 있습니다.That same coffee shop might even hold live music events and issue Event Ticket passes for those.
  • serialNumber –이 고유 문자열로 passTypeidentifier 합니다.serialNumber – A unique string within this passTypeidentifier . 값은 Wallet에 불투명 있지만 특정 전달 서버와 통신할 때 추적에 대 한 중요 합니다.The value is opaque to Wallet, but is important for tracking specific passes when communicating with your server.

많은 수의 예는 다음과 같습니다. 각 패스에서 다른 JSON 키 같습니다.There is a large number of other JSON keys in each Pass, an example of which is shown below:

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

바코드Barcodes

만 2D 형식이 지원 됩니다. PDF417, Aztec, QR.Only 2D formats are supported: PDF417, Aztec, QR. Apple 1d 바코드 백라이트 전화 화면에서 검색 하는 데 적합 하지는 클레임입니다.Apple claims that 1D barcodes are unsuited to scanning on a backlit phone screen.

바코드 아래에 표시 되는 대체 텍스트는 선택 사항 – 일부 merchants 수동으로 읽기/형식 수 있게 되기를 원하는 합니다.Alternate text displayed below the barcode is optional – some merchants want to be able to read/type manually.

ISO-8859-1 인코딩을 가장 일반적인 확인 패스를 읽어들일 검색 시스템으로는 인코딩이 사용 됩니다.ISO-8859-1 encoding is the most common, check which encoding is used by the scanning systems that will read your passes.

관련성 (잠금 화면)Relevancy (Lock Screen)

잠금 화면에 표시 되는 패스를 일으킬 수 있는 데이터는 다음과 같은 두 종류가 있습니다.There are two types of data that can cause a pass to be displayed on the lock-screen:

위치Location

예를 들어 고객이 자주 방문 하는 저장소 또는 영화 또는 공항의 위치는 패스에서 최대 10 개의 위치를 지정할 수 있습니다.Up to 10 locations can be specified in a Pass, eg stores that a customer frequently visits, or the location of a cinema or airport. 고객 관련 앱을 통해 이러한 위치를 설정할 수 또는 공급자 수를 결정할 이러한 사용량 데이터에서 (수집 경우 고객의 권한으로).A customer could set these locations via a Companion App or the provider could determine them from usage data (if collected with the customer’s permission).

패스에 잠금 화면에 표시 되 면 펜스를 패스에 잠금 화면에서 숨겨지도록 사용자 영역을 벗어날 때 계산 됩니다.When the pass is displayed on the lock-screen, a fence is calculated so that when the user leaves the area the pass is hidden from the lock-screen. 반지름은 남용을 방지 하기 위해 스타일 전달에 연결 됩니다.The radius is tied to pass style to prevent abuse.

날짜 및 시간Date and Time

패스에서 하나의 날짜/시간을 지정할 수 있습니다.Only one date/time can be specified in a Pass. 날짜 및 시간 탑승권 및 이벤트 티켓에 대 한 잠금 화면 알림을 트리거하지 유용 합니다.The date and time is useful for triggering lock-screen reminders for boarding passes and event tickets.

업데이트할 수 푸시를 통해 또는 PassKit API를 통해 날짜/시간 (예: 극장식 또는 스포츠 복합 시즌 티켓) 다양 한 용도로 사용 티켓의 경우 업데이트 될 수 있도록 합니다.Can be updated via push or via PassKit API, so that the date/time could be updated in the case of a multiple-use ticket (such as a season ticket to a theatre or sporting complex).

지역화Localization

패스를 여러 언어로 번역 하는 것은 iOS 응용 프로그램을 지역화 비슷합니다 – 언어를 사용 하 여 특정 디렉터리 만들기를 .lproj 확장 하 고 내부 지역화 된 요소를 배치 합니다.Translating a pass into multiple languages is similar to localizing an iOS application – create language specific directories with the .lproj extension and place the localized elements inside. 텍스트 번역을 입력 해야는 pass.strings 지역화 된 이미지 전달 루트에 있는 대체 이미지와 동일한 이름 이어야 하는 동안 파일입니다.Text translations should be entered into a pass.strings file, while localized images should have the same name as the image they replace in the Pass root.

보안Security

전달 된 iOS 프로 비전 포털에서에서 생성 하는 개인 인증서로 서명 됩니다.Passes are signed with a private certificate that you generate in the iOS Provisioning Portal. 패스에 서명 하는 단계는:The steps to sign the pass are:

  1. Pass 디렉터리에 각 파일의 SHA1 해시를 계산 (포함 되지 않습니다 합니다 manifest.json 또는 signature 파일을이 단계에서 계속 존재 해야 있으며 둘 다).Calculate a SHA1 hash for each file in the pass directory (do not include the manifest.json or signature file, neither of which should exist at this stage anyway).
  2. 쓰기 manifest.json JSON 키/값 목록을 해당 해시를 사용 하 여 각 파일 이름입니다.Write manifest.json as a JSON key/value list of each filename with its hash.
  3. 인증서를 사용 하 여 로그인 합니다 manifest.json 라는 파일에 결과 쓰고 파일 signature 합니다.Use the certificate to sign the manifest.json file and write the result to a file called signature .
  4. 모든 항목을 압축 하 고 결과 파일을 .pkpass 파일 확장명입니다.ZIP the everything up and give the resulting file a .pkpass file extension.

개인 키를 패스에 로그인 하는 데 필요 하기 때문에이 프로세스 제어 하는 보안 서버에만 수행 되어야 합니다.Because your private key is required to sign the pass, this process should only be done on a secure server that you control. 응용 프로그램에서 전달 생성 키를 배포 하지 마십시오.DO NOT distribute your keys to try and generate passes in an application.

구성 및 설정Configuration and Setup

이 섹션에서는 첫 번째 단계를 만들고 프로 비전 세부 정보를 설정 하기 위한 지침을 포함 합니다.This section contains instructions to help setup your provisioning details and create your first pass.

PassKit 프로 비전Provisioning PassKit

앱 스토어를 입력 하는 단계에 대 한 순서로 개발자 계정에 연결 되어야 합니다.In order for a pass to enter the App Store, it must be linked to a developer account. 이 두 단계가 필요합니다.This requires two steps:

  1. 전달 형식 ID 라는 고유 식별자를 사용 하 여 패스를 등록 해야 합니다.The pass must be registered using a unique identifier, called the Pass Type ID.
  2. 개발자의 디지털 서명 사용 하 여 패스에 로그인 하려면 유효한 인증서가 생성 되어야 합니다.A valid Certificate must be generated to sign the pass with the developer's digital signature.

패스 유형 ID do 다음을 만듭니다.To create a Pass Type ID do the following.

패스 유형 ID를 만들려면Create a Pass Type ID

전달 형식 ID에 대 한 각각의 다른 설정 하는 첫 번째 단계입니다 형식 지원 해야 하는 통과 합니다.The first step is to set up a Pass Type ID for each different type of pass to be supported. 전달 ID (또는 전달 형식 식별자)는 Pass에 대 한 고유 식별자를 만듭니다.The Pass ID (or Pass Type identifier) creates a unique identifier for the Pass. 이 ID는 인증서를 사용 하 여 개발자 계정을 사용 하 여 패스를 연결할 사용 됩니다.We will use this ID to link the pass with your developer account using a Certificate.

  1. iOS 프로 비전 포털의 인증서, 식별자 및 프로필 섹션, 이동할 식별자 선택한 유형 Id 전달 합니다.In the Certificates, Identifiers, and Profiles section of the iOS Provisioning Portal, navigate to Identifiers and select Pass Type IDs . 다음을 선택 합니다 + 새 패스 유형을 만드는 단추: Then select the + button to create a new pass type:

  2. 제공 된 설명 (이름) 및 식별자 (고유 문자열) Pass에 대 한 합니다.Provide a Description (name) and Identifier (unique string) for the Pass. 모든 전달할 유형 Id 문자열을 사용 하 여 시작 해야 하는 참고 pass. 사용 하 여이 예제의 pass.com.xamarin.coupon.banana : Note that all Pass Type IDs must begin with the string pass. In this example we use pass.com.xamarin.coupon.banana :

  3. 전달 ID 키를 눌러 확인 합니다 등록 단추입니다.Confirm the Pass ID by pressing the Register button.

인증서 생성Generate A Certificate

이 패스 유형 ID에 대 한 새 인증서를 만들려면 다음을 수행 합니다.To create a new Certificate for this Pass Type ID, do the following:

  1. 목록에서 새로 만든된 패스 ID를 선택 하 고 클릭 편집 : Select the newly created Pass ID from the list, and click Edit :

    그런 다음 선택 Create Certificate...Then, select Create Certificate… ::

  2. 인증서 서명 요청 (CSR을)를 만드는 단계를 따릅니다.Follow the steps to create a Certificate Signing Request (CSR).

  3. 키를 눌러 합니다 계속 개발자 포털에서 단추 및 인증서를 생성 하 여 CSR을 업로드 합니다.Press the Continue button on the developer portal and upload the CSR to generate your certificate.

  4. 인증서를 다운로드 하 고 키 집합에 설치 하는 데 두 번 클릭 합니다.Download the certificate and double-click on it to install it in your keychain.

하이 패스 유형 ID에 대 한 인증서를 만든 다음 섹션 패스를 수동으로 빌드하는 방법을 설명 합니다.Now that we have created a certificate for this Pass Type ID, the next section describes how to build a pass manually.

Wallet에 대 한 프로 비전에 대 한 자세한 내용은 참조는 기능을 사용 하 여 작업 가이드입니다.For more information on Provisioning for Wallet, refer to the Working with Capabilities guide.

패스를 수동으로 만들기Create a Pass Manually

전달 형식 만들었습니다 했으므로 시뮬레이터 또는 장치에서 테스트를 통과 수동으로 만들 수 있습니다 것입니다.Now that we’ve created the Pass Type we can manually craft a pass to test on the simulator or a device. 패스를 만드는 단계는:The steps to create a pass are:

  • Pass 파일을 포함할 디렉터리를 만듭니다.Create a directory to contain the pass files.
  • 필요한 모든 데이터를 포함 하는 pass.json 파일을 만듭니다.Create a pass.json file that contains all the required data.
  • (필요한 경우) 폴더에 이미지를 포함 합니다.Include images in folder (if required).
  • 폴더의 모든 파일에 대 한 SHA1 해시를 계산 하 고은 manifest.json에 작성 합니다.Calculate SHA1 hashes for every file in the folder, and write to manifest.json.
  • manifest.json. p12 파일을 다운로드 한 인증서를 사용 하 여 로그인 합니다.Sign manifest.json with the downloaded certificate .p12 file.
  • 디렉터리의 내용을 압축 하 고.pkpass 확장을 사용 하 여 이름을 바꿉니다.ZIP the directory’s contents and rename with .pkpass extension.

에 대 한 원본 파일이 일부 합니다 샘플 코드 패스를 생성 하는이 문서에 대 한 합니다.There are some source files in the sample code for this article that can be used to generate a pass. 파일을 사용 합니다 CouponBanana.raw CreateAPassManually 디렉터리의 디렉터리입니다.Use the files in the CouponBanana.raw directory of the CreateAPassManually directory. 다음 파일이 있습니다.The following files are present:

Pass.json 열고 JSON을 편집 합니다.Open pass.json and edit the JSON. 적어도 업데이트 해야 합니다 passTypeIdentifierteamIdentifer Apple 개발자 계정에 맞게 합니다.You must at least update the passTypeIdentifier and teamIdentifer to match your Apple Developer account.

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

그런 다음 각 파일에 대 한 해시를 계산 하 고 생성 해야 합니다 manifest.json 파일입니다.You must then calculate the hashes for each file and create the manifest.json file. 완료 되 면 다음과 같이 표시 됩니다.It will look something like this when you’re done:

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

패스 유형 id입니다.가에 대해 생성 된 인증서 (. p12 파일)를 사용 하 여이 파일에 대 한 시그니처를 생성 해야 다음Next a signature must be generated for this file using the certificate (.p12 file) that was generated for this Pass Type ID.

Mac 서명Signing On a Mac

다운로드 합니다 Wallet 초기값 지원 자료 에서 합니다 Apple 다운로드 사이트.Download the Wallet Seed Support Materials from the Apple Downloads site. 사용 된 signpass (이 또한 계산 SHA1 해시 및.pkpass 파일로 출력 ZIP) 한 전달에 폴더를 설정 하는 도구입니다.Use the signpass tool to turn your folder into a pass (this will also calculate the SHA1 hashes and ZIP the output into a .pkpass file).

테스트Testing

(.Zip 파일 이름을 설정 하 고 다음 열기)에서 이러한 도구의 출력을 검사 하려는 경우 다음 파일이 표시 됩니다 (추가 합니다 manifest.jsonsignature 파일):If you were to examine the output of these tools (by setting the filename to .zip and then opening it), you would see the following files (note the addition of the manifest.json and signature files):

ZIPped 서명 하 고 (예: 파일의 이름을 변경 후Once you have signed, ZIPped and renamed the file (eg. BananaCoupon.pkpass)를 테스트 하려면 시뮬레이터 끌어온 또는 실제 장치에서 검색할 자신에 게 전자 메일 수 있습니다.to BananaCoupon.pkpass) you can drag it into the simulator to test, or email it to yourself to retrieve on a real device. 화면에 표시 되어야 추가 다음과 같은 단계를 합니다.You should see a screen to Add the pass, like this:

하지만 일반적으로 수동 패스 만들기는 백 엔드 서버의 지원이 필요 하지 않은 쿠폰 만들기만 하는 소규모 기업 위한 수 있습니다 서버에서 해당 프로세스를 자동화할 수는 있습니다.Normally that process would be automated on a server, however manual pass creation might be an option for small businesses that are only creating coupons that do not require the support of a back-end server.

WalletWallet

Wallet은 PassKit 에코 시스템의 중앙 부분입니다.Wallet is the central piece of the PassKit ecosystem. 이 스크린 샷 빈 지갑에 및 전달 목록 및 개별 패스의 모양을 보여 줍니다.This screenshot shows the empty Wallet, and how the pass list and individual passes look:

Wallet의 기능은 다음과 같습니다.Features of Wallet include:

  • 전달 해당 바코드를 스캔을 사용 하 여 렌더링 되는 유일한 마련입니다.It is the only place that passes are rendered with their barcode for scanning.
  • 사용자는 업데이트에 대 한 설정을 변경할 수 있습니다.User can change the settings for updates. 사용 하도록 설정 하는 경우 푸시 알림을 전달에서 데이터 업데이트를 트리거할 수 있습니다.If enabled, push notifications can trigger updates to the data in the Pass.
  • 사용자는 사용 하도록 설정 하거나 잠금 화면 통합을 사용 하지 않도록 설정할 수 있습니다.User can enable or disable lock-screen integration. 사용 하도록 설정 하는 경우 따라서 패스에 포함 된 관련 시간 및 위치 데이터를 기반으로 하는 잠금 화면에 표시할 자동으로 전달 합니다.If enabled, this allows the pass to automatically appear on their lock screen, based on relevant time and location data embedded in the pass.
  • 패스의 뒷면 JSON 패스에서 웹 서버 URL이 제공 하는 경우 끌어오기-새로 고침을 지원 합니다.The reverse side of the pass supports pull-to-refresh, if a web-server-URL is supplied in the pass JSON.
  • 도우미 앱 열 (또는 다운로드할 수) JSON 패스에서 앱의 ID를 제공 합니다.Companion Apps can be opened (or downloaded) if the app’s ID is supplied in the pass JSON.
  • Pass (사용 하 여 쓴 귀여운 제 단편화 애니메이션)을 삭제할 수 있습니다.Passes can be deleted (with a cute shredding animation).

Wallet에 추가 전달Adding Passes into Wallet

다음과 같은 방법으로 Wallet 전달을 추가할 수 있습니다.Passes can be added to Wallet in the following ways:

  • 통로 앱 – 이러한 직접 조작 하지 전달, 단순히 통과 파일을 로드 하며 Wallet에 추가 하는 옵션을 사용 하 여 사용자를 제공 합니다.Conduit Apps – These do not manipulate passes directly, they simply load pass files and present the user with the option of adding them to Wallet.

  • 도우미 앱 – 이러한 패스를 배포 하 고 찾아보거나 편집 하려면 추가 기능을 제공 하는 공급자가 기록 됩니다.Companion Apps – These are written by providers to distribute passes and offer additional functionality to browse or edit them. Xamarin.iOS 응용 프로그램 만들기 및 조작 전달 PassKit API에 대 한 전체 액세스 경우Xamarin.iOS applications have complete access to the PassKit API to create and manipulate passes. 전달 추가할 수 있습니다 Wallet 사용 하 여 PKAddPassesViewController입니다.Passes can then be added to Wallet using the PKAddPassesViewController. 이 프로세스에서 더 자세히 설명 되어는 도우미 응용 프로그램 이 문서의 섹션입니다.This process is described in more detail in the Companion Applications section of this document.

통로 응용 프로그램Conduit Applications

통로 응용 프로그램은 사용자를 대신 하 여 전달 받을 수 있습니다 및 해당 콘텐츠 형식을 인식 하 고는 Wallet에 추가 하는 기능을 제공 하도록 프로그래밍 해야 하는 중간 앱입니다.Conduit applications are intermediate apps that might receive passes on behalf of a user, and should be programmed to recognize their content-type and provide functionality to add to the Wallet. 통로 앱의 예입니다.Examples of conduit apps include:

  • 메일 – 통과로 첨부 파일을 인식 합니다.Mail – Recognizes attachment as a Pass.
  • Safari – 전달 URL 링크를 클릭할 때 Content-type 패스를 인식 합니다.Safari – Recognizes the pass Content-Type when a pass URL link is clicked.
  • 다른 사용자 지정 앱 – 링크 (소셜 미디어 클라이언트, 메일 판독기 등)를 열거나 첨부 파일을 수신 하는 모든 앱.Other custom apps – Any app that receive attachments or open links (social media clients, mail readers, etc).

보여 주는이 스크린샷 어떻게 메일 ios에서 6 인식 첨부 파일을 전달 (작업) 하는 경우 및 제공 추가 Wallet 되도록 합니다.This screenshot shows how Mail in iOS 6 recognizes a pass attachment and (when touched) offers to Add it to Wallet.

Pass에 대 한 통로 수 있는 앱을 작성 하는 경우 의해 인식 될 수 있습니다.If you are building an app that could be a conduit for passes, they can be recognized by:

  • 파일 확장명 -.pkpassFile extension - .pkpass
  • MIME 형식 -application/vnd.apple.pkpassMIME Type - application/vnd.apple.pkpass
  • UTI – com.apple.pkpassUTI – com.apple.pkpass

통로 응용 프로그램의 기본 작업은 패스 파일을 가져와 PassKit의 호출 PKAddPassesViewController 패스를 해당 Wallet에 추가 하는 옵션이 사용자에 게 합니다.The basic operation of a conduit application is to retrieve the pass file and call PassKit’s PKAddPassesViewController to give the user the option to add the pass to their Wallet. 이 뷰 컨트롤러의 구현에 다음 섹션에서 설명 됩니다 도우미 응용 프로그램합니다.The implementation of this view controller is covered in the next section on Companion Applications.

통로 응용 프로그램 도우미 응용 프로그램과 동일한 방식에서에 대 한 특정 패스 유형 ID를 프로 비전 할 필요가 없습니다.Conduit Applications do not need to be provisioned for a specific pass Type ID in the same way that Companion Applications do.

도우미 응용 프로그램Companion Applications

도우미 응용 프로그램을 통과 패스를 만드는, 패스를 연관 된 정보를 업데이트, 그렇지 않으면 전달 응용 프로그램과 연결 된 관리 등을 사용 하 여 작업에 대 한 추가 기능을 제공 합니다.A companion application provides additional functionality for working with passes, including creating a Pass, updating information associated with a Pass and otherwise managing passes associated with the application.

도우미 응용 프로그램의 Wallet 기능을 복제 하지 않아야 합니다.Companion applications should not attempt to duplicate the features of Wallet. 검색에 대 한 전달 표시 되지 않으므로 합니다.They are not intended to display passes for scanning.

이 섹션의 나머지이 부분에 사용 하는 기본 도우미 앱 상호 작용 하는 PassKit 빌드하는 방법을 설명 합니다.This remainder of this section describes how to build a basic Companion App that interacts with PassKit.

프로비전Provisioning

Wallet 저장소 기술 이기 때문에 응용 프로그램을 개별적으로 프로 비전 해야 하 고 팀 프로 비전 프로필 또는 와일드 카드 앱 id입니다. 사용할 수 없습니다.Because Wallet is a store technology, the application needs to be provisioned separately and cannot use Team Provisioning Profile or Wildcard App ID. 참조를 기능을 사용 하 여 작업 Wallet 응용 프로그램에 대 한 고유한 앱 ID와 프로 비전 프로필 만들기 가이드입니다.Refer to the Working with Capabilities guide to create a unique App ID and Provisioning Profile for the Wallet application.

권한 부여Entitlements

합니다 Entitlements.plist 파일 최근에 사용한 모든 Xamarin.iOS 프로젝트에 포함 되어야 합니다.The Entitlements.plist file should be included in all recent Xamarin.iOS project. 새 Entitlements.plist 파일에 추가 하려면의 단계를 수행 합니다 자격 가이드입니다.To add a new Entitlements.plist file, follow the steps in the Working with Entitlements guide.

설정 하려면 다음을 수행 하는 권한 부여:To set entitlements do the following:

두 번 클릭 합니다 Entitlements.plist Entitlements.plist 편집기를 열려면 Solution Pad의 파일:Double-click on the Entitlements.plist file in the Solution Pad to open the Entitlements.plist editor:

Wallet 섹션을 선택 합니다 Wallet 사용 옵션Under the Wallet section, select the Enable Wallet option

모든 패스 유형을 허용할 앱에 대 한 기본 옵션이입니다.The default option is for your app to allow all pass types. 그러나 앱을 제한 하 고 팀 패스 유형의 하위 집합만 허용 하는 것이 같습니다.However, it is possible to restrict your app and only allow a subset of team pass types. 이 선택을 사용 하려면 합니다 팀의 하위 집합 허용 형식을 전달 허용 하려는 하위 집합의 패스 유형 식별자를 입력 합니다.To enable this select the Allow subset of team pass types and enter the pass type identifier of the subset that you wish to allow.

디버깅Debugging

에 응용 프로그램을 배포 하는 문제가 있는 경우 올바른 사용 중인지 확인 프로 비전 프로필 하 고는 Entitlements.plist 를 선택 합니다 사용자 지정 자격 파일에는 iPhone 번들 서명 옵션입니다.If you have problems deploying your application, check that you are using the correct Provisioning Profile and that the Entitlements.plist is selected as the Custom entitlements file in the iPhone Bundle Signing options.

배포 하는 경우이 오류가 발생 하면:If you experience this error when deploying:

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

그런 다음 pass-type-identifiers 자격 배열 올바르지 않습니다. (일치 하지 않습니다 합니다 프로 비전 프로필).then the pass-type-identifiers entitlements array is incorrect (or does not match the Provisioning Profile). 전달 형식 Id 및 팀 ID가 올바른지 확인 합니다.Verify the Pass Type IDs and your Team ID are correct.

클래스Classes

다음 PassKit 클래스는 전달 액세스 하는 앱에서 사용할 수 있습니다.The following PassKit classes are available for apps to access passes:

  • PKPass – 인스턴스를 전달 합니다.PKPass – An instance of a Pass.
  • PKPassLibrary – 장치에 전달에 액세스 하는 API를 제공 합니다.PKPassLibrary – Provides the API to access the passes on the device.
  • PKAddPassesViewController – 해당 Wallet에 저장 하는 사용자에 대 한 패스를 표시 하는 데 사용 합니다.PKAddPassesViewController – Used to display a pass for the user to save in their Wallet.
  • PKAddPassesViewControllerDelegate – Xamarin.iOS 개발자PKAddPassesViewControllerDelegate – Xamarin.iOS developers

예제Example

PassLibrary 프로젝트에 참조를 샘플 코드 이 문서에 대 한 합니다.Refer to the PassLibrary project in the sample code for this article. 해당 Wallet 자매 응용 프로그램에 필요한 다음과 같은 공통 기능을 보여 줍니다.It demonstrates the following common functions that would be required in a Wallet Companion Application:

Wallet 사용 가능한 지 확인Check that Wallet is Available

Wallet 아니므로 iPad의 경우에서 사용할 수 있는 응용 프로그램 PassKit 기능에 액세스 하기 전에 확인 해야 합니다.Wallet is not available on the iPad, so applications should check before attempting to access PassKit features.

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

Pass 라이브러리 인스턴스 만들기Creating a Pass Library Instance

PassKit 라이브러리가 단일 있지 않으면, 응용 프로그램 만들기 및 저장 하 고 인스턴스 PassKit API에 액세스할 수 있습니다.The PassKit library is not a singleton, applications should create and store and instance to access the PassKit API.

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

전달의 목록 가져오기Get a List of Passes

응용 프로그램에서 라이브러리 목록을 전달을 요청할 수 있습니다.Applications can request a list of passes from the library. 이 목록은 자격에 팀 ID를 사용 하 여 만든 나열 되 고 전달을만 볼 수 있도록에 자동으로 PassKit으로 필터링 됩니다.This list is automatically filtered by PassKit, so that you can only see passes that have been created with your Team ID and which are listed in your Entitlements.

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

참고 시뮬레이터가이 메서드는 실제 장치에서 항상 테스트 해야 하므로 반환 전달 목록을 필터링 하지 않습니다.Note that the simulator does not filter the list of passes returned, so this method should always be tested on real devices. 이 목록에는 UITableView 표시할 수 있습니다.This list can be displayed in a UITableView. 합니다 샘플 앱 다음과 같은 두 가지 쿠폰을 추가한 후:The sample app looks like this after two coupons have been added:

패스를 표시합니다.Displaying Passes

정보의 제한 집합이 전달 도우미 앱 내에서 렌더링에 사용할 수 있습니다.A limited set of information is available for rendering of passes within companion apps.

예제 코드와 마찬가지로이 표준 속성이 집합에서 통과 목록을 표시 하려면 선택 합니다.Choose from this set of standard properties to display lists of passes, as the example code does.

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

이 문자열에 경고로 표시 됩니다는 샘플:This string is shown as an alert in the sample:

사용할 수도 있습니다는 LocalizedValueForFieldKey() 디자인 단계에는 필드에서 데이터를 검색 하는 방법 (알 수 있으므로 어떤 필드 있어야) 합니다.You can also use the LocalizedValueForFieldKey() method to retrieve data from fields in the passes you have designed (since you will know what fields should be present). 예제 코드에서는이 표시 되지 않습니다.The example code does not show this.

파일에서 로드 하는 과정을Loading a Pass from a File

패스를 사용자의 권한을 사용 하 여 Wallet에만 추가할 수 있습니다, 되므로 뷰 컨트롤러를 결정할 수 있도록 하기 위해 제공 해야 합니다.Because a pass can only be added to Wallet with the user’s permission, a view controller must be presented to let them decide. 이 코드를 사용 합니다 추가 (으로 대체 해야이 사용자가 등록 하는) 앱에 포함 된 미리 빌드된 패스를 로드 하려면 예제에서는 단추:This code is used in the Add button in the example, to load a pre-built pass that is embedded in the app (you should replace this with one that you have signed):

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

패스에 표시 됩니다 추가 하 고 취소 옵션:The pass is presented with Add and Cancel options:

기존 패스를 대체 합니다.Replace an Existing Pass

하지만 기존 패스를 교체는 패스에 아직 없는 경우 실패 사용자의 권한이 필요 하지 않습니다.Replacing an existing pass does not require the user’s permission, however it will fail if the pass does not already exist.

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

패스를 편집합니다.Editing a Pass

코드에서 패스 개체를 업데이트할 수 없습니다 있도록 PKPass 변경할 수 없습니다.PKPass isn’t mutable, so you cannot update pass objects in your code. 패스에서 데이터를 변경 하려면 응용 프로그램에 전달의 레코드를 유지 하 고 응용 프로그램을 다운로드할 수 있는 업데이트 된 값으로 새 패스 파일을 생성할 수 있는 웹 서버에 액세스할 수 있어야 합니다.To alter the data in a pass an application must have access to a web server that can keep a record of passes and generate a new pass file with updated values which the application can download.

Pass 파일 생성 전달 비공개 및 보안 유지 해야 하는 인증서로 서명 해야 하기 때문에 서버에서 수행 되어야 합니다.Pass file creation must be done on a server because passes must be signed with a certificate that must be kept private and secure.

업데이트 된 전달 파일로 생성 된 후 사용 하 여는 Replace 장치에서 이전 데이터를 덮어쓸지 메서드.Once an updated pass file has been generated, use the Replace method to overwrite the old data on the device.

패스를 검색 하는 것에 대 한 표시Display a Pass for scanning

앞에서 설명한 대로 Wallet 검색에 대 한 패스를 표시할 수만 있습니다.As previously noted, only Wallet can display a pass for scanning. 사용 하 여 패스를 표시할 수는 OpenUrl 표시 된 것 처럼 메서드:A Pass can be displayed using the OpenUrl method as shown:

UIApplication.SharedApplication.OpenUrl (p.PassUrl);

변경 알림을 수신합니다.Receiving Notifications Of Changes

응용 프로그램 전달 라이브러리에 대 한 변경 내용을 수신 대기할 수 있습니다를 사용 하 여 PKPassLibraryDidChangeNotification입니다.Applications can listen for changes being made to the Pass Library using the PKPassLibraryDidChangeNotification. 변경 내용에 앱에서 수신 대기 하는 것이 좋습니다 하므로 백그라운드에서 업데이트를 트리거하는 알림을 때문일 수 있습니다.Changes could be caused by notifications triggering updates in the background, so it is good practice to listen for them in your app.

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 단일 아니므로 알림에 등록 하는 경우 라이브러리 인스턴스를 전달 하는 것이 반드시 합니다.It is important to pass a library instance when registering for the notification because PKPassLibrary is not a singleton.

서버 처리Server Processing

PassKit 지원 서버 응용 프로그램을 구축 하는 자세한 내용은이 기초 문서의 범위를 벗어납니다.A detailed discussion of building a server application to support PassKit is beyond the scope of this introductory article.

참조 dotnet passbook 오픈 소스 C# 서버 쪽 코드입니다.See dotnet-passbook open source C# server-side code.

푸시 알림Push Notifications

푸시 알림을 전달 업데이트를 사용 하는 자세한 설명은이 기초 문서의 범위를 벗어납니다.A detailed discussion of using push notifications to update passes is beyond the scope of this introductory article.

업데이트가 필요한 경우 전자 지갑에서 웹 요청에 응답 하는 Apple에서 정의 된 유사한 REST API를 구현 해야 합니다.You would be required to implement the REST-like API defined by Apple to respond to web requests from Wallet when updates are required.

Apple의를 참조 하세요 패스를 업데이트 자세한 가이드입니다.See Apple's Updating a Pass guide for more information.

요약Summary

이 문서에서는 PassKit 소개가 유용한 이유는 이유 중 일부를 설명 하며 전체 PassKit 솔루션 구현 해야 하는 여러 부분을 설명 합니다.This article introduced PassKit, outlined some of the reasons why it is useful and described the different parts that must be implemented for a full PassKit solution. Apple 개발자 계정의 통과 되도록 패스를 그리고 수동으로 PassKit Api Xamarin.iOS 응용 프로그램에서 액세스 하는 프로세스를 구성 하는 데 필요한 단계를 설명 합니다.It described the steps required to configure your Apple Developer account to create passes, the process to make a pass manually and also how to access the PassKit APIs from a Xamarin.iOS application.