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