アプリとアドオンのアプリ内購入の有効化Enable in-app purchases of apps and add-ons

この記事では、Windows.Services.Store 名前空間のメンバーを使用して、ユーザーの現在のアプリまたはそのいずれかのアドオンの購入を要求する方法を示します。This article demonstrates how to use members in the Windows.Services.Store namespace to request the purchase the current app or one of its add-ons for the user. たとえば、現在ユーザーがアプリの試用版を使用している場合、このプロセスを使用して、ユーザーの完全なライセンスを購入できます。For example, if the user currently has a trial version of the app, you can use this process to purchase a full license for the user. また、このプロセスを使用して、ユーザーの新しいゲーム レベルなどのアドオンを購入できます。Alternatively, you can use this process to purchase an add-on, such as a new game level for the user.

アプリまたはアドオンの購入を要求するため、Windows.Services.Store 名前空間には次のようなさまざまなメソッドが備わっています。To request the purchase of an app or add-on, the Windows.Services.Store namespace provides several different methods:

各メソッドは、標準の購入 UI をユーザーに示し、トランザクションが完了すると非同期的に完了します。Each method presents a standard purchase UI to the user and then completes asynchronously after the transaction is complete. メソッドは、トランザクションが成功したかどうかを示すオブジェクトを返します。The method returns an object that indicates whether the transaction was successful.

注意

Windows.Services.Store 名前空間は、Windows 10 バージョン 1607 で導入され、Visual Studio で、Windows 10 Anniversary Edition (10.0、ビルド 14393) 以降のリリースをターゲットとするプロジェクトでのみ使用できます。The Windows.Services.Store namespace was introduced in Windows 10, version 1607, and it can only be used in projects that target Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio. アプリが Windows 10 の以前のバージョンをターゲットとする場合、Windows.Services.Store 名前空間の代わりに Windows.ApplicationModel.Store 名前空間を使う必要があります。If your app targets an earlier version of Windows 10, you must use the Windows.ApplicationModel.Store namespace instead of the Windows.Services.Store namespace. 詳しくは、この記事をご覧ください。For more information, see this article.

前提条件Prerequisites

この例には、次の前提条件があります。This example has the following prerequisites:

  • Windows 10 Anniversary Edition (10.0、ビルド 14393) 以降のリリースをターゲットとするユニバーサル Windows プラットフォーム (UWP) アプリの Visual Studio プロジェクト。A Visual Studio project for a Universal Windows Platform (UWP) app that targets Windows 10 Anniversary Edition (10.0; Build 14393) or a later release.
  • パートナー センター内にあるアプリの申請を作成し、このアプリは、ストアで公開します。You have created an app submission in Partner Center and this app is published in the Store. 必要に応じで、テスト中にストアでアプリを検索できないようにアプリを構成することも可能です。You can optionally configure the app so it is not discoverable in the Store while you test it. 詳しくは、テスト ガイダンスをご覧ください。For more information, see our testing guidance.
  • アプリのアドオンのアプリ内購入を有効にする場合は、する必要もありますパートナー センターでのアドオンを作成します。If you want to enable in-app purchases for an add-on for the app, you must also create the add-on in Partner Center.

この例のコードは、次の点を前提としています。The code in this example assumes:

  • コードは、workingProgressRing という名前の ProgressRingtextBlock という名前の TextBlock を含む Page のコンテキストで実行されます。The code runs in the context of a Page that contains a ProgressRing named workingProgressRing and a TextBlock named textBlock. これらのオブジェクトは、それぞれ非同期操作が発生していることを示するためと、出力メッセージを表示するために使用されます。These objects are used to indicate that an asynchronous operation is occurring and to display output messages, respectively.
  • コード ファイルには、Windows.Services.Store 名前空間の using ステートメントがあります。The code file has a using statement for the Windows.Services.Store namespace.
  • アプリは、アプリを起動したユーザーのコンテキストでのみ動作するシングル ユーザー アプリです。The app is a single-user app that runs only in the context of the user that launched the app. 詳しくは、「アプリ内購入と試用版」をご覧ください。For more information, see In-app purchases and trials.

注意

デスクトップ ブリッジを使用するデスクトップ アプリケーションがある場合、この例には示されていないコードを追加して StoreContext オブジェクトを構成することが必要になることがあります。If you have a desktop application that uses the Desktop Bridge, you may need to add additional code not shown in this example to configure the StoreContext object. 詳しくは、「デスクトップ ブリッジを使用するデスクトップ アプリケーションでの StoreContext クラスの使用」をご覧ください。For more information, see Using the StoreContext class in a desktop application that uses the Desktop Bridge.

コードの例Code example

この例は、StoreContext クラスの RequestPurchaseAsync メソッドを使用して、ストア ID がわかっているアプリまたはアドオンを購入する方法を示しています。This example demonstrates how to use the RequestPurchaseAsync method of the StoreContext class to purchase an app or add-on with a known Store ID. 完全なサンプル アプリケーションについては、ストア サンプルをご覧ください。For a complete sample application, see the Store sample.

private StoreContext context = null;

public async void PurchaseAddOn(string storeId)
{
    if (context == null)
    {
        context = StoreContext.GetDefault();
        // If your app is a desktop app that uses the Desktop Bridge, you
        // may need additional code to configure the StoreContext object.
        // For more info, see https://aka.ms/storecontext-for-desktop.
    }

    workingProgressRing.IsActive = true;
    StorePurchaseResult result = await context.RequestPurchaseAsync(storeId);
    workingProgressRing.IsActive = false;

    // Capture the error message for the operation, if any.
    string extendedError = string.Empty;
    if (result.ExtendedError != null)
    {
        extendedError = result.ExtendedError.Message;
    }

    switch (result.Status)
    {
        case StorePurchaseStatus.AlreadyPurchased:
            textBlock.Text = "The user has already purchased the product.";
            break;

        case StorePurchaseStatus.Succeeded:
            textBlock.Text = "The purchase was successful.";
            break;

        case StorePurchaseStatus.NotPurchased:
            textBlock.Text = "The purchase did not complete. " +
                "The user may have cancelled the purchase. ExtendedError: " + extendedError;
            break;

        case StorePurchaseStatus.NetworkError:
            textBlock.Text = "The purchase was unsuccessful due to a network error. " +
                "ExtendedError: " + extendedError;
            break;

        case StorePurchaseStatus.ServerError:
            textBlock.Text = "The purchase was unsuccessful due to a server error. " +
                "ExtendedError: " + extendedError;
            break;

        default:
            textBlock.Text = "The purchase was unsuccessful due to an unknown error. " +
                "ExtendedError: " + extendedError;
            break;
    }
}

ビデオVideo

このビデオで、アプリでアプリ内購入を実装する方法の概要をご覧ください。Watch the following video for an overview of how to implement in-app purchases in your app.