アプリ内製品購入の有効化
アプリが無料であるかどうかにかかわらず、コンテンツ、その他のアプリ、アプリの新機能 (ゲームの次のレベルのロック解除など) をアプリ内から直接販売できます。 ここでは、アプリ内で製品を販売できるようにする方法について説明します。
重要
この記事では、Windows.ApplicationModel.Store 名前空間のメンバーを使って、アプリ内製品の購入を有効化する方法について説明します。 この名前空間は更新されなくなり、新機能も追加されないため、代わりに Windows.Services.Store 名前空間を使用することをお勧めします。 Windows.Services.Store 名前空間は、Microsoft Store で管理されるコンシューマブルなアドオンやサブスクリプションなど、最新の種類のアドオンをサポートしており、パートナー センターと Microsoft Store で今後サポートされる製品および機能の種類と互換性を持つように設計されています。 Windows.Services.Store 名前空間は、Windows 10 バージョン 1607 で導入され、Visual Studio で、Windows 10 Anniversary Edition (10.0、ビルド 14393) 以降のリリースをターゲットとするプロジェクトでのみ使用できます。 Windows.Services.Store 名前空間を使用したアプリ内製品購入の有効化について詳しくは、この記事をご覧ください。
注意
アプリ内製品は、アプリの試用版では提供できません。 アプリの試用版を使用中のユーザーがアプリ内製品を購入できるのは、通常版のアプリを購入する場合のみです。
前提条件
- ユーザーが購入できる機能を追加する Windows アプリ。
- 新しいアプリ内製品のコード記述やテストを初めて行うときは、CurrentApp オブジェクトではなく、CurrentAppSimulator オブジェクトを使う必要があります。 そうすることで、実稼働サーバーを呼び出すのではなく、ライセンス サーバーへのシミュレートされた呼び出しを使って、ライセンス ロジックを検証できます。 そのためには、%userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData で WindowsStoreProxy.xml という名前のファイルをカスタマイズする必要があります。 このファイルは、アプリを初めて実行するときに Microsoft Visual Studio シミュレーターによって作られます。カスタマイズされたファイルを実行時に読み込むこともできます。 詳しくは、「CurrentAppSimulator での WindowsStoreProxy.xml ファイルの使用」をご覧ください。
- このトピックでは、ストア サンプルで提供されているコード例も参照します。 このサンプルを利用すると、ユニバーサル Windows プラットフォーム (UWP) アプリに提供されるさまざまな収益化オプションを体験できます。
手順 1: アプリのライセンス情報を初期化する
アプリを初期化するときに、CurrentApp または CurrentAppSimulator を初期化することでアプリの LicenseInformation オブジェクトを取得し、アプリ内製品の購入を有効にします。
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: アプリにアプリ内製品の販売を追加する
アプリ内製品によって提供する機能ごとに、販売を作り、アプリに追加します。
重要
ストアにアプリを提出する前に、ユーザーに提供するすべてのアプリ内製品をアプリに追加する必要があります。 新しいアプリ内製品を後から追加する場合は、アプリを更新し、新しいバージョンを再提出する必要があります。
アプリ内販売トークンを作成する
アプリの各アプリ内製品は、トークンで識別します。 このトークンは開発者が定義する文字列であり、アプリ内とストア内で、特定のアプリ内製品を識別するために使われます。 アプリに固有のわかりやすい名前を付けて、その機能をコードの記述中に簡単に識別できるようにしてください。 たとえば、次のような名前を付けます。
- "SpaceMissionLevel4"
- "ContosoCloudSave"
- "RainbowThemePack"
注意
コードで使用するアプリ内販売トークンは、パートナー センターでアプリの対応するアドオンを定義するときに指定する、製品 ID 値と一致している必要があります。
条件ブロック内に機能のコードを記述する
アプリ内製品の対象となる各機能のコードは、その機能を使うためのライセンスをユーザーが持っているかどうかをテストする条件ブロック内に記述する必要があります。
次の例は、ライセンス固有の条件ブロック内に featureName という名前の製品機能のコードを記述する方法を示しています。 featureName という文字列は、アプリ内でこの製品を一意に識別するトークンであり、ストアでも識別用に使われます。
if (licenseInformation.ProductLicenses["featureName"].IsActive) { // the customer can access this feature } else { // the customer can' t access this feature }
この機能の購入 UI を追加する
アプリには、アプリ内製品で提供される製品または機能をユーザーが購入するための方法も用意する必要があります。 ユーザーは、完全なアプリを購入したときのように、ストアを通じてそれらの製品または機能を購入することはできません。
次の例は、ユーザーが既にアプリ内製品を所有しているかどうかをテストし、所有していない場合は購入できるように購入用ダイアログを表示する方法を示しています。 "show the purchase dialog" というコメントを、購入用ダイアログの独自のコードに置き換えてください (わかりやすい [このアプリを購入] ボタンがあるページなど)。
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: テスト コードを最終的な呼び出しに変更する
この手順は簡単です。アプリのコード内の CurrentAppSimulator への参照をすべて CurrentApp への参照に変えます。 WindowsStoreProxy.xml ファイルは不要になるので、アプリのパスから削除します (ただし、次の手順でアプリ内販売を構成するときの参照用に保存しておくことをお勧めします)。
手順 4: ストアでアプリ内製品を構成する
パートナー センターでアプリに移動し、アプリ内製品と一致するアドオンを作成します。 アドオンの製品 ID、種類、価格などのプロパティを定義します。 テストのときに WindowsStoreProxy.xml で設定した構成と同じ構成になっていることを確認してください。
注意
コードで使用するアプリ内販売トークンは、パートナー センターで対応するアドオンに対して指定する、製品 ID 値と一致している必要があります。
注釈
コンシューマブルなアプリ内購入オプション (購入して使い切った後、必要に応じて再購入できる項目) を顧客に提供することに関心がある場合は、「コンシューマブルなアプリ内製品購入の有効化」をご覧ください。
ユーザーがアプリ内購入を行ったことを確認するために通知を使う必要がある場合は、「受領通知を使った製品購入の確認」を確認してください。