基本的な DRM とライセンス チェック
PC 上の XStore には、基本的な DRM チェックが含まれます。タイトルは、ゲームプレイを許可する前に有効なライセンスがあることを確認します。このチェックは、XStoreQueryGameLicenseAsync を通じて起動時に実行されます。
ライセンスが見つからない場合:
- 購入またはサインインのための Store UI をプレイヤーに表示します。
- 有効なライセンスなしにゲームプレイを続行させないでください。
- サービスからライセンス トークン経由でライセンスを検証します。
- ゲームプレイ中に定期的に
XStoreQueryGameLicenseAsyncを再チェックし、ライセンスが失われた場合に取り消します。
オープン ライセンスと制限的ライセンス
PC のライセンス モデルは 2 つあります。- オープン ライセンス — ライセンスを持つ任意の Microsoft Store アカウントでプレイヤーがタイトルを実行できます。共有 PC で有用です。
- 制限的ライセンス — プレイヤーはライセンスを持つ Microsoft アカウントでサインインする必要があります。タイトルがより強力な海賊行為対策を必要とする場合に使用します。
サービス検証のためのライセンス トークン
ゲーム サーバーがプレイヤーがタイトルを所有していることを確認する必要がある場合 (たとえば、ゲーム内アセットを付与する前) は、ライセンス トークン を使用します。- クライアントは
XStoreQueryLicenseTokenAsyncを呼び出して、短命の署名付きトークンを取得します。 - クライアントはトークンをサービスに送信します。
- サービスは Microsoft の公開鍵を使用してトークンの署名を検証します。
- サービスは、ライセンス状態に関するトークンのクレームを信頼します。
Store アカウントの不一致シナリオ
PC で一般的な問題: プレイヤーが Windows / XBOX アプリに 1 つの Microsoft アカウントでサインインしているが、Microsoft Store は別のアカウントでサインインしている状態です。 XStore API は Store のサインイン アカウントに従うため、次のことにつながる可能性があります。- XBOX サインインしたプレイヤーが別のアカウントで所有していても、タイトルに「購入」が表示される。
- 購入が誤ったアカウントに対して成功する。
- 不一致を検出 —
XUserGetIdをXStoreQueryGameLicenseAsyncの情報と比較します。 - 不一致を説明する UI を表示し、切り替えを提供します。
- プレイヤーが切り替えられない場合は、Store アカウントを修正するために XBOX アプリを通じてリダイレクトすることを提案します。
Store 操作のためのサンドボックス切り替え
XBOX services のサンドボックス (XblPCSandbox.exe で設定) は、PC 上で Store が使用するサンドボックスを完全には制御しません。Store 操作には追加の手順が必要です。
- XBOX services のサンドボックスを切り替えます。
- 新しいサンドボックス コンテキストで Microsoft Store アプリ を再起動します。
XStoreQueryGameLicenseAsyncが開発サンドボックスのデータを返すことを確認します。
PC コマースのテスト チェックリスト
送信前に:- 何も所有していないテスト アカウントでテスト — 購入/体験版/サインイン フローを検証します。
- ベース ゲームを所有するテスト アカウントでテスト — 「購入」プロンプトが表示されないことを検証します。
- Store アカウントの不一致をテスト — Windows に 1 つのアカウント、Store に別のアカウントでサインインします。
- 体験版 → 購入フローをテスト — 再起動なしで体験版ライセンスが完全なライセンスに切り替わることを検証します。
- オフライン起動をテスト — PC タイトルは、妥当なキャッシュ済みライセンス ウィンドウで、オフラインで起動およびプレイできる (Store 接続なし) 必要があります。
- サンドボックス切り替えをテスト — 切り替え後に Store 呼び出しが開発サンドボックスの製品を返すことを確認します。
関連 API ドキュメント
- XStore API リファレンス —
XStoreQueryGameLicenseAsync、XStoreQueryLicenseTokenAsync - XUser API リファレンス —
XUserGetId、XUserIsStoreUser
