アプリ内製品購入の有効化Enable in-app product purchases

アプリが無料であるかどうかにかかわらず、コンテンツ、その他のアプリ、アプリの新機能 (ゲームの次のレベルのロック解除など) をアプリ内から直接販売できます。Whether your app is free or not, you can sell content, other apps, or new app functionality (such as unlocking the next level of a game) from right within the app. ここでは、アプリ内で製品を販売できるようにする方法について説明します。Here we show you how to enable these products in your app.

重要

この記事では、Windows.ApplicationModel.Store 名前空間のメンバーを使って、アプリ内製品の購入を有効化する方法について説明します。This article demonstrates how to use members of the Windows.ApplicationModel.Store namespace to enable in-app product purchases. この名前空間は更新されなくなり、新機能も追加されないため、代わりに Windows.Services.Store 名前空間を使用することをお勧めします。This namespace is no longer being updated with new features, and we recommend that you use the Windows.Services.Store namespace instead. Windows.Services.Store名前空間が消耗アドオンの管理対象の Store や、サブスクリプションなど、最新のアドオン型をサポートしているしは将来の種類の製品とパートナーによってサポートされる機能に対応するように設計されていますCenter とストア。The Windows.Services.Store namespace supports the latest add-on types, such as Store-managed consumable add-ons and subscriptions, and is designed to be compatible with future types of products and features supported by Partner Center and the Store. 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.Services.Store 名前空間を使用したアプリ内製品購入の有効化について詳しくは、この記事をご覧ください。For more information about enabling in-app product purchases using the Windows.Services.Store namespace, see this article.

注意

アプリ内製品は、アプリの試用版では提供できません。In-app products cannot be offered from a trial version of an app. アプリの試用版を使用中のユーザーがアプリ内製品を購入できるのは、通常版のアプリを購入する場合のみです。Customers using a trial version of your app can only buy an in-app product if they purchase a full version of your app.

前提条件Prerequisites

  • ユーザーが購入できる機能を追加する Windows アプリ。A Windows app in which to add features for customers to buy.
  • 新しいアプリ内製品のコード記述やテストを初めて行うときは、CurrentApp オブジェクトではなく、CurrentAppSimulator オブジェクトを使う必要があります。When you code and test new in-app products for the first time, you must use the CurrentAppSimulator object instead of the CurrentApp object. そうすることで、実稼働サーバーを呼び出すのではなく、ライセンス サーバーへのシミュレートされた呼び出しを使って、ライセンス ロジックを検証できます。This way you can verify your license logic using simulated calls to the license server instead of calling the live server. これを行うには、%userprofile% WindowsStoreProxy.xml をという名前のファイルをカスタマイズする必要があります\AppData\ローカル\パッケージ\<パッケージ名>\LocalState\Microsoft\Windows ストア\ApiData します。To do this, you need to customize the file named WindowsStoreProxy.xml in %userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData. このファイルは、アプリを初めて実行するときに Microsoft Visual Studio シミュレーターによって作られます。カスタマイズされたファイルを実行時に読み込むこともできます。The Microsoft Visual Studio simulator creates this file when you run your app for the first time—or you can also load a custom one at runtime. 詳しくは、「CurrentAppSimulator での WindowsStoreProxy.xml ファイルの使用」をご覧ください。For more info, see Using the WindowsStoreProxy.xml file with CurrentAppSimulator.
  • このトピックでは、ストア サンプルで提供されているコード例も参照します。This topic also references code examples provided in the Store sample. このサンプルを利用すると、ユニバーサル Windows プラットフォーム (UWP) アプリに提供されるさまざまな収益化オプションを体験できます。This sample is a great way to get hands-on experience with the different monetization options provided for Universal Windows Platform (UWP) apps.

手順 1:アプリのライセンス情報を初期化します。Step 1: Initialize the license info for your app

アプリを初期化するときに、CurrentApp または CurrentAppSimulator を初期化することで、アプリの LicenseInformation オブジェクトを取得し、アプリ内製品の購入を有効にします。When your app is initializing, get the LicenseInformation object for your app by initializing the CurrentApp or CurrentAppSimulator to enable purchases of an in-app product.

void InitializeApp()
{
    // Some app initialization code...

    // Initialize the license info for use in the app that is uploaded to the Store.
    // Uncomment the following line in the release version of your app.
    //   licenseInformation = CurrentApp.LicenseInformation;

    // Initialize the license info for testing.
    // Comment the following line in the release version of your app.
    licenseInformation = CurrentAppSimulator.LicenseInformation;

    // Other app initialization code...
}

手順 2:アプリへのアプリ内のプランを追加します。Step 2: Add the in-app offers to your app

アプリ内製品によって提供する機能ごとに、販売を作り、アプリに追加します。For each feature that you want to make available through an in-app product, create an offer and add it to your app.

重要

ストアにアプリを提出する前に、ユーザーに提供するすべてのアプリ内製品をアプリに追加する必要があります。You must add all the in-app products that you want to present to your customers to your app before you submit it to the Store. 新しいアプリ内製品を後から追加する場合は、アプリを更新し、新しいバージョンを再提出する必要があります。If you want to add new in-app products later, you must update your app and re-submit a new version.

  1. アプリでオファー トークンを作成します。Create an in-app offer token

    アプリの各アプリ内製品は、トークンで識別します。You identify each in-app product in your app by a token. このトークンは開発者が定義する文字列であり、アプリ内とストア内で、特定のアプリ内製品を識別するために使われます。This token is a string that you define and use in your app and in the Store to identify a specific in-app product. アプリに固有のわかりやすい名前を付けて、その機能をコードの記述中に簡単に識別できるようにしてください。Give it a unique (to your app) and meaningful name so that you can quickly identify the correct feature it represents while you are coding. たとえば、次のような名前を付けます。Here are some examples of names:

    • "SpaceMissionLevel4""SpaceMissionLevel4"
    • "ContosoCloudSave""ContosoCloudSave"
    • "RainbowThemePack""RainbowThemePack"

注意

コードで使用するアプリでオファー トークンが一致する必要があります、製品 IDときに指定した値をパートナー センターでアプリの対応するアドオンを定義するします。The in-app offer token that you use in your code must match the product ID value you specify when you define the corresponding add-on for your app in Partner Center.

  1. コード、条件付きブロックの機能Code the feature in a conditional block

    アプリ内製品の対象となる各機能のコードは、その機能を使うためのライセンスをユーザーが持っているかどうかをテストする条件ブロック内に記述する必要があります。You must put the code for each feature that is associated with an in-app product in a conditional block that tests to see if the customer has a license to use that feature.

    次の例は、ライセンス固有の条件ブロック内に featureName という名前の製品機能のコードを記述する方法を示しています。Here's an example that shows how you can code a product feature named featureName in a license-specific conditional block. featureName という文字列は、アプリ内でこの製品を一意に識別するトークンであり、ストアでも識別用に使われます。The string, featureName,is the token that uniquely identifies this product within the app and is also used to identify it in the Store.

    if (licenseInformation.ProductLicenses["featureName"].IsActive)
    {
        // the customer can access this feature
    }
    else
    {
        // the customer can' t access this feature
    }
    
  2. この機能の購入 UI を追加します。Add the purchase UI for this feature

    アプリには、アプリ内製品で提供される製品または機能をユーザーが購入するための方法も用意する必要があります。Your app must also provide a way for your customers to purchase the product or feature offered by the in-app product. ユーザーは、完全なアプリを購入したときのように、ストアを通じてそれらの製品または機能を購入することはできません。They can't purchase them through the Store in the same way they purchased the full app.

    次の例は、ユーザーが既にアプリ内製品を所有しているかどうかをテストし、所有していない場合は購入できるように購入用ダイアログを表示する方法を示しています。Here's how to test to see if your customer already owns an in-app product and, if they don't, displays the purchase dialog so they can buy it. "show the purchase dialog" というコメントを、購入用ダイアログの独自のコードに置き換えてください (わかりやすい [このアプリを購入] Replace the comment "show the purchase dialog" with your custom code for the purchase dialog (such as a page with a friendly "Buy this app!" ボタンのあるページなど)。button).

    async void BuyFeature()
    {
        if (!licenseInformation.ProductLicenses["featureName"].IsActive)
        {
            try
            {
                // The customer doesn't own this feature, so
                // show the purchase dialog.
                await CurrentAppSimulator.RequestProductPurchaseAsync("featureName", false);
    
                //Check the license state to determine if the in-app purchase was successful.
            }
            catch (Exception)
            {
                // The in-app purchase was not completed because
                // an error occurred.
            }
        }
        else
        {
            // The customer already owns this feature.
        }
    }
    

手順 3:テスト コードを最後の呼び出しに変更します。Step 3: Change the test code to the final calls

この手順は簡単です。アプリのコード内の CurrentAppSimulator への参照をすべて CurrentApp への参照に変えます。This is an easy step: change every reference to CurrentAppSimulator to CurrentApp in your app's code. WindowsStoreProxy.xml ファイルは不要になるので、アプリのパスから削除します (ただし、次の手順でアプリ内販売を構成するときの参照用に保存しておくことをお勧めします)。You don't need to provide the WindowsStoreProxy.xml file any longer, so remove it from your app's path (although you may want to save it for reference when you configure the in-app offer in the next step).

手順 4:ストアにアプリ内製品プランを構成します。Step 4: Configure the in-app product offer in the Store

パートナー センターのアプリに移動し、アドオンを作成アプリ内製品オファリングと一致します。In Partner Center, navigate to your app and create an add-on that matches your in-app product offer. アドオンの製品 ID、種類、価格などのプロパティを定義します。Define the product ID, type, price, and other properties for your add-on. テストのときに WindowsStoreProxy.xml で設定した構成と同じ構成になっていることを確認してください。Make sure that you configure it identically to the configuration you set in WindowsStoreProxy.xml when testing.

注意

コードで使用するアプリでオファー トークンが一致する必要があります、製品 IDパートナー センターでの対応するアドオンの指定した値。The in-app offer token that you use in your code must match the product ID value you specify for the corresponding add-on in Partner Center.

注釈Remarks

コンシューマブルなアプリ内購入オプション (購入して使い切った後、必要に応じて再購入できる項目) を顧客に提供することに関心がある場合は、「コンシューマブルなアプリ内製品購入の有効化」をご覧ください。If you're interested in providing your customers with consumable in-app product options (items that can be purchased, used up, and then purchased again if desired), move on to the Enable consumable in-app product purchases topic.

ユーザーがアプリ内購入を行ったことを確認するために通知を使う必要がある場合は、「受領通知を使った製品購入の確認」を確認してください。If you need to use receipts to verify that user made an in-app purchase, be sure to review Use receipts to verify product purchases.