스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
지갑과 Apple Pay의 새로운 기능
지갑과 Apple Pay의 최신 업데이트를 소개합니다. 사전 승인된 결제, 자금 이체 및 Apple Pay Later 가맹점을 활용하여 앱 또는 웹에서 훌륭한 Apple Pay 경험을 구축하는 방법을 알아보세요. 이메일, 메시지, Safari 및 서드파티 앱을 활용해서 지갑에 주문 추적을 추가할 수 있고, 주문의 트랜잭션과 영수증의 세부 정보에 더 많은 정보를 추가할 수 있게 되었습니다. 그리고 iPhone에 새로 도입된 Tap to Present ID도 만나보세요. 다른 하드웨어 없이 iPhone의 지갑에서 ID를 확인할 수 있습니다.
리소스
- Adopting the Verifier API in your iPhone app
- Checking IDs with the Verifier API
- Generating reader tokens for the Verifier API
관련 비디오
Tech Talks
WWDC22
-
다운로드
♪ ♪
'지갑과 Apple Pay의 새 기능' 세션에 오신 걸 환영합니다 - 저는 데이비드입니다 - 존입니다 오늘은 지갑과 Apple Pay에서 올해 선보이는 새로운 기능과 개선된 기능을 살펴보겠습니다 지갑과 Apple Pay는 다양한 특징과 기능을 아우릅니다 바코드 패스, 대중교통 카드 자동차 키 등을 활용할 수 있죠 모두 Apple 생태계의 중요한 일부지만 오늘은 세 가지 영역만 살펴보겠습니다 결제, 주문 추적 그리고 신분증입니다 결제부터 시작해 보죠
우선 Apple Pay Later를 설명하고 여러분의 플랫폼에 가맹점 지원을 통합하는 방법을 알아보겠습니다 선승인 결제에서 개선된 사항을 다루고 Apple Pay로 자금 이체를 지원하는 새로운 API를 살펴보겠습니다 Apple Pay Later는 미국 시장에 올해 초 도입됐습니다 사용자가 결제액을 네 번에 나눠 결제할 수 있죠 사용자는 지갑에서 손쉽게 결제액을 추적하고 관리할 수 있습니다 Apple Pay Later에는 어떤 통합도 필요하지 않지만 여러분의 UI에 통합 가능한 가맹점 뷰를 제공하는 새로운 API를 소개하려 합니다 이 뷰를 이용하면 Apple Pay Later 기능과 고객이 기대할 수 있는 경험을 표시할 수 있습니다 표시되는 콘텍스트에 적합하도록 뷰의 스타일도 수정할 수 있습니다 사용자가 자세히 알아보려고 이 뷰를 선택하면 여러분이 Apple Pay Later의 설명 방법을 고를 수 있습니다 그리고 개발자는 이 뷰를 앱과 웹 양쪽에서 사용할 수 있죠
가맹점 뷰는 콘텍스트에 따라 네 가지 스타일로 렌더링할 수 있습니다
표준 스타일에서는 Apple Pay Later를 이용해 결제액을 나누는 법을 간단히 설명합니다 배지 스타일은 간결하게 지원 여부를 표시합니다 체크아웃 스타일은 앱의 체크아웃 흐름에 따라 다른 결제 옵션과 함께 배치하도록 디자인됐습니다 그리고 가격 스타일은 총구매 가격과 함께 사용됩니다 사용자가 이 뷰를 선택하면 더욱 많은 정보가 표시됩니다 가맹점은 두 가지 동작 중 하나를 고를 수 있습니다 '더 알아보기' 동작은 Apple Pay Later 개요를 표시하며 사용자가 이것을 결제 수단으로 선택했을 때 무엇을 경험할 수 있는지 설명합니다 '계산기' 동작 역시 Apple Pay Later를 설명하지만 사용자가 따라야 하는 상환 일정에 초점을 맞춥니다 여러분의 앱에 뷰를 통합하는 법을 살펴보죠
가장 먼저 사용자가 Apple Pay Later를 쓸 수 있는지 확인하세요 PKPayLaterUtilities에서 유효성 검사 함수를 사용하면 됩니다 거래에 필요한 금액을 제시하고 로케일도 입력해야 합니다 사용자가 Apple Pay Later를 쓸 수 있는지 확인하고 나면 자격 검사에 제공된 것과 동일한 세부정보를 이용해서 PKPayLaterView를 인스턴스화합니다 뷰와 동작의 스타일을 수정하고 싶다면 각각의 프로퍼티를 변경하여 수정할 수 있죠 편리한 SwiftUI 뷰도 제공합니다 Apple Pay Later를 수락할 것인지에 대한 여부를 SwiftUI 앱 내에 표시할 수 있죠 이 기능을 이용하려면 PayLaterView를 인스턴스화하고 이전과 같은 정보를 제공하세요 표시 및 동작 스타일을 수정하고 싶다면 적절한 뷰와 수정자를 이용하시면 됩니다 아주 간단하죠 만약 앱에서 가맹점 뷰를 지원하고 싶다면 몇 가지 설정 단계를 거쳐야 합니다
뷰의 표시에 필요한 API는 기존의 Apple Pay JavaScript SDK 내에서 제공되지만 몇 가지 새로운 설정을 포함시켜야 합니다 만약 여러분이 교차 출처 리소스 공유를 지원해야 한다면 crossorigin 속성을 꼭 설정해야 하죠 async 속성을 사용해서 스크립트의 로딩이 페이지의 로딩 진행과 독립적으로 실행되게 하세요 마지막으로 API의 요청을 인증하려면 JWT가 필요합니다 이 토큰은 Apple Developer 포털에서 생성할 수 있습니다 JavaScript SDK의 사용은 아주 간단합니다 apple-pay-merchandising 요소로 뷰를 표현하세요 금액, 국가 코드, 통화 코드 및 로케일은 필수 필드입니다 네이티브 API와 마찬가지로 뷰의 다른 측면도 수정할 수 있습니다 Apple Pay Later 가맹점 뷰를 통합할 때는 다음 사례를 참고하세요 앱에서 이 뷰를 사용하려면 권한이 필요합니다 Apple Developer 포털에서 권한을 구할 수 있죠 웹사이트의 경우 도메인을 등록하고 SDK를 넣을 때 사용할 JWT를 구해야 합니다 이 역시 Apple Developer 포털에서 받을 수 있죠 가능하다면 SDK를 헤드 요소 내에 불러오세요 가장 빠른 속도로 실행할 수 있으므로 페이지 로딩이 완료되자마자 가맹점 뷰가 준비됩니다 뷰의 크기는 필요한 만큼 수정할 수 있지만 크기 요구 조건을 지켜야 합니다 마지막으로 웹사이트에 콘텐츠 보안 정책이 있는 경우 권장 지침을 준수해서 도메인 전체에 SDK를 로딩하시면 됩니다 Apple Pay Later를 살펴봤습니다 다음은 선승인 결제를 알아보죠 iOS 16에서 선승인 결제를 도입했습니다 사용자는 지갑에서 선승인 결제를 확인하고 관리할 수 있으며 가맹점은 합의된 조건에 따라 요금을 청구할 수 있습니다 저희는 처음부터 반복 결제와 자동 충전 결제를 지원했습니다 이제 후불 결제도 지원합니다 세 가지 선승인 결제 방식은 앱과 웹에서 모두 사용할 수 있습니다 후불 결제를 이용하면 이후의 특정 날짜에 고정 비용 혹은 변동 비용을 청구할 수 있습니다 무료 취소에 마감 기한이 있는 경우 이 날짜 역시 요청에서 지정할 수 있죠 후불 결제가 적합한 경우의 예시로 고객이 호텔을 예약하거나 상품을 사전 주문하는 상황을 들 수 있을 것입니다
선승인 결제는 Apple Pay의 가맹점 토큰을 활용합니다
사용자의 개별 기기가 아니라 Apple ID에 연결되죠 따라서 사용자가 기기를 업그레이드하더라도 그 토큰은 여전히 유효합니다 덕분에 토큰을 사용하여 계좌를 충전할 수 있으므로 나중에도 안정적으로 결제를 받을 수 있죠 고객의 결제 카드가 선승인 결제를 지원한다면 가맹점 토큰은 자동으로 발행됩니다 결제 카드가 가맹점 토큰을 지원하지 않아도 거래는 계속 진행되지만 여기서는 개별 기기에 연결된 기존 Apple Pay 토큰이 사용됩니다 Apple Pay 가맹점 토큰에 대해 자세히 알아보려면 작년의 '지갑과 Apple Pay의 새 기능' 세션을 확인하세요 이제 여러분의 앱에 후불 결제를 통합해 보겠습니다 우선 PKDeferredPayment SummaryItem을 생성합니다 청구하는 서비스와 금액을 간략히 보여 주죠 결제가 이뤄지는 날짜도 설정합니다 다음으로는 PKDeferredPayment Request를 생성합니다 방금 생성한 요약 항목과 함께 결제 관리에 필요한 나머지 정보를 제공하죠 사용자에게 보여 줄 청구 동의서가 있다면 그 역시 후불 결제 요청에 작성할 수 있습니다 요청을 만들고 구성을 마쳤다면 PKPaymentRequest에 첨부하세요 예시에서 요청한 결제 요약 항목의 경우에는 같은 금액과 날짜로 PKDeferred PaymentSummaryItem을 생성합니다 하지만 이번에는 레이블에 가맹점 이름을 넣습니다 요청 작성을 마치면 결제를 표시할 준비가 끝납니다
지금 예시에서 보시다시피 Apple Pay 결제 시트에 후불 결제를 표시할 때는 사용자에게 청구 동의서와 청구 날짜 정보를 넣습니다 하지만 무료 취소 날짜를 지정해야 한다면 몇 가지 사안을 고려해야 합니다
무료 취소 날짜를 제공하는 경우 해당 시점 이전에 취소한다면 사용자에게 아무 요금도 청구되지 않습니다 따라서 날짜와 시간 모두가 아주 중요한 정보입니다 취소 정책이 적용되는 시간대를 정확하게 명시해야 합니다 이것은 별도의 속성으로 지원하죠 아래 예시를 보면 저희는 태평양 표준시로 시간대를 지정했습니다 이것이 중요한 이유는 고객의 시간대가 취소 정책의 표준 시간대와 다를 수 있기 때문입니다 예를 들어 영국에 거주하는 사람이 미국의 호텔을 예약하는 경우죠 후불 결제를 처리할 때는 다음 사례를 참고하시길 바랍니다
앞서 언급한 것처럼 무료 취소 정책을 설명해야 한다면 후불 결제 요청에 제공되는 날짜, 시간, 시간대를 신중하게 고려하세요 요약 항목에 후불 결제를 명시하고 해당하는 가맹점 이름을 입력해야 합니다 이 절차는 자동으로 수행되지 않습니다 청구 동의서를 제공할 때는 간결하게 적으세요 청구 동의서의 문구는 주요 사항의 요약으로만 사용하고 정식 청구서나 법적 동의서를 대체해선 안 됩니다 마지막으로 Apple Pay 가맹점 토큰이 발행됐다면 토큰 알림 URL을 지정하여 토큰의 수명 주기를 계속 업데이트하세요 후불 결제도 살펴봤습니다 다음은 Apple Pay로 자금을 이체하는 새로운 방법을 살펴보죠 전통적으로 Apple Pay는 사용자가 계좌에 자금을 충전할 수 있도록 결제 시트를 제공했습니다 iOS 17에서는 Apple Pay 자금 이체 기능이 도입됐습니다
사용자가 지갑의 계좌에서 카드로 자금을 이체함으로써 자금 이동의 수명 주기를 완료할 수 있죠 Apple Pay 결제처럼 안전한 기반 구조를 이용하므로 고객은 이미 이 절차에 익숙할 것입니다 자금 이체가 필요한 상황의 예시 중 하나는 고객이 은행 계좌나 선불 충전 계좌에서 자금 인출을 허가하는 상황입니다 Apple Pay를 이용한 자금 이체를 지원하기 위해 새로운 요청 유형을 만들었습니다 자금 이체에 필요한 정보에만 오롯이 초점을 맞췄죠 이것을 사용하려면 사용자의 결제 카드로 이체할 금액을 입력하기만 하면 됩니다 받는 사람의 연락처가 필요한 경우 이 정보도 요청할 수 있습니다 예전에 PKPaymentRequest를 사용해 보셨다면 새 API도 익숙하게 느껴질 겁니다 Apple Pay를 이용한 자금 이체는 결제와 같은 기반에서 작동하므로 Apple Developer 포털에서 가맹점으로 등록해야 합니다 가맹점으로 등록하고 Apple Pay를 설정하는 방법을 자세히 알아보시려면 'Apple Pay와 주문 관리 구현'을 참조하세요 Apple Pay를 이용한 자금 이체 방식을 설명하기 위해 예시를 하나 들어 보겠습니다 앤드루라는 고객이 계좌에서 돈을 인출하려 합니다 Apple Pay의 자금 이체를 이용하면 여러분의 앱 내부에서 이체를 시작할 수 있습니다 그리고 앱에서 이체 금액을 적는 요청을 생성하죠 그다음 앤드루는 이체 내역과 함께 Apple Pay 시트를 받아서 자금을 받을 카드를 선택할 수 있죠 앤드루가 이체를 안전하게 인증하면 암호화된 페이로드가 생성돼 앱으로 반환되며 결제 공급자와 함께 처리할 준비를 마칩니다 이체가 처리되면 앱에서 그 결과를 Apple Pay로 반환합니다 이체에 성공했다면 이것으로 끝입니다 만약 오류가 발생했다면 문제를 해결할 수 있도록 앤드루에게 상황을 알릴 것입니다 지금까지 자금 이체가 어떻게 작동하는지 살펴봤으니 이제 앱 내부에서 자금 이체를 구현해 보겠습니다 먼저 지원할 네트워크와 카드 기능을 알아야 합니다 다음으로는 사용자가 자금 이체가 가능한 카드를 소유하고 있는지 확인합니다 이 작업은 PKPaymentAuthorization Controller에서 수행됩니다 supportsDisbursements 메서드를 사용하면 앞에서 정의한 네트워크와 카드의 기능이 제공되죠 이 확인 결과를 이용해서 사용자 인터페이스를 조정하세요 자격 확인이 끝났으니 이체 요청을 만들 차례입니다 결제 요청과 마찬가지로 금액은 요약 항목에서 정의됩니다 이 경우에는 두 가지 요약 항목을 작성했습니다 첫 번째는 PKPaymentSummaryItem입니다 사용자 계좌에서 인출되는 금액을 나타내죠 여기서 중요한 것은 항목과 관련된 레이블이 사업체 이름이어야 한다는 점입니다 두 번째 항목은 새로운 유형의 요약 항목인 PKDisbursement SummaryItem입니다 둘 중 하나는 반드시 써야 하며 수령인의 결제 카드에 수수료와 요금 및 조정 금액을 제외한 최종 금액을 제시해야 합니다 결제에서 PKPaymentRequest를 쓸 수 있지만 Apple Pay 자금 이체에 새로운 요청 유형을 만들었습니다 PKDisbursementRequest죠 PKDisbursementRequest를 구성하려면 특정 세부 정보를 명시해야 합니다 Apple Pay에 등록할 때 설정한 가맹점 식별 번호와 거래할 통용 화폐 사업체의 지역 및 앞서 정의한 네트워크와 카드 기능이죠 방금 생성한 요약 항목도 제공하세요 받는 사람의 연락처 정보가 필요하다면 여기서 요청할 수 있습니다 받는 사람의 결제 카드가 발급된 지역을 제한할 수도 있죠 요청 작성이 끝나면 사용자에게 제시할 수 있습니다 이 과정을 수행하려면 지불 요청에서 PKPaymentAuthorizationController 인스턴스를 초기화하세요 대리자를 자신으로 설정하고 제시합니다 지금 보시는 것처럼 사용자에게 제시되는 옵션에서 이체받을 결제 카드와 그 카드로 받을 금액을 선택할 수 있습니다 사용자가 이체를 안전하게 승인하고 나면 이체를 처리하기 위해 필요한 대리자 콜백을 구현해야 합니다 Apple Pay로 자금 이체를 처리할 때 구현해야 하는 대리자 콜백은 단 두 가지입니다 첫 번째는 paymentAuthorization ControllerDidFinish입니다 시트를 종료할 준비가 되면 호출되죠 시트는 호출하는 앱이 종료해야 합니다 이 메서드를 사용하면 앱의 UI도 변경할 수 있습니다 두 번째는 didAuthorizePayment 대리자 메서드입니다 Apple Pay의 자금 이체는 결제와 같은 기반을 사용하므로 동일한 유형의 PKPayment 객체를 받습니다 여기서는 토큰의 처리를 저희 processFundsTransfer 메서드로 추상화했습니다 처리 결과에 따라 성공 또는 실패를 반환합니다
만약 처리 단계에서 오류가 발생했다면 이를 나타내는 편의 메서드 세트도 제공합니다 연락처 정보에 문제가 있는 경우 사용할 수 있는 것은 disbursementContact InvalidError입니다 만약 결제 프로세서에서 사용자의 결제 카드가 자금 이체를 수행할 수 없다고 판단하는 경우에는 disbursementCard UnsupportedError를 사용하세요 일부 금융 기관은 즉시 자금 이체를 지원합니다 자금이 받는 사람에게 더 빠르게 이체되죠 이것도 Apple Pay 자금 이체에 표시할 수 있습니다 서비스에 따라 즉시 이체에 수수료가 붙기도 하는데 그것도 표시할 수 있죠 일반적으로는 사용자가 앱에서 이체 속도를 선택할 수 있습니다 사용자가 즉시 자금 이체를 선택하는 경우 지원에 필요한 기능을 알리세요 그러면 사용자가 카드를 선택할 때 즉시 이체를 지원하는 카드만 검토할 것입니다
즉시 이체의 예시를 살펴보겠습니다
시트는 이전과 비슷하지만 이번에는 이체가 즉시 이뤄지며 수수료가 든다는 점이 강조됩니다 이체 금액도 수수료를 고려하여 조정됐습니다 이번에는 기존 이체 요청을 즉시 이체로 바꿔 보죠 우선 지원되는 기능 목록에 instantFundsOut을 추가합니다 그다음에는 supportsDisbursements에서 사용자에게 즉시 이체를 지원하는 카드가 있는지 확인합니다 그리고 이체 방법 옵션과 사용자 인터페이스를 조정하세요 요약 항목에는 이체 수수료를 나타내는 PKInstantFundsOutFeeSummaryItem 항목을 추가합니다 이 항목을 추가하면 즉시 이체를 수행할 때 청구되는 금액을 지정할 수 있죠 수수료가 없더라도 이 요약 항목이 빠지면 안 됩니다 그런 경우에는 수치를 0으로 입력하세요 이 예시에서는 수수료를 청구하므로 그에 따른 지불 금액을 업데이트해야 합니다 이 과정은 자동으로 이뤄지지 않습니다 PKDisbursementRequest를 생성하는 것은 이전과 비슷합니다 앞서 정의된 기능과 요약 항목을 제공하는 것이 유일한 차이점이죠 즉시 이체를 표시하는 방법을 모두 말씀드렸습니다 Apple Pay로 자금 이체를 구현할 때는 다음 사례를 참고하세요
Apple Pay의 자금 이체는 iOS 및 iPadOS에서만 가능하며 MacOS와 웹에서는 사용할 수 없습니다 자금 이체 처리 과정에서 오류가 발생한 경우 전용 지불 오류를 이용하면 사용자에게 효과적으로 상황을 전달할 수 있습니다 명심하세요 첫 번째 요약 항목은 사용자의 계좌에서 인출될 금액을 의미해야 합니다 첫 번째 요약 항목의 레이블은 사업체 이름과 일치해야 하고요 그리고 마지막 요약 항목에는 사용자의 결제 카드에서 수수료와 요금 등을 제외한 순수 금액을 표시하세요 결제와 관련된 발표는 여기까지입니다 주제를 바꿔서 주문 추적 이야기를 해 보죠 주문 추적은 iOS 16에 도입된 것으로 가맹점이 접수한 주문을 사용자가 추적하는 방법입니다 사용자들의 반응은 뜨거웠고 저희는 주문 추적 기능을 더 개선하려고 노력했습니다 주문을 효과적으로 표시하고 전달하기 위해 운영 체제 통합을 어떻게 개선했는지 살펴보겠습니다 그리고 주문 추적의 개선 사항도 짚어 보겠습니다 끝으로 지갑에 주문을 추가하는 새로운 방법을 알아보죠 iOS 16.4에서는 메시지를 이용한 주문 공유와 주문에 대한 인라인 미리 보기 및 받는 사람의 지갑 내에서 추적하기 기능을 추가했습니다 그리고 사용자가 주문을 한눈에 알아볼 수 있도록 주문 추적 위젯도 도입했습니다 사용자는 아무것도 하지 않아도 새로운 기능을 누릴 수 있습니다 iOS 17에서도 시스템 통합을 계속해서 지도를 지원합니다 수령 시간과 위치가 정해진 주문을 사용자가 추적하는 경우 지도 앱이 Siri 제안으로 먼저 정보를 알립니다 이제 iOS 17의 주문 추적에 적용된 개선 사항들을 살펴보겠습니다 택배 혹은 배달 음식 지원을 개선하기 위해 현재 사용 중인 배송 유형을 표시할 수 있습니다 새 shippingType 속성을 활용하면 주문이 배송 중인지 배송이 완료됐는지 선언할 수 있죠
기업용 앱을 비롯한 관련 앱에 대해서도 지원이 개선됐습니다 관련된 앱의 식별자를 선언하는 것으로 여러분은 앱과 주문 추적 사이에서 개선된 주문 알림 관리를 이용할 수 있습니다 그리고 맞춤형 상품 페이지 식별자를 지원해서 지갑 트래픽과 가장 연관성이 높은 App Store 제품 페이지로 딥 링크를 활성화할 수 있죠 마지막으로 결제 정보를 표시하는 새로운 방법을 소개합니다 이제 주문 패키지는 주문과 관련된 일련의 트랜잭션을 지원하며 각각의 트랜잭션에는 결제 방법과 금액 등 세부 정보가 포함됩니다 또한 트랜잭션에 영수증 파일을 첨부하여 고객이 결제 기록을 볼 수 있습니다 PDF 외에 JPEG나 PNG 같은 이미지도 영수증으로 쓸 수 있죠 주문 패키지는 크기에 제한이 있으므로 영수증 파일의 크기도 고려해야 합니다 앞으로는 트랜잭션이 구매용인지 환불용인지도 명시할 수 있습니다 iOS 17에서는 아주 간단하게 지갑에 주문을 추가할 수 있습니다 이제 이메일에 주문 패키지를 첨부할 수 있습니다 주문 확인 이메일 같은 곳에요 그러면 사용자는 바로 지갑에 주문을 추가할 수 있습니다 또한 앱과 웹사이트에 'Apple 지갑에서 추적' 버튼을 추가할 수도 있습니다 다음으로는 주문 추가를 지원하는 새 주문 추적 API를 살펴보겠습니다 두 프레임워크가 추가됐습니다 Financekit과 FinanceKitUI죠 개발자는 Swift 전용 프레임워크 두 가지를 통해 지갑 내에서 주문 데이터를 처리할 수 있습니다 FinanceStore는 주문 추적 쿼리를 처리하는 중앙 리소스를 제공하고 공유 인스턴스를 통해 주문 정보에 접근할 수 있습니다 이 API를 이용하면 기존 주문이 있는지 확인하고 주문을 추가하거나 업데이트할 수 있습니다 기존 주문을 확인하는 방법을 알아보겠습니다 먼저 정규화된 주문 식별자를 가진 주문이 FinanceStore에 포함되어 있는지 확인합니다 응답은 둘 중 하나입니다 주문이 존재하거나 찾을 수 없다는 것이죠 그러면 여러분의 앱에서 그에 맞게 응답하세요 아주 간단하죠? 주문을 추가하거나 업데이트하려면 방법은 두 가지입니다 우선 FinanceKit을 어떻게 사용하는지 보여드리죠 먼저 지갑에 추가하려는 서명된 주문 패키지의 데이터를 직렬화합니다 그 정보를 FinanceStore의 저장 주문 메서드에 제공하세요 이렇게 하면 사용자의 화면에 주문 내용이 뜨면서 지갑에서 추적할 것인지 묻습니다 사용자가 요청을 승인하거나 거부하면 비동기적으로 결과를 받게 됩니다 결과는 세 가지 형태를 갖습니다 지갑에 주문을 추가하거나 요청을 취소하거나 새 주문이 이미 존재하는 경우죠 앱이 SwiftUI로 작성된 경우 FinanceKitUI를 사용하세요 'Apple 지갑에서 추적' 전용 버튼을 제공하고 주문 추가 결과를 처리할 수 있게 해 주죠 Financekit과 마찬가지로 먼저 서명된 주문 패키지의 인스턴스를 직렬화해야 합니다 그다음에는 AddOrderTo WalletButton을 추가합니다 사용자가 이 버튼을 선택하면 지갑에 주문을 추가하는 기능이 제공될 것입니다 이전과 마찬가지로 결과 상태는 세 가지입니다 웹에서 주문을 추적하는 고객을 지원하려는 가맹점을 위해서 이 버튼의 JavaScript SDK 버전도 지원합니다 이것을 이용하려면 apple-wallet-button을 삽입하고 속성을 사용하여 구성하세요 버튼의 종류는 track-order로 설정해야 합니다 이 버튼을 사용할 때는 onClick 콜백을 설정해야 합니다 그래야 추가하려는 주문 패키지의 위치를 지정할 수 있죠 주문 추적 소개는 여기까지 하겠습니다 여러분의 앱과 서비스에 새 API가 채택될 날이 기대되네요 지금부터는 완전히 다른 이야기입니다 신분증과 관련된 멋진 소식이 기다리고 있죠 이 발표는 존에게 넘기겠습니다 고마워요, 데이비드 안녕하세요 저는 존입니다 Apple Pay와 지갑 팀 엔지니어죠 iOS 17의 신분증에 추가된 새로운 기능을 말씀드리게 되어 매우 기쁩니다 iOS 15.4부터 지갑에 ID를 도입했습니다 이 기능을 지원하는 미국 주에서 사용자가 면허증이나 신분증을 지갑에 추가할 수 있죠 작년에는 Verify with Wallet을 도입했습니다 사업체가 이 API를 이용하면 Apple Wallet에 저장된 사용자의 신분증에서 정보를 요청해서 온보딩 및 계정 확인 흐름을 간소화할 수 있습니다 올해 iOS 17에서는 iPhone에 Tap to Present ID를 도입합니다
이 API를 활용하면 지갑의 신분증과 모바일 면허증을 여러분의 iPhone만으로 빠르고 안전하게 확인할 수 있죠 iPhone API에서 Tap to Pay를 기반으로 하는데요 iOS 15.4에서 ProximityReader 프레임워크에 추가됐죠 iPhone의 Tap to Pay는 안전하고 은밀하며 간단한 비접촉식 결제 수락 방법을 제공합니다 다른 하드웨어나 결제 단말기가 필요하지 않죠 이제 Tap to Present ID의 작동 방식을 살펴보겠습니다 제가 Spaceship Rentals의 직원이라고 가정해 보죠 그리고 데이비드가 우주선을 빌리러 왔습니다 그러려면 최소한 21세가 넘어야 하므로 Tap to Present ID를 이용해서 나이를 확인해 보겠습니다 우선 Spaceship Rentals 앱에서 Tap to Present ID를 엽니다
제 iPhone에는 사업체 이름과 로고 및 수행 중인 요청이 표시됩니다 여기서는 나이 인증이죠 이제 데이비드가 자기 iPhone을 제 iPhone 근처에 대야 합니다 이제 제 iPhone에 허락 요청이 표시됩니다 Spaceship Rentals에 제 신원 정보를 제공한다고 하네요 제 신분증 사진을 보고 21살 이상인지도 확인하려고요 저는 이 정보를 제공하고 싶으니 더블클릭하고 Face ID로 인증하겠습니다 이제 제 iPhone에 데이비드가 제시한 정보가 뜹니다 얼굴이 신분증 사진과 일치하고 나이도 21세 이상이군요 이제 우주선에 탑승해도 되겠어요
방금 Tap to Present ID API로 데이비드의 신원을 확인했습니다 실제 신분증 확인과 비교하면 분명한 장점이 있었죠
첫째, 신분증 정보 자체가 검증되어 있습니다 변조에 취약한 실제 신분증과 달리 모바일 운전면허증은 발급 기관에 의해 암호화된 방식으로 서명되며 iOS에서 서명을 확인하므로 응답을 신뢰할 수 있습니다 둘째, 신원 확인은 무선으로 안전하게 이뤄졌습니다 데이비드가 iPhone을 넘겨주거나 잠금 해제할 필요가 전혀 없었죠 데이터는 NFC와 블루투스로 안전하게 전송됐습니다 마지막으로 더욱 은밀하게 신원을 확인할 수 있습니다 데이비드는 나이 확인에 필요한 정보만 공유했습니다 실제 신분증을 사용하면 모든 정보가 노출되죠 이 API로 수행할 수 있는 요청 유형을 알아보겠습니다 방금 시연한 것은 표시 요청입니다 이름이나 나이를 확인해야 할 때 적합하죠 결과는 시스템 UI에 표시되며 어떤 신원 정보도 여러분의 앱에 반환되지 않습니다 이 API는 데이터 요청도 지원합니다 더 넓은 범위의 문서 요소도 요청할 수 있죠 주소, 생년월일 운전면허 등을 받아서 그 결과를 여러분의 앱으로 반환하여 처리합니다 데이터 요청을 수행하려면 여러분의 앱에 추가 권한이 필요합니다 더 자세한 내용은 문서를 확인하세요
이제 코드로 구현하는 방법을 알아보겠습니다 표시 요청부터 시작하죠
우선 MobileDocumentReader의 isSupported 클래스 속성으로 현재 기기가 이 API를 지원하는지 확인하세요 리더 객체를 인스턴스화하고 해당 prepare 메서드를 호출합니다 그러면 MobileDocument ReaderSession 객체가 반환됩니다 다음으로는 운전면허증 표시 요청과 함께 확인하고 싶은 요소를 입력합니다 여기서는 운전면허증 소지자가 21세 이상인지 확인하려 합니다 그리고 세션에 requestDocument를 호출하여 요청을 전달합니다 리더 UI가 표시된 후 신분증 소유자에게 기기를 제시하란 메시지를 보내고 요청 결과를 표시합니다
명심하세요 이건 표시 요청이므로 requestDocument 메서드에서 아무것도 반환되지 않습니다 고작 몇 줄의 코드만으로도 모바일 문서 읽기 기능이 여러분의 앱에 추가됐습니다 기본 설정에서 여러분의 브랜드 이름과 로고는 리더와 신분증 소지자의 iPhone에 표시되지 않습니다 그러나 문서 요청 과정에서 브랜드의 정보가 표시되길 원한다면 그것도 가능합니다 Apple Business Register를 통해 코드를 몇 줄 추가하는 것으로 구현할 수 있습니다 문서 요청 중에 브랜드 정보를 표시하려면 기기를 준비할 때 리더 토큰을 전달해야 하며 토큰은 여러분의 서버에 생성해야 합니다 리더 토큰은 JWT입니다 Apple Business Register에서 구성한 키 쌍으로 서명되어 있죠 여러분의 서버는 리더 토큰을 만들면서 브랜드 ID와 키 ID 및 리더 인스턴스 식별자를 생성합니다 브랜드와 키 ID는 Apple Business Register에서 얻을 수 있으며 앱의 모든 인스턴스에서 동일하게 적용됩니다 여러분의 앱이 여러분의 서버에 인스턴스 식별자를 제공할 겁니다 코드로 돌아가죠, 여러분의 앱이 MobileDocumentReader의 구성 객체에서 리더 인스턴스 식별자를 가져온 후 리더 토큰과 교환하여 여러분의 서버로 전송합니다 토큰을 prepare 메서드에 전달해서 리더 세션을 획득하죠 다음에는 이전과 마찬가지로 requestDocument를 호출합니다 이제 리더 iPhone과 ID 소유자의 기기 양쪽에 여러분의 브랜드 이름과 로고가 표시됩니다 표시 요청을 알아봤습니다 지금까지 세션을 준비하는 방법과 문서를 요청하는 방법 및 리더 토큰으로 브랜드 정보를 표시하는 법을 살펴보았습니다 다음은 데이터 요청을 수행하는 방법을 살펴보겠습니다 이러한 요청은 더 광범위한 문서 요소를 지원하며 API도 단순히 결과만 표시하는 대신 결과를 앱에 반환합니다
이러한 유형의 요청을 사용하려면 이전과 마찬가지로 여러분의 기기와 함께 리더 토큰을 준비해야 합니다 그다음에는 운전면허증 데이터 요청을 생성하고 문서의 어떤 요소를 요청할 것이며 그 정보를 보유할 것인지 여부를 결정합니다
requestDocument를 호출하면 표시 요청과 마찬가지로 리더 UI가 표시됩니다 그러나 일단 읽기가 완료되면 UI가 자동으로 종료되죠 그 후 응답은 앱으로 반환되어 처리됩니다 이것이 iPhone의 Tap to Present ID입니다 ProximityReader 프레임워크에 추가된 멋진 새 API죠 그럼 다시 데이비드에게 넘기겠습니다 고마워요, 존 오늘은 무엇을 배웠을까요? 결제의 개선점을 살펴봤습니다 Apple Pay Later와 새로운 사용 예시를 알아봤죠 주문 추적의 새 API를 활용하면 여러분의 앱과 서비스 내에서 지갑에 주문을 추가할 수 있습니다 iPhone에서 Tap to Present ID를 활용하면 모바일 운전면허증을 새로운 방법으로 확인할 수 있죠 마무리를 지어 보죠 여러분이 사업체라면 Apple Business Register에 등록하는 것을 고려하세요 고객의 지갑과 Apple Pay 경험이 훨씬 풍부해질 겁니다 Apple 개발자 포럼에 오시면 언제나 궁금한 것을 묻고 도움을 받을 수 있습니다 마지막으로 피드백이 있다면 자유롭게 말씀해 주세요 피드백 지원을 이용하시면 됩니다 이것으로 마치겠습니다 즐거운 시간되셨길 바랍니다 감사합니다 ♪ ♪
-
-
28:51 - Performing a display request to verify age
import ProximityReader // Check the current device supports mobile document reading. guard MobileDocumentReader.isSupported else { return } let reader = MobileDocumentReader() let readerSession: MobileDocumentReaderSession = try await reader.prepare() let request = MobileDriversLicenseDisplayRequest(elements: [.ageAtLeast(21)]) try await readerSession.requestDocument(request)
-
30:55 - Displaying brand information during a document request
let reader = MobileDocumentReader() let identifier = try await reader.configuration.readerInstanceIdentifier let readerToken = try await WebService().fetchToken(for: identifier) let readerSession = try await reader.prepare(using: .init(readerToken)) let request = MobileDriversLicenseDisplayRequest(elements: [.ageAtLeast(21)]) try await readerSession.requestDocument(request)
-
31:50 - Performing a data request
let session: MobileDocumentReaderSession = /* ... */ var request = MobileDriversLicenseDataRequest() request.retainedElements = [.givenName, .familyName, .dateOfBirth, .portrait] request.nonRetainedElements = [.address, .documentExpirationDate, .drivingPrivileges] let response = try await session.requestDocument(request) // Process document elements from document response. self.processResponse(response.documentElements)
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.