View in English

  • 메뉴 열기 메뉴 닫기
  • Apple Developer
검색
검색 닫기
  • Apple Developer
  • 뉴스
  • 둘러보기
  • 디자인
  • 개발
  • 배포
  • 지원
  • 계정
페이지에서만 검색

빠른 링크

5 빠른 링크

비디오

메뉴 열기 메뉴 닫기
  • 컬렉션
  • 주제
  • 전체 비디오
  • 소개

WWDC25 컬렉션으로 돌아가기

  • 소개
  • 요약
  • 자막 전문
  • StoreKit 및 앱 내 구입의 새로운 기능

    StoreKit API의 최신 개선 사항을 통해 고객에게 우수한 앱 내 구입 경험을 제공할 수 있는 방법을 알아보세요. AppTransaction, Transaction 및 RenewalInfo에 추가된 새로운 필드와 앱 내 구입 특가 코드에 대한 업데이트를 검토합니다. 또한 App Store Server Library를 사용하여 서명된 앱 내 구입 요청을 생성하는 방법과 SwiftUI를 사용하여 상품 구독을 업데이트하는 방법도 소개합니다.

    챕터

    • 0:00 - 서론
    • 0:36 - 새로운 기능 살펴보기
    • 10:24 - 앱 내 구입 요청 서명하기
    • 14:21 - 상품 구독

    리소스

    • Advanced Commerce API
    • Human Interface Guidelines: In-app purchase
    • Implementing a store in your app using the StoreKit API
    • Set up offer codes
    • Simplifying your implementation by using the App Store Server Library
    • StoreKit
      • HD 비디오
      • SD 비디오

    관련 비디오

    WWDC25

    • App Store Connect의 새로운 기능

    WWDC24

    • 앱 내 구입을 위한 App Store Server API 살펴보기

    WWDC23

    • SwiftUI용 StoreKit 알아보기

    WWDC21

    • StoreKit 2 소개
  • 비디오 검색…

    안녕하세요, 저는 Rudy입니다 이 세션에서는 StoreKit의 새 기능을 소개하고 App Store Server Library와 새로운 StoreKit 2 API를 개발 워크플로우에 통합하는 방법을 설명해 드리겠습니다 먼저, StoreKit의 새로운 핵심 프레임워크 기능을 설명하겠습니다 그다음 App Store Server Library로 앱 내 구입 요청을 서명하는 방법을 보여드리겠습니다

    마지막으로 SwiftUI와 StoreKit 뷰를 사용하여 앱 내에서 구독 상품을 판매하는 새로운 방법을 다룰게요

    시작하기 전에 3가지 핵심 유형인 AppTransaction, Transaction RenewalInfo에 적용된 업데이트를 설명할게요 이러한 유형은 앱의 구입 내역을 파악하고 구입 내역을 모니터링하며 구독 상태를 관리할 수 있도록 합니다 AppTransaction은 앱의 원래 구입에 대한 정보를 제공합니다 이 정보를 통해 고객의 최초 구입 날짜 고객이 다운로드한 앱 버전 앱을 App Store에 출시하기 전에 고객이 사전 주문한 날짜를 확인할 수 있습니다 예를 들어, appVersion으로 앱을 최신 버전으로 업그레이드하도록 고객에게 안내할 수 있죠 AppTransaction을 얻으려면 AppTransaction.shared API를 쿼리하고 verified 결과를 사용하세요 StoreKit은 AppTransaction의 JSON 웹 서명을 자동으로 검증하고 verificationResult에서 verified 값을 반환합니다 AppTransaction에서 verified가 반환되면 App Store에서 AppTransaction에 서명했고 AppTransaction이 앱과 고객의 기기에 있다는 점을 StoreKit이 확인했음을 뜻하죠 Apple은 개발자가 비즈니스 전략을 수립할 때 구독 및 특가 관련 정보를 최대한 많이 제공하고자 합니다 올해 AppTransaction 유형에 두 개의 필드가 추가되었습니다 iOS 18.4의 AppTransaction 유형에는 iOS 15까지 역호환되는 appTransactionID 필드가 포함됩니다 appTransactionID는 앱을 다운로드한 각 Apple 계정에 대해 전 세계적으로 고유하게 생성되는 값입니다 가족 공유를 지원하는 앱의 경우 appTransactionID는 각 가족 그룹 구성원에 대해서도 고유합니다 appTransactionID를 사용하면 서버 간 호출 없이 고유한 개별 트랜잭션 ID를 연결하는 것과 같은 작업을 실행할 수 있습니다

    originalPlatform 필드도 iOS 18.4에 새로 도입되었습니다 originalPlatform은 AppStore.Platform이라는 새로운 유형의 필드입니다 이 값은 고객이 앱을 처음 구입한 플랫폼을 나타냅니다 iOS, macOS, tvOS 또는 visionOS가 될 수 있죠 App Store Connect에서 사용할 수 있는 대상 플랫폼과 일치합니다 watchOS에서 다운로드된 앱의 originalPlatform 필드는 iOS로 설정됩니다 originalPlatform 필드를 사용하면 유료 앱에서 앱 내 구입을 지원하는 무료 앱으로 전환하는 것과 같은 비즈니스 모델 변경을 더 쉽게 지원할 수 있죠 originalPlatform 필드는 시간이 지나면서 비즈니스가 발전함에 따라 고객에게 적절한 권한을 부여하는 데 도움이 됩니다 이제 Transaction 유형에 적용된 업데이트를 설명할게요 Transaction은 완료된 앱 내 구입을 나타내며 해당 구입에 관한 유용한 정보를 포함합니다 Transaction에는 구입 날짜 앱 내 구입의 productID 자동 갱신 구독의 경우 구독 만료일이 포함됩니다. Transaction은 주로 고객의 권한을 확인하고 콘텐츠를 잠금 해제하는 데 사용되죠 앱은 productID 필드를 통해 잠금 해제할 콘텐츠를 식별합니다 구입이 완료되면 시스템은 인라인이나 Transaction.currentEntitlements와 같은 Transaction 시퀀스를 통해 Transaction을 반환합니다 가져오는 방식과 상관없이 Transaction은 AppTransactions처럼 항상 확인 결과로 래핑되어 있죠 즉, Transaction을 직접 확인하지 않아도 됩니다 StoreKit 2가 자동으로 처리해 주니까요 currentEntitlement에 대해 말하자면, iOS 18.4부터 productID API의 Transaction.currentEntitlement는 사용 중단되었으며 새 Transaction.currentEntitlements API로 대체되었습니다 이 새로운 API는 productID를 전달하여 호출할 수 있습니다 이 API는 고객에게 특정 제품에 대한 권한을 부여하는 Transaction의 비동기 시퀀스를 반환합니다 고객은 특정 제품에 대한 권한을 부여하는 Transaction을 두 개 이상 보유할 수 있습니다 구독을 보유하고 있는데 가족 공유를 통해서도 이 구독에 접근할 수 있는 경우처럼요 그러므로 프로젝트에 이 API를 채택하는 것이 좋습니다 올해 Transaction 모델에는 3개의 필드가 추가되었습니다

    iOS 15까지 역호환되는 appTransactionID 필드는 앱 다운로드 Transaction의 고유한 식별자입니다 앞서 설명한 AppTransaction 유형에 포함되는 것과 동일한 값입니다 iOS 18.4에서는 offer 멤버에 포함된 Offer Period 필드도 추가되었습니다 Offer Period는 고객이 구입 시점에 사용하는 구독 특가와 연관된 구독 기간입니다 iOS 18.4에서 도입된 마지막 새로운 필드는 advancedCommerceInfo입니다 AdvancedCommerceInfo는 Advanced Commerce API를 사용하는 앱에만 적용됩니다 Advanced Commerce API를 사용하지 않는 앱에서는 이 필드가 항상 nil이 됩니다 Advanced Commerce API를 사용하면 대규모 콘텐츠 카탈로그 크리에이터 경험 및 추가 콘텐츠를 선택할 수 있는 구독에서 앱 내 구입을 더 쉽게 지원할 수 있습니다 Advanced Commerce API를 지원하기 위해 StoreKit 2는 iOS 18.4에서 사용할 수 있는 AdvancedCommerceProduct를 포함한 새 기본 API와 Transaction, SubscriptionStatus와 같은 기존 API를 제공합니다 Advanced Commerce API에 대해 자세히 알아보려면 이 세션의 웹페이지 리소스 목록을 확인하세요 마지막으로 RenewalInfo 유형에 적용된 업데이트를 설명할게요 RenewalInfo 유형은 자동 갱신 구독을 위해 특별히 설계되었죠 RenewalInfo에는 구독의 자동 갱신 여부 다음 구독 갱신 날짜 구독이 만료된 구독자의 경우 만료 이유 등의 정보가 포함됩니다 구독 만료 이유를 사용하는 방법의 예를 들자면 최근에 서비스 가격을 인상한 상황에서 만료 이유가 didNotConsentToPriceIncrease로 나타날 수 있습니다 이때 윈백 특가를 제공하여 고객이 서비스를 다시 구독하도록 장려할 수 있습니다 StoreKit은 RenewalInfo 값을 SubscriptionStatus 인스턴스의 래핑된 VerificationResult 멤버로 제공합니다 SubscriptionStatus는 다양한 방법으로 얻을 수 있습니다 SubscriptionStatus.updates API로 얻거나 구독 그룹 ID를 활용하여 StoreKit에서 구독 상태를 쿼리할 수 있죠 참고로, 구독 그룹 ID를 사용하여 StoreKit에서 구독 상태를 쿼리할 때는 비즈니스 모델에 따라 가장 높은 서비스 수준을 제공하는 SubscriptionStatus를 기준으로 앱 서비스에 접근할 권한을 부여해야 합니다 iOS 18.4에는 트랜잭션 ID를 받는 SubscriptionStatus API도 새롭게 추가되었습니다 이제 구독과 연관된 모든 트랜잭션의 트랜잭션 ID를 사용하여 StoreKit에서 구독 상태를 쿼리할 수 있습니다 올해 RenewalInfo 유형에는 4개의 필드가 추가로 도입되었습니다 appTransactionID 필드는 iOS 15까지 역호환되며 Offer Period와 advancedCommerceInfo 필드는 iOS 18.4부터 사용할 수 있습니다 또한 구독을 서비스의 고객 계정과 연결하는 appAccountToken 필드가 추가되었습니다 구입 시점에 appAccountToken PurchaseOption을 사용하여 appAccountToken을 선택적으로 제공할 수 있습니다 App Store는 구독과 연관된 RenewalInfo의 새 appAccountToken 필드에 동일한 값을 반환합니다 이러한 새 필드를 활용하려면 최신 Xcode로 앱을 빌드하면 됩니다 새 필드를 사용하면 앱을 더 쉽게 개발할 수 있으며 더 나은 고객 경험을 제공하는 데 도움이 될 것입니다 이제 특가 코드에 대해 설명하겠습니다 특가 코드는 특정 기간에 구독을 할인된 가격이나 무료로 제공할 수 있도록 하는 알파벳과 숫자로 구성된 코드입니다 특가 코드 사용 관련 StoreKit API를 구현하면 고객이 일회용 교환 URL이나 앱을 통해 App Store 특가 코드를 사용할 수 있죠 이제 소모성 항목, 비소모성 항목 및 비갱신 구독에 대해 특가 코드를 사용할 수 있습니다 고객은 offerCodeRedemption API를 통해 앱 내에서 특가 코드를 사용할 수 있습니다 앱이 UIKit을 사용하는 경우 presentOfferCodeRedeemSheet API를 사용하세요 소모성 항목, 비소모성 항목 및 비갱신 구독에 대한 특가 코드 사용은 iOS 16.3까지 역호환됩니다 특가 코드 사용 완료에 의해 생성되는 Transaction은 StoreKit 2 API를 사용하는 모든 OS 버전에서 사용할 수 있습니다 앱이 더 오래된 OS 버전을 지원하는 경우 고객의 자동 갱신 구독에 대한 특가 코드 사용은 iOS 14.2까지 역호환됩니다 자동 갱신 구독 외 제품 유형에 대한 특가 코드 사용을 지원하기 위해 Transaction.Offer.PaymentMode 유형에 새로운 결제 모드가 추가되었습니다 이 유형은 특가 유형에 따라 특가 기간에 고객에게 요금이 부과되거나 부과되지 않는 방식을 설명하며, freeTrial와 같이 결제가 필요 없는 경우를 비롯한 다양한 결제 모드를 포함합니다 다른 결제 모드로는 payAsYouGo와 payUpFront가 있습니다 이제 iOS에서 앱 내 구입 특가 코드에 대해 oneTime 결제 모드가 도입되며 이는 iOS 17.2까지 역호환됩니다 앱이 iOS 17.2 이전 버전을 지원하는 경우 iOS 15까지 역호환되는 Transaction의 offerPaymentModeStringRepresentation 멤버를 통해 새 결제 모드에 접근할 수 있습니다 앱 내 구입 특가 코드를 설정하는 방법을 자세히 알아보려면 WWDC25 세션인 App Store Connect의 새로운 기능을 시청하세요 또한 iOS 18.2부터 StoreKit에 UI 컨텍스트가 필요한 결제 방법이 추가되었습니다 시스템이 기기의 활성 장면에서 가장 직관적인 위치에 결제 시트와 완료 대화상자를 표시하려면 앱에서 구매가 발생하는 UI 컨텍스트를 명시해야 합니다 새로운 구입 방법은 iOS 18.2 및 관련 릴리즈에서부터 사용할 수 있습니다 제공할 UI 컨텍스트는 플랫폼에 따라 다릅니다 iOS, macCatalyst, tvOS 및 visionOS에서는 UI 컨텍스트가 UIViewController입니다 macOS에서는 NSWindow입니다 watchOS용 앱을 개발하는 경우 UI 컨텍스트를 제공하지 마세요 SwiftUI 뷰에서 구입하는 경우 이 계산을 직접 실행하지 않습니다 대신 purchase Environment 값을 읽어 PurchaseAction 인스턴스를 얻으세요 구입을 실행할 준비가 되면 PurchaseAction 인스턴스를 직접 호출하세요 인스턴스를 호출할 때 Swift가 호출하는 callAsFunction 메서드를 정의하기 때문입니다 StoreKit 뷰를 사용하는 경우 UI 컨텍스트를 제공하지 않아도 됩니다

    시스템에서 자동으로 처리해 주죠 ProductView, StoreView 및 SubscriptionStoreView를 사용하여 고객을 위해 최상의 앱 내 구입 경험을 구현하는 방법을 알아보려면 WWDC23 세션인 SwiftUI용 StoreKit 알아보기를 확인하세요 핵심 API 개선 사항을 다루었으니 이제 다른 중요한 업데이트를 설명해 드릴게요 올해에는 JSON 웹 서명이 필요한 새 API가 도입되었습니다 새로운 API를 알아보고 개발 작업 흐름에서 App Store Server Library를 사용하여 서명 절차를 간소화하는 방법을 살펴보죠 올해 새롭게 추가된 introductoryOfferEligibility 구입 옵션을 통해 고객의 신규 구독 특가 사용 자격을 설정할 수 있습니다 또한 새로운 promotionalOffer 구입 옵션을 사용하여 JWS 형식으로 프로모션 특가를 서명할 수 있죠 새로운 구매 옵션은 모두 compactJWS 문자열이 필요하며 iOS 15까지 역호환됩니다 각 구입 옵션과 함께 사용할 수 있는 새로운 SwiftUI 뷰 한정자도 도입되었습니다 고객의 프로모션 또는 신규 특가 사용 자격을 설정하는 것처럼 JWS를 사용하면 특정 사용 사례에 대해 구매가 승인되었음을 App Store에서 확인할 수 있죠 서명 요청을 쉽게 처리할 수 있도록 Apple은 App Store Server Library와 같은 훌륭한 오픈 소스 도구를 제공합니다 앱에서 서명된 요청을 빠르게 생성하는 방법을 설명하기 위해 SKDemo에서 프로모션 특가를 서명하는 과정을 보여드릴게요 시작하기 전에 App Store Connect에서 앱 내 구입 서명 키를 가져와야 합니다 Users & Access 탭으로 이동한 후 Integrations 헤더를 클릭하고

    왼쪽 탐색 메뉴에서 In-App Purchases를 선택하세요 활성 키를 사용하거나 키를 새로 생성할 수 있습니다 앱 내 구입 서명 키의 발급자 ID와 키 ID를 기록해 두세요 앱 내 구입 서명 키가 있으니 SKDemo 앱 내 구독 스토어를 확인해 보겠습니다 이 구독 스토어는 고객이 구입할 수 있는 요금제를 판매합니다 구독이 만료된 사용자가 다시 구독하도록 장려하고 싶네요 이를 위해 새로운 JWS 기반 subscriptionPromotionalOffer 한정자를 사용하여 Pro 요금제의 프로모션 특가를 판매할게요 이 한정자는 두 개의 클로저를 기대합니다 첫 번째 클로저는 해당 구독 구입에 적용될 구독 특가를 제공합니다 이 예시에서는 이전에 만든 도움 메서드를 사용하여 가장 긴 무료 체험 기간을 가진 프로모션 특가를 Pro Plan에 적용할게요 이 한정자의 두 번째 클로저는 서명된 특가 세부 정보를 포함하는 compactJWS를 기대합니다 여기서는 NetworkLayer 유형을 통해 제공됩니다 이 구현이 어떻게 작동하는지 자세히 살펴보죠 NetworkLayer에서 제품과 구독 특가의 productID와 offerID를 요청의 쿼리 매개변수로 전달합니다 그런 다음 서버의 프로모션 특가 서명 경로에 대해 GET 요청을 실행합니다 마지막으로 응답을 디코딩합니다 서버 프로젝트에서 App Store Server Library Swift 패키지 종속성을 추가하고 App Store Server Library를 가져옵니다 프로모션 특가 서명 요청을 처리하는 경로의 구현에서 PromotionOfferV2SignatureCreator를 시작하여 프로모션 특가 서명 컨텍스트를 만듭니다 앱의 번들 ID, 서명 키와 아까 App Store Connect에서 가져온 키 ID, 발급자 ID를 사용하세요 그다음 createSignature 함수를 호출하고 구입되는 구독의 productID와 구독 특가의 offerID를 제공합니다 Transaction ID 필드에 대한 값을 추가하는 것이 좋습니다 이 값은 고객에게 속하는 Transaction의 appTransactionID나 TransactionID일 수 있습니다 TransactionID 필드는 선택 사항이지만 포함하는 것이 좋죠

    앱으로 돌아가면 프로모션 특가가 성공적으로 사용되며 구입이 문제없이 완료됩니다 App Store Server Library를 사용하여 앱 내 구입 요청을 만드는 방법을 설명했습니다 앱 내 구입 요청에 서명하면 개발자가 구입을 승인했음을 App Store에서 확인할 수 있습니다 App Store Server Library와 통합하면 요청을 쉽게 서명할 수 있죠 가장 큰 장점은 App Store Server Library가 Java, Python, Node.js Swift 등 4가지 언어로 제공된다는 것이죠 App Store Server Library를 시작하려면 WWDC24 세션인 앱 내 구입을 위한 App Store Server API 살펴보기를 확인해 보세요 마지막 업데이트를 설명하면서 SwiftUI를 통해 앱에서 고객과 상호 작용하는 새 방법을 알려 드릴게요 먼저 StoreKit 뷰에 새로 추가된 SubscriptionOfferView를 소개할게요 이 뷰는 판매 및 자동 갱신 구독을 위한 새로운 SwiftUI 뷰로 앱의 서비스에 대한 고객의 관심을 끌도록 설계되었습니다 SubscriptionOfferView는 이미 로드된 자동 갱신 구독이나 자동 갱신 구독의 productID를 사용하여 선언합니다 이 방식으로 선언되면 뷰가 App Store로부터 제품 메타데이터를 로드하는 모든 작업을 자동으로 실행합니다 App Store Connect에서 설정한 구독 이미지를 뷰에 적용하려면 prefersPromotionalIcon 플래그를 true로 설정하세요 장식용 아이콘은 시스템이 구독 메타데이터를 다 로드한 후 표시됩니다 뷰에 맞춤형 아이콘을 적용하려면 이 API의 대체 표기법을 사용하고 뒤쪽에 ViewBuilder 클로저를 전달하면 됩니다 또한 App Store 서버에서 구독 메타데이터가 다운로드되는 동안 표시할 맞춤형 플레이스홀더 아이콘을 제공할 수 있죠 SubscriptionOfferView는 단일 구독 요금제 판매 외 용도로도 활용할 수 있습니다 예를 들어, 새로운 subscriptionOfferViewDetailAction 한정자와 함께 이 뷰를 사용하면 고객 트래픽을 앱 내 구독 스토어로 유도할 수 있습니다 이 한정자를 선언하면 뷰에 detailLink 버튼이 표시됩니다 고객이 detailLink 버튼을 탭하면 뷰는 이 한정자로 연결된 경로를 닫습니다 SKDemo로 예시를 보여드릴게요 ContentView에서 앱의 사용자 흐름 표시 방법을 제어하는 상태를 일부 수정합니다 고객이 detailLink 버튼을 탭하면 앱의 구독 스토어로 이동하여 구입 가능한 구독 요금제를 확인할 수 있습니다 이 API를 사용할지 결정할 때는 어떤 구독 요금제를 판매할지, 더 나아가 구독 요금제를 표시해야 할지를 고려하는 것이 중요합니다 이제 코드를 살펴보며 이 API를 사용하는 방법을 설명하겠습니다 SubscriptionOfferView로 어떤 구독 요금제를 판매할지 결정할 때는 고객의 구독 상태를 먼저 파악해야 합니다 SwiftUI로 작성된 앱에서는 이를 앱 프로토콜의 구현에서 실행하는 것이 가장 편리합니다 이 데이터를 사용하여 나머지 뷰 계층 구조에 알리면 됩니다 이때 iOS 17에서 도입된 subscriptionStatusTask 한정자를 선언하세요 이 한정자에서 반환한 StoreKit의 구독 상태를 앱이 이해할 수 있는 모델로 변환합니다 SKDemo에서는 이 모델을 SKDemoPlusStatus라고 합니다 그다음 뷰에서 상태를 추적하는 Source of Truth를 업데이트하고 환경 변수를 통해 환경에 전달합니다

    고객 상태를 파악했으므로 이 상태를 사용하여 ContentView에 SubscriptionOfferView를 표시합니다 여기에서 고객 상태를 포함하는 환경 값을 읽은 후 고객이 현재 구독자가 아니면 일반 요금제를 판매하고 이미 구독 중이면 더 높은 등급의 요금제를 판매하기로 결정합니다 코드를 간결하게 유지하기 위해 SubscriptionOfferView를 만들 때 groupID 이니셜라이저를 사용할게요 이 방식으로 선언되면 시스템이 구독 그룹에서 자동으로 요금제를 선택합니다 또한 고객의 현재 요금제와 판매되는 요금제 간 관계를 정의해야 합니다 visibleRelationship 매개변수는 upgrade, downgrade crossgrade, current, all 중 하나일 수 있습니다 이 API는 고객의 상태에 따라 다르게 작동합니다 각 관계를 자세히 살펴볼게요 먼저 upgrade입니다 시연을 위해, 고객이 중간 등급의 요금제를 구독 중이라고 가정해 보겠습니다 upgrade를 지정하면 뷰는 현재 요금제보다 한 등급 높은 구독 요금제를 판매하게 됩니다 관계를 downgrade로 지정하면 이와 반대로 작동하죠 이 예시에서는 구독자와 구독하지 않은 고객 모두 같은 요금제를 보게 됩니다 고객이 자동 갱신 기능을 비활성화한 상태에서 갱신 주기가 끝나기 전에 고객을 유지하고 싶다면 더 저렴한 요금제를 판매할 수 있습니다 crossgrade 옵션은 현재 요금제와 같은 등급의 그룹 내 요금제를 고려한 후 고려한 요금제 중 가장 저렴한 옵션을 선택합니다 현재 관계에서는 고객이 현재 사용 중인 요금제가 표시됩니다 기본적으로 사용할 수 있는 구독 특가가 있지 않는 한 모든 상호 작용이 중지됩니다 고객을 특가 제공 대상으로 표시하려면 특가 관련 한정자를 사용하면 됩니다 새 subscriptionPromotionalOffer 한정자와 preferredSubscriptionOffer 한정자를 예로 들 수 있죠 이 관계의 효과적인 용도로는 곧 만료되는 구독에 대한 할인을 표시하여 구독자를 유지하는 것이 있습니다 마지막으로 all 관계가 있습니다 이 관계는 모든 고객에게 동일한 방식으로 작동합니다 이 방식으로 초기화되면 뷰에는 그룹에 있는 모든 요금제의 가격 정보가 표시됩니다 뷰에서 실행할 작업을 제공하려면 subscriptionOfferViewDetailAction 한정자를 선언하세요 SubscriptionOfferView로 어떤 관계를 생성하든 이 세션에서 앞서 다룬 예시와 유사한 방식으로 특가를 맞춤형 아이콘과 플레이스홀더 아이콘으로 꾸밀 수 있습니다 앱의 아이콘도 간편하게 사용할 수 있습니다 useAppIcon 플래그를 true로 설정하면 됩니다 이로써 새 SubscriptionOfferView를 사용하여 효과적으로 고객의 관심을 끄는 방법에 대한 설명을 마치겠습니다 이 세션에서는 고객에게 우수한 앱 내 구입 경험을 제공하는 데 유용한 StoreKit API의 여러 개선 사항을 다루었습니다 아직 프로젝트에서 StoreKit 2를 채택하지 않았다면 이번에 채택하여 유용한 새 기능을 활용하세요 앱에 최신 디자인을 적용하고 우수한 스토어를 만들기 위해 StoreKit 뷰를 사용하여 앱 내 구입 및 구독을 판매하세요 GitHub를 통해 제공되는 App Store Server Library를 프로젝트에 통합하여 앱 내 구입 요청 서명을 간편하게 처리하세요 App Store Server API를 자세히 알아보려면 WWDC25 세션인 앱 내 구입을 위한 App Store Server API 자세히 알아보기를 시청하세요 StoreKit 2를 처음 채택하는 경우 WWDC21 세션인 StoreKit 2 소개가 많은 도움이 될 것입니다 시청해 주셔서 감사합니다 StoreKit으로 우수한 경험을 빌드하시기를 바랍니다

    • 0:00 - 서론
    • 핵심 프레임워크 업데이트, 앱 내 구입 요청 로깅을 위한 App Store Server 라이브러리, 판매 구독을 위한 SwiftUI 뷰를 비롯하여 새로운 StoreKit 기능에 대해 알아보세요.

    • 0:36 - 새로운 기능 살펴보기
    • StoreKit의 세 가지 주요 유형에 대한 새로운 업데이트는 바로 ‘AppTransaction’, ‘Transaction’, ‘RenewalInfo’입니다. 이러한 유형은 앱 구매에 대한 귀중한 통찰 및 고객 거래 내역 및 구독 상태에 대한 정보를 제공합니다. iOS 18.4부터 ‘AppTransaction’에 두 개의 새로운 필드가 포함됩니다. ‘appTransactionID’는 앱을 다운로드하고 iOS 15에 다시 배포되는 각 Apple 계정에서 전역적으로 고유한 값입니다. 이 ID는 가족 공유를 지원하는 앱의 각 가족 그룹 구성원에서도 고유합니다. ‘originalPlatform’ 필드는 고객이 iOS, macOS, tvOS 또는 visionOS 등 원래 앱을 구매한 플랫폼을 나타냅니다. 이러한 정보는 비즈니스 모델 변경을 지원하고 고객에게 적절한 권한을 부여하는 데 도움이 됩니다. ‘Transaction’ 유형은 성공적인 앱 내 구입을 나타내고 구매 날짜, 제품 ID, 자동 갱신 구독의 만료 날짜 등의 세부 정보를 포함합니다. iOS 18.4부터 ‘Transaction.currentEntitlement(for:)’ API에 ‘Transaction.currentEntitlements(for:)’라는 대체 항목이 추가됩니다. 이러한 새로운 API는 다양한 수단을 통해 고객이 여러 가지 권한을 가질 수 있어 고객에게 특정 제품에 대한 권한을 부여하는 비동기식 거래 시퀀스를 반환합니다. 올해 Transaction 모델에는 3개의 새로운 필드가 추가됩니다. ‘appTransactionID’, ‘offer period’는 상환된 특가와 관련된 구독 기간을 자세히 설명하고 ‘advancedCommerceInfo’는 Advanced Commerce API를 사용하는 앱에만 적용됩니다. Advanced Commerce API를 사용하면 대규모 콘텐츠 카탈로그, 크리에이터 경험, 추가 기능을 선택할 수 있는 구독에 대한 앱 내 구입을 보다 쉽게 지원할 수 있습니다. 마지막으로, 특히 자동 갱신 구독을 위한 ‘RenewalInfo’ 유형에는 구독의 갱신 상태에 대한 세부 정보가 포함되어 있어 구독 기반 비즈니스를 효과적으로 관리하고 이해하는 데 도움이 됩니다. 여기에는 다음 구독 갱신 날짜와 구독이 만료된 구독자의 경우 만료 이유와 같은 세부 정보가 포함됩니다. 이러한 이유는 고객 행동을 이해하고 이에 따라 전략을 맞추는 데 중요할 수 있습니다. 예를 들어, 가격 인상으로 인해 구독이 만료된 경우, 이 정보를 사용하여 윈백 프로모션을 제공하고 고객에게 재구독을 권유할 수 있습니다. iOS 18.4부터 ‘SubscriptionStatus’ API가 개선되어 Transaction ID를 사용하여 구독 상태를 쿼리할 수 있게 되어 유연성과 데이터 접근성이 향상되었습니다. 또한, ‘RenewalInfo’ 유형에 4개의 새로운 필드가 추가되어 구독 세부 정보에 대한 더욱 포괄적인 통찰을 제공합니다.

    • 10:24 - 앱 내 구입 요청 서명하기
    • 올해에는 JSON Web Signatures(JWS)가 필요한 새로운 Purchase Option 및 View Modifier API가 있습니다. 이러한 API를 사용하면 신규 구독 특가에 대한 고객 자격을 설정하고 JWS 형식을 사용하여 프로모션 특가를 서명할 수 있습니다. App Store Server Library는 JWS 서명 프로세스를 단순화합니다. App Store Connect에서 앱 내 구입 서명 키를 검색하여 Library와 함께 사용하여 서명된 요청을 만들어야 합니다.

    • 14:21 - 상품 구독
    • ‘SubscriptionOfferView’라고 하는 새로운 SwiftUI 뷰는 앱에서 자동 갱신 구독을 선보이고 홍보하는 데 도움이 되도록 설계되었습니다. 이 뷰는 자동 갱신 구독 ID를 사용하여 선언된 경우 App Store에서 제품 메타데이터를 자동으로 로드하여 판매 구독 프로세스를 간소화합니다. App Store Connect에 설정된 구독 이미지를 사용하거나 사용자 정의 아이콘을 제공하여 ‘SubscriptionOfferView’의 모양을 사용자 정의할 수 있습니다. 구독 메타데이터를 다운로드하는 동안 표시할 플레이스홀더 아이콘을 설정할 수도 있습니다. ‘subscriptionOfferViewDetailAction’ 수정자를 사용하면 ‘detailLink’ 버튼을 추가하여 뷰를 향상시킬 수도 있습니다. 이 버튼을 탭하면 사용자가 정의한 사용자 지정 작업이 수행됩니다. 이러한 작업의 일반적인 패턴은 고객을 앱 내 구독 스토어로 안내하여 사용 가능한 플랜을 살펴보고 구매할 수 있도록 하는 것입니다. SubscriptonOfferView에 표시할 구독 계획을 결정하려면 iOS 17에서 도입된 ‘subscriptionStatusTask’ 수정자를 사용하여 고객의 구독 상태를 고려하세요. StoreKit 구독 상태를 앱별 모델로 전환하면 뷰 계층 구조를 그에 맞춰 업데이트할 수 있습니다. ‘visibleRelationship’ 매개변수를 사용하여 고객의 현재 상태에 따라 다양한 요금제를 표시하도록 ‘SubscriptionOfferView’를 구성할 수 있습니다. 옵션으로는 ‘업그레이드’, ‘다운그레이드’, ‘크로스그레이드’, ‘현재’, ‘전체’ 등이 있습니다.

Developer Footer

  • 비디오
  • WWDC25
  • StoreKit 및 앱 내 구입의 새로운 기능
  • 메뉴 열기 메뉴 닫기
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    메뉴 열기 메뉴 닫기
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    메뉴 열기 메뉴 닫기
    • 손쉬운 사용
    • 액세서리
    • 앱 확장 프로그램
    • App Store
    • 오디오 및 비디오(영문)
    • 증강 현실
    • 디자인
    • 배포
    • 교육
    • 서체(영문)
    • 게임
    • 건강 및 피트니스
    • 앱 내 구입
    • 현지화
    • 지도 및 위치
    • 머신 러닝 및 AI
    • 오픈 소스(영문)
    • 보안
    • Safari 및 웹(영문)
    메뉴 열기 메뉴 닫기
    • 문서(영문)
    • 튜토리얼
    • 다운로드(영문)
    • 포럼(영문)
    • 비디오
    메뉴 열기 메뉴 닫기
    • 지원 문서
    • 문의하기
    • 버그 보고
    • 시스템 상태(영문)
    메뉴 열기 메뉴 닫기
    • Apple Developer
    • App Store Connect
    • 인증서, 식별자 및 프로파일(영문)
    • 피드백 지원
    메뉴 열기 메뉴 닫기
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(영문)
    • News Partner Program(영문)
    • Video Partner Program(영문)
    • Security Bounty Program(영문)
    • Security Research Device Program(영문)
    메뉴 열기 메뉴 닫기
    • Apple과의 만남
    • Apple Developer Center
    • App Store 어워드(영문)
    • Apple 디자인 어워드
    • Apple Developer Academy(영문)
    • WWDC
    Apple Developer 앱 받기
    Copyright © 2025 Apple Inc. 모든 권리 보유.
    약관 개인정보 처리방침 계약 및 지침