DirectX 게임에 앱에서 바로 구매 추가

Applies to Windows only

Windows 스토어 게임을 플레이하는 동안 플레이어가 구입할 수 있는 제품과 기능을 제공할 수 있습니다. 이 항목에서는 게임에서 이러한 판매를 사용하도록 설정하는 방법을 보여 드리겠습니다. 이 항목에서는 필요한 코드, 플레이어가 경험하게 되는 상황 및 게임에서 바로 구매를 테스트하는 방법(테스트 코드 포함)을 탐색하기 위한 예제를 살펴봅니다.

참고  고객은 게임의 정식 버전을 구매한 경우에만 게임에서 바로 구매를 수행할 수 있습니다.

게임에서 바로 구매 사용

이 항목에서는 Marble Maze 샘플에 추가할 수 있는 코드를 보여 줍니다. 이 샘플은 플레이어가 보드에서 대리석을 굴리는 게임입니다. 게임을 시작하면 대리석이 흰색입니다. 이 코드를 사용하면 플레이어가 게임을 플레이하는 동안 다른 색 대리석을 구입할 수 있습니다.

게임에서 바로 구매 프로세스를 시작하는 방법은 게임의 디자인에 따라 달라집니다. 이 예제에서는 앱 바 단추를 사용하여 구매를 시작합니다. 다음은 앱 바 단추의 XAML 코드입니다.



<Button Style="{StaticResource AppBarButtonStyle}" 
        AutomationProperties.Name="Change Marble" 
        Click="ChangeMarbleButton_Click">
    <Button.ContentTemplate>
        <DataTemplate>
            <Path   Stroke="{Binding Foreground, RelativeSource={RelativeSource Mode=TemplatedParent}}" 
                    Fill="White"
                    Width="20" Height="20" StrokeThickness="2" Stretch="Uniform">
                <Path.Data>
                    <EllipseGeometry Center="10,10" RadiusX="20" RadiusY="20" />
                </Path.Data>
            </Path>
        </DataTemplate>
    </Button.ContentTemplate>
</Button>

또한 다음은 샘플의 앱 바와 초기(무료) 대리석의 모습입니다.

Marble Maze의 무료(기본) 대리석

앱 바 단추는 ChangeMarbleButton_Click 이벤트 처리기를 트리거합니다. 이 예제에서는 이벤트 처리기를 보여 줍니다.

참고  이 코드는 실제 게임에서 바로 구매를 구현하는 코드입니다. 이 항목의 뒷부분에 나오는 구매 시뮬레이트 섹션에서 구매를 테스트하기 위한 코드를 보여 드리겠습니다.


// Get the license info
// The next line is commented out for testing.
auto licenseInformation = CurrentApp.LicenseInformation;

// The next line is commented out for production/release.
// auto  licenseInformation = CurrentAppSimulator::LicenseInformation;

// Check to see if the player already owns the item.
if (!licenseInformation->ProductLicenses->Lookup("blueMarble")->IsActive)
{
    // The player does not own the item. Purchase the marble.
    concurrency::task<Platform::String^> purchaseOperation(CurrentApp::RequestProductPurchaseAsync("blueMarble", false));
    purchaseOperation.then([this](task<Platform::String^> previousTask)
    {
        try 
        { 
            // This line raises an exception if the purchase fails.
            previousTask.get(); 
            auto licenseInformation = CurrentApp::LicenseInformation; 
            if (licenseInformation->ProductLicenses->Lookup("blueMarble")->IsActive) 
            { 
                // Marble purchased.
                m_renderer.SwitchMarble();
            } 
            else 
            { 
                // Marble not purchased.
                // Notify the player.
            } 
        } 
        catch(Platform::Exception^ exception) 
        { 
            // Purchase failed.
            // Notify the player.
        } 
        });
}
else
{
    // The player does own the item.
    // Switch the marble color.
    m_renderer.SwitchMarble();
}

// Close the app bar.
bottomAppBar->IsOpen = false;


앞의 예제에서 코드는 CurrentApp::LicenseInformation::ProductLicenses::IsActive 메서드를 사용하여 플레이어에게 이미 "blueMarble" 제품이 있는지를 먼저 확인합니다. 플레이어에게 해당 제품이 없는 경우 코드에서 비동기 RequestProductPurchaseAsync 작업을 시작합니다.

이 시점에서 Windows.ApplicationModel.Store API는 일련의 표준 프롬프트를 표시하여 플레이어가 게임에서 바로 구매 제품을 구입할 수 있도록 도와 줍니다. 이 항목의 게임에서 바로 구매 환경 섹션에서는 플레이어가 다른 색 대리석을 구매하는 환경을 보여 줍니다.

참고  개발하는 동안 구매를 테스트하는 환경은 각기 다릅니다. 이 항목의 뒷부분에 나오는 구매 시뮬레이트에서 테스트 환경을 살펴보겠습니다.

플레이어가 구매를 확인하는지 여부를 작업에서 반환합니다. 따라서 작업에서 반환할 때 IsActive 메서드를 다시 호출하여 제품의 활성화 여부를 확인해야 합니다. 그러나 구매하는 동안 오류가 발생하는 경우 previousTask.get()에 대한 호출에서 예외를 발생시킵니다. 코드에서 이 예외를 catch하여 실패한 구매로 처리합니다.

플레이어가 다른 색 대리석을 구매했으므로 예제에 새 대리석이 표시됩니다. 플레이어의 새 구매를 즉시 표시해야 합니다.

구매 시뮬레이트

게임에서 바로 구매 기능을 테스트하려면 구매를 시뮬레이트해야 합니다. 테스트하려면 코드에서 CurrentApp의 모든 참조를 CurrentAppSimulator로 변경해야 합니다. 다음 예제에서는 이전 섹션의 이벤트 처리기 본문을 구매를 시뮬레이트하는 데 필요한 변경 내용을 적용한 상태로 보여 줍니다.

참고  전처리기 지시문과 #ifdefs를 사용하면 시뮬레이션 모드를 보다 쉽게 변경할 수 있습니다.


// Get the license info
// The next line is commented out for testing.
// auto licenseInformation = CurrentApp.LicenseInformation;

// The next line is commented out for production/release.       
auto  licenseInformation = CurrentAppSimulator::LicenseInformation;

// Check to see if the player already owns the item.
if (!licenseInformation->ProductLicenses->Lookup("blueMarble")->IsActive)
{
    // The player does not own the item. Purchase the marble.
    concurrency::task<Platform::String^> purchaseOperation(CurrentAppSimulator::RequestProductPurchaseAsync("blueMarble", false));
    purchaseOperation.then([this](task<Platform::String^> previousTask)
    {
        try 
        { 
            // This line raises an exception if the purchase fails.
            previousTask.get(); 
            auto licenseInformation = CurrentAppSimulator::LicenseInformation; 
            if (licenseInformation->ProductLicenses->Lookup("blueMarble")->IsActive) 
            { 
                // Marble purchased.
                m_renderer.SwitchMarble();
            } 
            else 
            { 
                // Marble not purchased.
            } 
        } 
        catch(Platform::Exception^ exception) 
        { 
            // Purchase failed.
        } 
        });
}
else
{
    // The player does own the item.
    // Switch the marble color.
    m_renderer.SwitchMarble();
}

// Close the app bar.
bottomAppBar->IsOpen = false;


이 코드를 실행하면 다음과 같은 테스트 대화 상자가 표시됩니다.

게임에서 바로 구매 시뮬레이트 시 표시되는 테스트 대화 상자

Continue을 선택하면 시뮬레이트된 구매가 반환됩니다. 이는 고객이 Buy을 선택하고 제품을 결제하는 것과 같습니다.

Cancel를 선택하면 시뮬레이트된 구매가 반환되지 않습니다. 이는 고객이 Cancel를 선택하거나 제품을 결제하지 않는 것과 같습니다.

참고  두 경우 모두에서 오류 코드 S_OK를 반환해야 합니다. Windows.ApplicationModel.Store API는 두 경우 모두에서 S_OK를 반환합니다.

게임에서 바로 구매 환경

Windows.ApplicationModel.Store API는 구매 및 결제를 확인하는 표준 프롬프트 집합을 표시합니다.

플레이어가 게임에서 항목을 구매하기로 선택하면 Windows.ApplicationModel.Store가 Windows 스토어에 현재 정보(예: 항목 가격)에 대해 쿼리합니다.

게임에서 바로 구매 시 가격 확인

그런 다음 확인 프롬프트를 표시합니다.

게임에서 바로 구매 확인

확인 프롬프트에 표시되는 설명은 게임에서 바로 판매의 Description 페이지에 입력한 설명입니다. 이 설명에 대한 자세한 내용은 앱 설명에 포함할 내용을 참조하세요.

플레이어는 Yes를 클릭한 후 Microsoft 계정에 로그인하여 ID를 확인해야 합니다. 사기성 있거나 의도하지 않은 구매를 방지하기 위해 플레이어는 앱에서 바로 구매를 할 때마다 이렇게 해야 합니다.

게임에서 바로 구매에 대한 결제 처리

구매 및 플레이어의 ID가 확인되면 플레이어의 기본 결제 방법을 사용하여 구매에 대한 결제가 처리됩니다. 플레이어는 자신의 기본 결제 방법을 Windows 스토어 설정에서 구성합니다.

거래가 완료되면 최종 확인 메시지가 제공되고 고객은 Close를 클릭하여 게임으로 돌아갑니다.

게임에서 바로 구매 확인

이 시점에서 구매가 성공적이었는지 확인해야 하고, 성공적인 경우 즉시 구매를 구현하는 단계를 수행해야 합니다. 예를 들어, 플레이어의 인벤토리에 새 항목을 추가하거나 다른 테마를 사용하도록 설정하기 위한 새 메뉴 옵션을 추가해야 할 수 있습니다. 이 예제에서는 대리석을 새로운 색으로 표시합니다.

게임에서 바로 구매 즉시 구현

관련 항목

앱에서 앱에서 바로 구매 사용(Windows)

 

 

표시:
© 2014 Microsoft