앱에서 바로 구매 및 평가판In-app purchases and trials

Windows SDK는 다음 기능을 구현 하 여 UWP (유니버설 Windows 플랫폼) 앱에서 더 많은 비용을 생성 하는 데 사용할 수 있는 Api를 제공 합니다.The Windows SDK provides APIs you can use to implement the following features to make more money from your Universal Windows Platform (UWP) app:

  • 앱에서 바로 구매     앱이 무료로 제공 되는지 여부에 관계 없이 앱 내에서 콘텐츠 또는 새로운 앱 기능 (예: 게임의 다음 수준 잠금 해제)을 판매할 수 있습니다.In-app purchases  Whether your app is free or not, you can sell content or new app functionality (such as unlocking the next level of a game) from right within the app.

  • 평가판 기능     파트너 센터에서 무료 평가판으로 앱을 구성하는 경우 평가판 기간 동안 일부 기능을 제외 하거나 제한 하 여 앱의 전체 버전을 구입 하도록 고객에 게 유도할 수 있습니다.Trial functionality  If you configure your app as a free trial in Partner Center, you can entice your customers to purchase the full version of your app by excluding or limiting some features during the trial period. 고객이 앱을 구입 하기 전에 평가판 동안에만 표시 되는 배너 또는 워터 마크와 같은 기능을 사용 하도록 설정할 수도 있습니다.You can also enable features, such as banners or watermarks, that are shown only during the trial, before a customer buys your app.

이 문서에서는 앱에서 바로 구매와 평가판이 UWP 앱에서 작동하는 방식에 대해 간략하게 보여 줍니다.This article provides an overview of how in-app purchases and trials work in UWP apps.

사용할 네임 스페이스 선택Choose which namespace to use

앱이 대상으로 하는 Windows 10 버전에 따라 앱 내 구매 및 평가판 기능을 UWP 앱에 추가 하는 데 사용할 수 있는 두 가지 네임 스페이스가 있습니다.There are two different namespaces you can use to add in-app purchases and trial functionality to your UWP apps, depending on which version of Windows 10 your apps target. 이러한 네임 스페이스의 Api는 동일한 목표를 제공 하지만, 매우 다르게 디자인 되었으며 두 Api 간에 코드가 호환 되지 않습니다.Although the APIs in these namespaces serve the same goals, they are designed quite differently, and code is not compatible between the two APIs.

  • Windows. 서비스 저장소     Windows 10 버전 1607부터 앱은이 네임 스페이스의 API를 사용 하 여 앱 내 구매 및 평가판을 구현할 수 있습니다.Windows.Services.Store  Starting in Windows 10, version 1607, apps can use the API in this namespace to implement in-app purchases and trials. 앱 프로젝트가 Windows 10 기념일 Edition (10.0;)을 대상으로 하는 경우이 네임 스페이스의 멤버를 사용 하는 것이 좋습니다. 빌드 14393) 또는 Visual Studio의 이후 릴리스.We recommend that you use the members in this namespace if your app project targets Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio. 이 네임 스페이스는 저장소 관리 사용 가능 추가 기능과 같은 최신 추가 기능 형식을 지원 하며, 파트너 센터 및 스토어에서 지원 되는 이후 유형의 제품과 기능과 호환 되도록 설계 되었습니다.This namespace supports the latest add-on types, such as Store-managed consumable add-ons, and is designed to be compatible with future types of products and features supported by Partner Center and the Store. 이 네임 스페이스에 대 한 자세한 내용은이 문서의 Windows. 서비스 네임 스페이스를 사용 하 여 앱 내 구매 및 평가판 을 참조 하세요.For more information about this namespace, see the In-app purchases and trials using the Windows.Services.Store namespace section in this article.

  • Windows ApplicationModel. 저장소     모든 버전의 Windows 10에서는이 네임 스페이스의 앱 내 구매 및 평가판에 대 한 이전 API도 지원 합니다.Windows.ApplicationModel.Store  All versions of Windows 10 also support an older API for in-app purchases and trials in this namespace. Windows. ApplicationModel. store 네임 스페이스에 대 한 자세한 내용은 앱 내 구매 및 windows.For information about the Windows.ApplicationModel.Store namespace, see In-app purchases and trials using the Windows.ApplicationModel.Store namespace.

중요

더 이상 새 기능을 사용 하 여 windows. ApplicationModel. store 네임 스페이스를 업데이트 하지 않으며, 앱에 가능한 경우 대신 windows. store 네임 스페이스를 사용 하는 것이 좋습니다.The Windows.ApplicationModel.Store namespace is no longer being updated with new features, and we recommend that you use the Windows.Services.Store namespace instead if possible for your app. 데스크톱 브리지 를 사용 하는 windows 데스크톱 응용 프로그램 또는 파트너 센터에서 개발 샌드박스를 사용 하는 앱 또는 게임 (예: Xbox Live와 통합 되는 게임의 경우)은 windows 데스크톱 응용 프로그램에서 지원 되지 않습니다.The Windows.ApplicationModel.Store namespace is not supported in Windows desktop applications that use the Desktop Bridge or in apps or games that use a development sandbox in Partner Center (for example, this is the case for any game that integrates with Xbox Live).

기본 개념Basic concepts

저장소에서 제공 되는 모든 항목은 일반적으로 제품이라고 합니다.Every item that is offered in the Store is generally called a product. 대부분의 개발자는 추가기능과 같은 형식의 제품만 사용 합니다.Most developers only work with the following types of products: apps and add-ons.

추가 기능은 앱의 컨텍스트에서 사용할 수 있는 제품 또는 기능입니다. 예를 들어 앱 또는 게임에서 사용 되는 통화, 게임을 위한 새 지도 또는 무기, 광고 없이 앱을 사용할 수 있는 기능, 해당 유형의 콘텐츠를 제공할 수 있는 앱에 대 한 음악 또는 비디오와 같은 디지털 콘텐츠 등이 있습니다.An add-on is a product or feature that you make available to your customers in the context of your app: for example, currency to be used in an app or game, new maps or weapons for a game, the ability to use your app without ads, or digital content such as music or videos for apps that have the ability to offer that type of content. 모든 앱과 추가 기능에는 사용자에 게 앱 또는 추가 기능을 사용할 수 있는 권한이 있는지 여부를 나타내는 관련 라이선스가 있습니다.Every app and add-on has an associated license that indicates whether the user is entitled to use the app or add-on. 사용자가 앱 또는 추가 기능을 평가판으로 사용할 수 있는 경우 라이선스는 평가판에 대 한 추가 정보도 제공 합니다.If the user is entitled to use the app or add-on as a trial, the license also provides additional info about the trial.

앱의 고객에 게 추가 기능을 제공 하려면 저장소에서이를 인식할 수 있도록 파트너 센터에서 앱에 대 한 추가 기능을 정의 해야 합니다.To offer an add-on to customers in your app, you must define the add-on for your app in Partner Center so the Store knows about it. 그런 다음 앱은 windows 의 api를 사용 하 여 앱 내 구매로 사용자에 게 판매할 추가 기능을 제공할 수 있습니다.Then, your app can use APIs in the Windows.Services.Store or Windows.ApplicationModel.Store namespace to offer the add-on for sale to the user as an in-app purchase.

UWP 앱은 다음과 같은 유형의 추가 기능을 제공할 수 있습니다.UWP apps can offer the following types of add-ons.

추가 기능 유형Add-on type DescriptionDescription
지속성Durable 파트너 센터에서 지정하는 수명 동안 지속 되는 추가 기능입니다.An add-on that persists for the lifetime that you specify in Partner Center.

기본적으로 지 속성 추가 기능은 만료 되지 않습니다 .이 경우 한 번만 구매할 수 있습니다.By default, durable add-ons never expire, in which case they can only be purchased once. 추가 기능에 특정 기간을 지정 하는 경우 사용자는 만료 된 후 추가 기능을 다시 구매할 수 있습니다.If you specify a particular duration for the add-on, the user can repurchase the add-on after it expires.

개발자 관리 가능Developer-managed consumable 사용 된 후 다시 구매할 수 있는 추가 기능입니다.An add-on that can be purchased, used, and then purchased again after it is consumed. 사용자는 추가 기능이 나타내는 항목의 사용자 잔액을 추적 해야 합니다.You are responsible for keeping track of the user's balance of items that the add-on represents.

사용자가 추가 기능과 연결 된 항목을 사용 하는 경우 사용자는 사용자의 균형을 유지 하 고 사용자가 모든 항목을 사용한 후 저장소에 대 한 추가 기능 구매를 보고 해야 합니다.When the user consumes any items that are associated with the add-on, you are responsible for maintaining the user's balance and for reporting the purchase of the add-on as fulfilled to the Store after the user has consumed all the items. 사용자는 앱이 이전 추가 기능 구매를 충족 된 것으로 보고 하기 전까지 추가 기능을 다시 구매할 수 없습니다.The user cannot purchase the add-on again until your app has reported the previous add-on purchase as fulfilled.

예를 들어, 추가 기능이 게임에서 100 동전을 나타내며 사용자가 10kb를 사용 하는 경우 앱 이나 서비스는 사용자에 대해 새로운 남은 잔액을 90로 유지 해야 합니다.For example, if your add-on represents 100 coins in a game and the user consumes 10 coins, your app or service must maintain the new remaining balance of 90 coins for the user. 사용자가 모든 100을 사용한 후 앱에서 추가 기능을 충족 된 것으로 보고 해야 합니다. 그러면 사용자가 100 동전 추가 기능을 다시 구매할 수 있습니다.After the user has consumed all 100 coins, your app must report the add-on as fulfilled, and then the user can purchase the 100 coin add-on again.

저장소 관리 가능Store-managed consumable 언제 든 지 구매, 사용 및 구매할 수 있는 추가 기능입니다.An add-on that can be purchased, used, and purchased again at any time. 저장소는 추가 기능이 나타내는 항목의 사용자 잔액을 추적 합니다.The Store keeps track of the user's balance of items that the add-on represents.

사용자가 추가 기능과 연결 된 항목을 사용 하는 경우 해당 항목을 저장소에 대해 충족 된 것으로 보고 하 고, 스토어에서 사용자의 잔액을 업데이트 합니다.When the user consumes any items that are associated with the add-on, you are responsible for reporting those items as fulfilled to the Store, and the Store updates the user's balance. 사용자는 원하는 횟수 만큼 추가 기능을 구매할 수 있습니다 (항목을 먼저 사용할 필요는 없음).The user can purchase the add-on as many times as they want (they do not need to consume the items first). 앱은 언제 든 지 사용자의 현재 잔액을 쿼리할 수 있습니다.Your app can query for the current balance for the user at any time.

예를 들어 추가 기능이 게임에서 100 동전의 초기 수량을 표시 하 고 사용자가 50을 사용 하는 경우 앱은 추가 기능에 대 한 50 단위가 충족 된 상점에 보고 하 고, 저장소는 남은 잔액을 업데이트 합니다.For example, if your add-on represents an initial quantity of 100 coins in a game and the user consumes 50 coins, your app reports to the Store that 50 units of the add-on were fulfilled, and the Store updates the remaining balance. 사용자가 추가 기능을 다시 구매 하 여 더 100 동전을 획득 하는 경우에는 이제 150 동전 합계가 발생 합니다.If the user then repurchases your add-on to acquire 100 more coins, they will now have 150 coins total.

Note   참고   스토어에서 관리 되는 소모품을 사용 하려면 앱 이 Windows 10 기념일 Edition (10.0;)을 대상으로 해야 합니다. 빌드 14393) 이상 릴리스를 사용 하 고 Visual Studio의 이후 버전을 사용 Windows.Services.Store 해야 하며, windows.Note  To use Store-managed consumables, your app must target Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio, and it must use the Windows.Services.Store namespace instead of the Windows.ApplicationModel.Store namespace.

SubscriptionSubscription 추가 기능을 계속 사용 하기 위해 고객이 되풀이 간격으로 계속 청구 되는 지 속성 추가 기능입니다.A durable add-on where the customer continues to be charged at recurring intervals in order to keep using the add-on. 고객은 언제 든 지 구독을 취소 하 여 추가 요금을 피할 수 있습니다.The customer can cancel the subscription at any time to avoid further charges.

Note   참고   구독 추가 기능을 사용 하려면 앱 이 Windows 10 기념일 Edition (10.0;)을 대상으로 해야 합니다. 빌드 14393) 이상 릴리스를 사용 하 고 Visual Studio의 이후 버전을 사용 Windows.Services.Store 해야 하며, windows.Note  To use subscription add-ons, your app must target Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio, and it must use the Windows.Services.Store namespace instead of the Windows.ApplicationModel.Store namespace.

참고

패키지가 포함 된 내구성이 있는 추가 기능 (다운로드 가능한 콘텐츠 또는 DLC 라고도 함)과 같은 다른 유형의 추가 기능은 제한 된 개발자 에게만 제공 되며이 설명서에서는 다루지 않습니다.Other types of add-ons, such as durable add-ons with packages (also known as downloadable content or DLC) are only available to a restricted set of developers, and are not covered in this documentation.

Windows. Store 네임 스페이스를 사용 하 여 앱에서 바로 구매 및 평가판 사용In-app purchases and trials using the Windows.Services.Store namespace

이 섹션에서는 Windows. Store 네임 스페이스에 대 한 중요 한 작업 및 개념에 대 한 개요를 제공 합니다.This section provides an overview of important tasks and concepts for the Windows.Services.Store namespace. 이 네임 스페이스는 Windows 10 기념일 Edition (10.0;)을 대상으로 하는 앱 에서만 사용할 수 있습니다. 빌드 14393) 또는 Visual Studio의 이후 버전 (Windows 10, 버전 1607에 해당).This namespace is available only to apps that target Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio (this corresponds to Windows 10, version 1607). 가능 하면 앱에서 windows. ApplicationModel. store 네임 스페이스 대신 windows. store 네임 스페이스를 사용 하는 것이 좋습니다.We recommend that apps use the Windows.Services.Store namespace instead of the Windows.ApplicationModel.Store namespace if possible. Windows. e s e. Store 네임 스페이스에 대 한 자세한 내용은 이 문서를 참조 하세요.For information about the Windows.ApplicationModel.Store namespace, see this article.

이 섹션의 내용In this section

동영상Video

Windows. Store 네임 스페이스를 사용 하 여 앱에서 앱 내 구매를 구현 하는 방법에 대 한 개요는 다음 비디오를 시청 하세요.Watch the following video for an overview of how to implement in-app purchases in your app using the Windows.Services.Store namespace.

StoreContext 클래스 시작Get started with the StoreContext class

Windows. Store 네임 스페이스에 대 한 기본 진입점은 storecontext 클래스입니다.The main entry point to the Windows.Services.Store namespace is the StoreContext class. 이 클래스는 현재 앱 및 사용 가능한 추가 기능에 대 한 정보를 가져오고 현재 앱 또는 해당 추가 기능에 대 한 라이선스 정보를 가져오고 현재 사용자에 대 한 앱 또는 추가 기능을 구입 하 고 기타 작업을 수행 하는 데 사용할 수 있는 메서드를 제공 합니다.This class provides methods you can use to get info for the current app and its available add-ons, get license info for the current app or its add-ons, purchase an app or add-on for the current user, and perform other tasks. Storecontext 개체를 가져오려면 다음 중 하나를 수행 합니다.To get a StoreContext object, do one of the following:

  • 단일 사용자 앱 (즉, 앱을 시작한 사용자의 컨텍스트에서만 실행 되는 앱)에서 정적 Getdefault 메서드를 사용 하 여 사용자에 대 한 Microsoft Store 관련 데이터에 액세스 하는 데 사용할 수 있는 storecontext 개체를 가져옵니다.In a single-user app (that is, an app that runs only in the context of the user that launched the app), use the static GetDefault method to get a StoreContext object that you can use to access Microsoft Store-related data for the user. 대부분의 UWP(유니버설 Windows 플랫폼) 앱은 단일 사용자 앱입니다.Most Universal Windows Platform (UWP) apps are single-user apps.

    Windows.Services.Store.StoreContext context = StoreContext.GetDefault();
    
  • 다중 사용자 앱에서 정적 getforuser 메서드를 사용 하 여 응용 프로그램을 사용 하는 동안 Microsoft 계정 로그인 된 특정 사용자에 대 한 Microsoft Store 관련 데이터에 액세스 하는 데 사용할 수 있는 storecontext 개체를 가져옵니다.In a multi-user app, use the static GetForUser method to get a StoreContext object that you can use to access Microsoft Store-related data for a specific user who is signed in with their Microsoft account while using the app. 다음 예제에서는 사용 가능한 첫 번째 사용자에 대 한 Storecontext 개체를 가져옵니다.The following example gets a StoreContext object for the first available user.

    var users = await Windows.System.User.FindAllAsync();
    Windows.Services.Store.StoreContext context = StoreContext.GetForUser(users[0]);
    

참고

데스크톱 브리지 를 사용 하는 Windows 데스크톱 응용 프로그램은이 개체를 사용 하기 전에 storecontext 개체를 구성 하기 위해 추가 단계를 수행 해야 합니다.Windows desktop applications that use the Desktop Bridge must perform additional steps to configure the StoreContext object before they can use this object. 자세한 내용은 이 섹션을 참조하세요.For more information, see this section.

Storecontext 개체를 만든 후에는이 개체의 메서드를 호출 하 여 현재 앱 및 해당 추가 기능에 대 한 제품 정보를 저장 하 고, 현재 앱 및 해당 추가 기능에 대 한 라이선스 정보를 검색 하 고, 현재 사용자에 대 한 앱 또는 추가 기능을 구입 하 고, 기타 작업을 수행할 수 있습니다.After you have a StoreContext object, you can start calling methods of this object to get Store product info for the current app and its add-ons, retrieve license info for the current app and its add-ons, purchase an app or add-on for the current user, and perform other tasks. 이 개체를 사용 하 여 수행할 수 있는 일반적인 태스크에 대 한 자세한 내용은 다음 문서를 참조 하세요.For more information about common tasks you can perform using this object, see the following articles:

Windows. store 네임 스페이스에서 storecontext 및 기타 형식을 사용 하는 방법을 보여 주는 샘플 앱은 store 샘플을 참조 하세요.For a sample app that demonstrates how to use StoreContext and other types in the Windows.Services.Store namespace, see the Store sample.

앱에서 바로 구매 구현Implement in-app purchases

Windows. Store 네임 스페이스를 사용 하 여 앱의 고객에 게 앱 내 구매를 제공 하려면 다음을 수행 합니다.To offer an in-app purchase to customers in your app using the Windows.Services.Store namespace:

  1. 앱이 고객이 구매할 수 있는 추가 기능을 제공 하는 경우 파트너 센터에서 앱에 대 한 추가 기능 제출을 만듭니다 .If your app offers add-ons that customers can purchase, create add-on submissions for your app in Partner Center .

  2. 앱에 코드를 작성 하 여 앱에서 제공 하는 추가 기능 또는 앱에서 제공 하는 추가 기능에 대 한 제품 정보를 검색 한 다음 라이선스가 활성화 되어 있는지 여부 (사용자에 게 앱 또는 추가 기능을 사용할 수 있는 라이선스가 있는지 여부)를 확인 합니다.Write code in your app to retrieve product info for your app or an add-on offered by your app and then determine whether the license is active (that is, whether the user has a license to use the app or add-on). 라이선스가 활성화 되지 않은 경우 앱 내 구매로 사용자에 게 판매할 앱 또는 추가 기능을 제공 하는 UI를 표시 합니다.If the license isn't active, display a UI that offers the app or add-on for sale to the user as an in-app purchase.

  3. 사용자가 앱 또는 추가 기능을 구입 하도록 선택 하는 경우 적절 한 방법을 사용 하 여 제품을 구입 합니다.If the user chooses to purchase your app or add-on, use the appropriate method to purchase the product:

  4. 이 문서의 테스트 지침 에 따라 구현을 테스트 합니다.Test your implementation by following the testing guidance in this article.

평가판 기능 구현Implement trial functionality

Windows. Store 네임 스페이스를 사용 하 여 앱 평가판의 기능을 제외 하거나 제한 하려면 다음을 수행 합니다.To exclude or limit features in a trial version of your app using the Windows.Services.Store namespace:

  1. 파트너 센터에서 무료 평가판으로 앱을 구성합니다.Configure your app as a free trial in Partner Center.

  2. 앱에 코드를 작성 하 여 앱에서 제공 하는 추가 기능 또는 앱에 대 한 제품 정보를 검색 한 다음 앱과 연결 된 라이선스가 평가판 라이선스 인지 여부를 확인합니다.Write code in your app to retrieve product info for your app or an add-on offered by your app and then determine whether the license associated with the app is a trial license.

  3. 평가판 인 경우 앱의 특정 기능을 제외 하거나 제한 한 다음, 사용자가 정식 라이선스를 구매 하면 기능을 사용 하도록 설정 합니다.Exclude or limit certain features in your app if it is a trial, and then enable the features when the user purchases a full license. 자세한 내용 및 코드 예제는 앱의 평가판 구현을 참조 하세요.For more information and a code example, see Implement a trial version of your app.

  4. 이 문서의 테스트 지침 에 따라 구현을 테스트 합니다.Test your implementation by following the testing guidance in this article.

앱 내 구매 또는 평가판 구현 테스트Test your in-app purchase or trial implementation

앱에서 Windows. store 네임 스페이스의 api를 사용 하 여 앱 내 구매 또는 평가판 기능을 구현 하는 경우 앱을 스토어에 게시 하 고 개발 장치에 앱을 다운로드 하 여 테스트에 라이선스를 사용 해야 합니다.If your app uses APIs in the Windows.Services.Store namespace to implement in-app purchase or trial functionality, you must publish your app to the Store and download the app to your development device to use its license for testing. 다음 프로세스에 따라 코드를 테스트 합니다.Follow this process to test your code:

  1. 앱이 아직 게시 되지 않은 상태에서 스토어에서 사용할 수 있는 경우 앱이 최소 Windows 앱 인증 키트 요구 사항을 충족 하는지 확인 하 고, 파트너 센터에서 앱을 제출 하 고, 앱이 인증 프로세스를 통과 하는지 확인 합니다.If your app is not yet published and available in the Store, make sure your app meets the minimum Windows App Certification Kit requirements, submit your app in Partner Center, and make sure your app passes the certification process. 앱을 테스트 하는 동안 스토어에서 검색할 수 없도록 앱을 구성할 수 있습니다.You can configure your app so it is not discoverable in the Store while you test it. 패키지를 항공편으로 적절 하 게 구성 하는 방법에 유의 하세요.Please note the proper configuration of package flights. 잘못 구성 된 패키지 항공편은 다운로드 하지 못할 수 있습니다.Incorrectly configured package flights may be not be able to be downloaded.

  2. 다음 작업을 완료 했는지 확인 합니다.Next, make sure you have completed the following:

  3. Visual Studio에서 프로젝트를 열고 프로젝트 메뉴를 클릭 한 다음 저장을 가리키고 스토어와 앱 연결을 클릭 합니다.With your project open in Visual Studio, click the Project menu, point to Store, and then click Associate App with the Store. 마법사의 지침을 완료 하 여 테스트에 사용 하려는 파트너 센터 계정의 앱과 앱 프로젝트를 연결 합니다.Complete the instructions in the wizard to associate the app project with the app in your Partner Center account that you want to use for testing.

    참고

    프로젝트를 스토어의 앱에 연결 하지 않는 경우 Storecontext 메서드는 반환 값의 extendederror 속성을 오류 코드 값 0x803F6107로 설정 합니다.If you do not associate your project with an app in the Store, the StoreContext methods set the ExtendedError property of their return values to the error code value 0x803F6107. 이 값은 스토어에 앱에 대 한 정보가 없음을 나타냅니다.This value indicates that the Store doesn't have any knowledge about the app.

  4. 아직 수행 하지 않은 경우 이전 단계에서 지정한 스토어에서 앱을 설치 하 고 앱을 한 번 실행 한 다음이 앱을 닫습니다.If you have not done so already, install the app from the Store that you specified in the previous step, run the app once, and then close this app. 이렇게 하면 앱에 대 한 유효한 라이선스가 개발 장치에 설치 됩니다.This ensures that a valid license for the app is installed to your development device.

  5. Visual Studio에서 프로젝트의 실행 또는 디버깅을 시작 합니다.In Visual Studio, start running or debugging your project. 코드는 로컬 프로젝트에 연결 된 스토어 앱에서 앱 및 추가 기능 데이터를 검색 해야 합니다.Your code should retrieve app and add-on data from the Store app that you associated with your local project. 앱을 다시 설치할지 묻는 메시지가 표시 되 면 지침에 따라 프로젝트를 실행 하거나 디버그 합니다.If you are prompted to reinstall the app, follow the instructions and then run or debug your project.

    참고

    이러한 단계를 완료 한 후에는 앱의 코드를 계속 업데이트 한 다음 새 앱 패키지를 스토어에 제출 하지 않고 개발 컴퓨터에서 업데이트 된 프로젝트를 디버그할 수 있습니다.After you complete these steps, you can continue to update your app's code and then debug your updated project on your development computer without submitting new app packages to the Store. 테스트에 사용할 로컬 라이선스를 얻기 위해 응용 프로그램의 스토어 버전을 개발 컴퓨터에 한 번 다운로드 하기만 하면 됩니다.You only need to download the Store version of your app to your development computer once to obtain the local license that will be used for testing. 테스트를 완료 한 후 앱에서 앱 구매 또는 평가판 관련 기능을 고객에 게 제공 하려는 경우에만 새 앱 패키지를 스토어에 제출 해야 합니다.You only need to submit new app packages to the Store after you complete your testing and you want to make the in-app purchase or trial-related features in your app available to your customers.

앱에서 Windows. c a s e. store 네임 스페이스를 사용 하는 경우 앱을 스토어에 제출 하기 전에 앱에서 currentappsimulator 클래스를 사용 하 여 테스트 중에 라이선스 정보를 시뮬레이션할 수 있습니다.If your app uses the Windows.ApplicationModel.Store namespace, you can use the CurrentAppSimulator class in your app to simulate license info during testing before you submit your app to the Store. 자세한 내용은 CurrentApp 및 Currentapp시뮬레이터 클래스 시작을 참조 하세요.For more information, see Get started with the CurrentApp and CurrentAppSimulator classes.

참고

Windows. Store 네임 스페이스는 테스트 하는 동안 라이선스 정보를 시뮬레이트하는 데 사용할 수 있는 클래스를 제공 하지 않습니다.The Windows.Services.Store namespace does not provide a class that you can use to simulate license info during testing. 앱 내 구매 또는 평가판을 구현 하기 위해 Windows. store 네임 스페이스를 사용 하는 경우 앱을 스토어에 게시 하 고 개발 장치에 앱을 다운로드 하 여 위에서 설명한 대로 테스트에 라이선스를 사용 해야 합니다.If you use the Windows.Services.Store namespace to implement in-app purchases or trials, you must publish your app to the Store and download the app to your development device to use its license for testing as described above.

앱에서 바로 구매 수신 확인Receipts for in-app purchases

응용 프로그램 코드에서 성공적인 구매를 위해 트랜잭션 수신을 수신 하는 데 사용할 수 있는 API를 제공 하지 않습니다.The Windows.Services.Store namespace does not provide an API you can use to obtain a transaction receipt for successful purchases in your app's code. 이는 클라이언트 쪽 API를 사용 하 여 트랜잭션 수신을 검색 하는 응용 프로그램에서 사용 하는 다른 환경 입니다.This is a different experience from apps that use the Windows.ApplicationModel.Store namespace, which can use a client-side API to retrieve a transaction receipt.

Windows. Store 네임 스페이스를 사용 하 여 앱 내 구매를 구현 하는 경우 지정 된 고객이 앱 또는 추가 기능을 구입 했는지 여부를 확인 하려는 경우 Microsoft Store 컬렉션 REST API에서 products에 대 한 쿼리 메서드 를 사용할 수 있습니다.If you implement in-app purchases using the Windows.Services.Store namespace and you want to validate whether a given customer has purchased an app or add-on, you can use the query for products method in the Microsoft Store collection REST API. 이 메서드에 대 한 반환 데이터는 지정 된 고객에 게 지정 된 제품에 대 한 자격이 있는지 여부를 확인 하 고 사용자가 제품을 획득 한 트랜잭션에 대 한 데이터를 제공 합니다.The return data for this method confirms whether the specified customer has an entitlement for a given product, and provides data for the transaction in which the user acquired the product. Microsoft Store collection API는 Azure AD 인증을 사용 하 여이 정보를 검색 합니다.The Microsoft Store collection API uses Azure AD authentication to retrieve this information.

데스크톱 브리지로 StoreContext 클래스 사용Using the StoreContext class with the Desktop Bridge

데스크톱 브리지 를 사용 하는 데스크톱 응용 프로그램은 storecontext 클래스를 사용 하 여 앱 내 구매 및 평가판을 구현할 수 있습니다.Desktop applications that use the Desktop Bridge can use the StoreContext class to implement in-app purchases and trials. 그러나 Win32 데스크톱 응용 프로그램 또는 렌더링 프레임 워크 (예: WPF 응용 프로그램)와 연결 된 창 핸들 (HWND)이 있는 데스크톱 응용 프로그램이 있는 경우 응용 프로그램에서 개체에 표시 되는 모달 대화 상자의 소유자 창인 응용 프로그램 창을 지정 하도록 Storecontext 개체를 구성 해야 합니다.However, if you have a Win32 desktop application or a desktop application that has a window handle (HWND) that is associated with the rendering framework (such as a WPF application), your application must configure the StoreContext object to specify which application window is the owner window for modal dialogs that are shown by the object.

많은 storecontext 멤버 (및 storecontext 개체를 통해 액세스 되는 다른 관련 형식의 멤버)는 제품 구매와 같은 저장 관련 작업을 위해 사용자에 게 모달 대화 상자를 표시 합니다.Many StoreContext members (and members of other related types that are accessed through the StoreContext object) display a modal dialog to the user for Store-related operations such as purchasing a product. 데스크톱 응용 프로그램에서 Storecontext 개체를 구성 하 여 모달 대화 상자의 소유자 창을 지정 하지 않는 경우이 개체는 부정확 한 데이터 또는 오류를 반환 합니다.If a desktop application does not configure the StoreContext object to specify the owner window for modal dialogs, this object will return inaccurate data or errors.

데스크톱 브리지를 사용 하는 데스크톱 응용 프로그램에서 Storecontext 개체를 구성 하려면 다음 단계를 수행 합니다.To configure a StoreContext object in a desktop application that uses the Desktop Bridge, follow these steps.

  1. 다음 중 하나를 수행 하 여 앱이 Iinitializewithwindow 인터페이스에 액세스할 수 있도록 합니다.Do one of the following to enable your app to access the IInitializeWithWindow interface:

    • 응용 프로그램이 c # 또는 Visual Basic와 같은 관리 되는 언어로 작성 된 경우 다음 c # 예제와 같이 ComImport 특성을 사용 하 여 앱 코드에서 Iinitializewithwindow 인터페이스를 선언 합니다.If your application is written in a managed language such as C# or Visual Basic, declare the IInitializeWithWindow interface in your app's code with the ComImport attribute as shown in the following C# example. 이 예제에서는 코드 파일에 t e m 네임 스페이스에 대 한 using 문이 있다고 가정 합니다.This example assumes that your code file has a using statement for the System.Runtime.InteropServices namespace.

      [ComImport]
      [Guid("3E68D4BD-7135-4D10-8018-9FB6D9F33FA1")]
      [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
      public interface IInitializeWithWindow
      {
          void Initialize(IntPtr hwnd);
      }
      
    • 응용 프로그램이 c + +로 작성 되는 경우 코드에 shobjidl .h 헤더 파일에 대 한 참조를 추가 합니다.If your application is written in C++, add a reference to the shobjidl.h header file in your code. 이 헤더 파일에는 Iinitializewithwindow 인터페이스의 선언이 포함 되어 있습니다.This header file contains the declaration of the IInitializeWithWindow interface.

  2. 이 문서 앞부분에서 설명한 대로 Getdefault 메서드 (또는 앱이 다중 사용자 앱인 경우 getforuser )를 사용 하 여 storecontext 개체를 가져온 다음이 개체를 iinitializewithwindow 개체로 캐스팅 합니다.Get a StoreContext object by using the GetDefault method (or GetForUser if your app is a multi-user app) as described earlier in this article, and cast this object to an IInitializeWithWindow object. 그런 다음 IInitializeWithWindow.Initialize 메서드를 호출 하 고, storecontext 메서드로 표시 되는 모달 대화 상자의 소유자가 될 창의 핸들을 전달 합니다.Then, call the IInitializeWithWindow.Initialize method, and pass the handle of the window that you want to be the owner for any modal dialogs that are shown by StoreContext methods. 다음 c # 예제에서는 응용 프로그램의 주 창 핸들을 메서드에 전달 하는 방법을 보여 줍니다.The following C# example shows how to pass the handle of your app's main window to the method.

    StoreContext context = StoreContext.GetDefault();
    IInitializeWithWindow initWindow = (IInitializeWithWindow)(object)context;
    initWindow.Initialize(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);
    

제품, Sku 및 전반Products, SKUs, and availabilities

상점의 모든 제품에는 하나 이상의 sku가 있으며 각 sku에는 하나 이상의 가용성이있습니다.Every product in the Store has at least one SKU, and each SKU has at least one availability. 이러한 개념은 파트너 센터의 대부분의 개발자 로부터 추상화 되며 대부분의 개발자는 앱 또는 추가 기능에 대 한 Sku 또는 전반를 정의 하지 않습니다.These concepts are abstracted away from most developers in Partner Center, and most developers will never define SKUs or availabilities for their apps or add-ons. 그러나 전반 네임 스페이스의 제품 에 대 한 개체 모델에는 sku 및 포함 되기 때문에 이러한 개념에 대 한 기본적인 이해는 일부 시나리오에 유용할 수 있습니다.However, because the object model for Store products in the Windows.Services.Store namespace includes SKUs and availabilities, a basic understanding of these concepts can be helpful for some scenarios.

개체Object DescriptionDescription
제품Product 제품은 앱 또는 추가 기능을 포함 하 여 스토어에서 사용할 수 있는 모든 유형의 제품을 의미 합니다.A product refers to any type of product that is available in the Store, including an app or add-on.

상점의 각 제품에는 해당 하는 저장소 제품 개체가 있습니다.Each product in the Store has a corresponding StoreProduct object. 이 클래스는 제품의 상점 ID, 매장 목록의 이미지 및 비디오, 가격 정보 등의 데이터에 액세스 하는 데 사용할 수 있는 속성을 제공 합니다.This class provides properties you can use to access data such as the Store ID of the product, the images and videos for the Store listing, and pricing info. 또한 제품을 구매 하는 데 사용할 수 있는 메서드를 제공 합니다.It also provides methods you can use to purchase the product.

SKUSKU SKU 는 고유한 설명, 가격 및 기타 고유한 제품 정보를 포함 하는 제품의 특정 버전입니다.A SKU is a specific version of a product with its own description, price, and other unique product details. 각 앱 또는 추가 기능에는 기본 SKU가 있습니다.Each app or add-on has a default SKU. 대부분의 개발자가 앱에 대 한 Sku를 여러 개 보유 하 게 되는 유일한 경우는 앱의 전체 버전을 게시 하 고 평가판 버전을 게시 하는 경우입니다. 스토어 카탈로그에서는 이러한 각 버전이 동일한 앱의 다른 SKU입니다.The only time most developers will ever have multiple SKUs for an app is if they publish a full version of their app and a trial version (in the Store catalog, each of these versions is a different SKU of the same app).

일부 게시자는 자신의 Sku를 정의할 수 있습니다.Some publishers have the ability to define their own SKUs. 예를 들어, 대량 게임 게시자는 다른 모든 시장에서 레드 피를 표시 하는 다른 SKU와 빨강 블러드를 허용 하지 않는 시장의 녹색 블러드를 표시 하는 하나의 SKU가 있는 게임을 릴리스할 수 있습니다.For example, a large game publisher might release a game with one SKU that shows green blood in markets that don't allow red blood and a different SKU that shows red blood in all other markets. 또는 디지털 비디오 콘텐츠를 판매 하는 게시자는 비디오에 대해 두 개의 Sku, 즉 높은 정의 버전용 SKU와 표준 정의 버전의 다른 sku를 게시할 수 있습니다.Alternatively, a publisher who sells digital video content might publish two SKUs for a video, one SKU for the high-definition version and a different SKU for the standard-definition version.

상점의 각 SKU에는 해당 StoreSku 개체가 있습니다.Each SKU in the Store has a corresponding StoreSku object. 모든 사용자 제품 에는 제품의 sku에 액세스 하는 데 사용할 수 있는 sku 속성이 있습니다.Every StoreProduct has a Skus property you can use to access the SKUs for the product.

가용성Availability 가용성 은 고유한 가격 책정 정보를 포함 하는 특정 버전의 SKU입니다.An availability is a specific version of a SKU with its own unique pricing info. 각 SKU에는 기본 가용성이 있습니다.Each SKU has a default availability. 일부 게시자는 지정 된 SKU에 대해 다양 한 가격 옵션을 도입 하기 위해 고유한 전반를 정의 하는 기능을 제공 합니다.Some publishers have the ability to define their own availabilities to introduce different price options for a given SKU.

저장소의 각 가용성에는 해당 하는 저장소 가용성 개체가 있습니다.Each availability in the Store has a corresponding StoreAvailability object. 모든 StoreSku 에는 SKU에 대 한 전반에 액세스 하는 데 사용할 수 있는 전반 속성이 있습니다.Every StoreSku has an Availabilities property you can use to access the availabilities for the SKU. 대부분의 개발자는 각 SKU에 단일 기본 가용성이 있습니다.For most developers, each SKU has a single default availability.

저장소 IdStore IDs

스토어의 모든 앱, 추가 기능 또는 기타 제품에는 연결 된 저장소 id ( 제품 저장소 id라고도 함)가 있습니다.Every app, add-on, or other product in the Store has an associated Store ID (this is also sometimes called a product Store ID). 앱 또는 추가 기능에 대 한 작업을 수행 하기 위해 많은 Api에 저장소 ID가 필요 합니다.Many APIs require the Store ID in order to perform an operation on an app or add-on.

저장소에 있는 모든 제품의 저장소 ID는와 같은 12 자의 영숫자 문자열입니다 9NBLGGH4R315 .The Store ID of any product in the Store is 12-character alpha-numeric string, such as 9NBLGGH4R315. 매장에서 제품의 상점 ID를 가져오는 방법에는 여러 가지가 있습니다.There are several different ways to get the Store ID for a product in the Store:

  • 앱의 경우 파트너 센터의 앱 id 페이지 에서 상점 id를 가져올 수 있습니다.For an app, you can get the Store ID on the App identity page in Partner Center.
  • 추가 기능의 경우 파트너 센터의 추가 기능 개요 페이지에서 상점 ID를 가져올 수 있습니다.For an add-on, you can get the Store ID on the add-on's overview page in Partner Center.
  • 제품의 경우 제품을 나타내는 StoreId product 개체의 StoreId 속성을 사용 하 여 프로그래밍 방식으로 상점 ID를 가져올 수도 있습니다.For any product, you can also get the Store ID programmatically by using the StoreId property of the StoreProduct object that represents the product.

Sku 및 전반이 포함 된 제품의 경우 Sku와 전반에는 다른 형식의 고유한 매장 Id도 있습니다.For products with SKUs and availabilities, the SKUs and availabilities also have their own Store IDs with different formats.

개체Object 저장소 ID 형식Store ID format
SKUSKU SKU의 저장소 ID에는 형식이 있습니다 <product Store ID>/xxxx xxxx . 여기서은 제품의 SKU를 식별 하는 4 자리 영숫자 문자열입니다.The Store ID for a SKU has the format <product Store ID>/xxxx, where xxxx is a 4-character alpha-numeric string that identifies a SKU for the product. 예들 들어 9NBLGGH4R315/000N입니다.For example, 9NBLGGH4R315/000N. 이 ID는 StoreSku 개체의 StoreId 속성에서 반환 되며, SKU 저장소 id라고도 합니다.This ID is returned by the StoreId property of a StoreSku object, and it is sometimes called the SKU Store ID.
가용성Availability 가용성의 저장소 ID에는 형식이 있습니다. <product Store ID>/xxxx/yyyyyyyyyyyy 여기서 xxxx 은 제품의 sku를 식별 하는 4 자리 영숫자 문자열이 며 yyyyyyyyyyyy sku의 가용성을 식별 하는 12 자의 영숫자 문자열입니다.The Store ID for an availability has the format <product Store ID>/xxxx/yyyyyyyyyyyy, where xxxx is a 4-character alpha-numeric string that identifies a SKU for the product and yyyyyyyyyyyy is a 12-character alpha-numeric string that identifies an availability for the SKU. 예들 들어 9NBLGGH4R315/000N/4KW6QZD2VN6X입니다.For example, 9NBLGGH4R315/000N/4KW6QZD2VN6X. 이 ID는 StoreId 가용성 개체의 속성에 의해 반환 되 고 때로는 가용성 저장소 id라고도 합니다.This ID is returned by the StoreId property of a StoreAvailability object, and it is sometimes called the availability Store ID.

코드에서 추가 기능에 대 한 제품 Id를 사용 하는 방법How to use product IDs for add-ons in your code

앱의 컨텍스트에서 추가 기능을 고객에 게 제공 하려면 파트너 센터에서 추가 기능 제출을 만들 때 추가 기능에 대 한 고유한 제품 ID를 입력 해야 합니다.If you want to make an add-on available to your customers in the context of your app, you must enter a unique product ID for your add-on when you create your add-on submission in Partner Center. 이 제품 id를 사용 하 여 코드에서 추가 기능을 참조할 수 있습니다. 그러나 제품 ID를 사용할 수 있는 특정 시나리오는 앱에서 앱을 구매할 때 사용 하는 네임 스페이스에 따라 다릅니다.You can use this product ID to refer to the add-on in your code, although the specific scenarios in which you can use the product ID depend on which namespace you use for in-app purchases in your app.

참고

파트너 센터에서 추가 기능에 대해 입력 하는 제품 ID는 추가 기능의 저장소 id와 다릅니다.The product ID that you enter in Partner Center for an add-on is different than the add-on's Store ID. 저장소 ID는 파트너 센터에 의해 생성 됩니다.The Store ID is generated by Partner Center.

Windows. Store 네임 스페이스를 사용 하는 앱Apps that use the Windows.Services.Store namespace

앱이 StoreLicense 네임 스페이스 를 사용 하는 경우 제품 ID를 사용 하 여 추가 기능을 나타내는 컴퓨터 제품 또는 추가 기능의 라이선스를 나타내는 StoreLicense 를 쉽게 식별할 수 있습니다.If your app uses the Windows.Services.Store namespace, you can use the product ID to easily identify the StoreProduct that represents your add-on or the StoreLicense that represents your add-on's license. 제품 ID는 StoreLicense 제품에 의해 노출 됩니다 . inappoffertoken. inappoffertoken 속성.The product ID is exposed by the StoreProduct.InAppOfferToken and StoreLicense.InAppOfferToken properties.

참고

제품 ID는 코드에서 추가 기능을 식별 하는 데 유용 하지만, 대부분의 경우에는 Windows. store 네임 스페이스의 작업에서 제품 id 대신 추가 기능 저장소 ID 를 사용 합니다.Although the product ID is a useful way to identify an add-on in your code, most operations in the Windows.Services.Store namespace use the Store ID of an add-on instead of the product ID. 예를 들어 앱에 대 한 하나 이상의 알려진 추가 기능을 프로그래밍 방식으로 검색 하려면 추가 기능에 대 한 저장소 Id (제품 Id 아님)를 GetStoreProductsAsync 메서드에 전달 합니다.For example, to programmatically retrieve one or more known add-ons for an app, pass the Store IDs (rather than the product IDs) of the add-ons to the GetStoreProductsAsync method. 마찬가지로, 사용할 수 있는 추가 기능을 충족 된 것으로 보고 하려면 제품 ID가 아닌 추가 기능 저장소 ID를 ReportConsumableFulfillmentAsync 메서드에 전달 합니다.Similarly, to report a consumable add-on as fulfilled, pass the Store ID of the add-on (rather than the product ID) to the ReportConsumableFulfillmentAsync method.

Windows ApplicationModel. Store 네임 스페이스를 사용 하는 앱Apps that use the Windows.ApplicationModel.Store namespace

앱에서 Windows. ApplicationModel. Store 네임 스페이스를 사용 하는 경우 대부분의 작업에 대해 파트너 센터에서 추가 기능에 할당 한 제품 ID를 사용 해야 합니다.If your app uses the Windows.ApplicationModel.Store namespace, you'll need to use the product ID that you assign to an add-on in Partner Center for most operations. 예:For example: