XStoreAcquireLicenseForPackageAsync
ユーザーが使用する権利を持つ現在のゲームのインストール済み DLC パッケージ (パッケージ製品の種類を含む非消費型アイテム) のライセンスを取得します。
XStoreRegisterPackageLicenseLost を使用して、この API から取得したライセンスが失われたかどうかを監視できます。
注意
この API は、パッケージのない 非消費型アイテムのアドオンでは機能しません。 パッケージなしで Durables のライセンスを取得するには XStoreAcquireLicenseForDurablesAsync を使用します。
構文
HRESULT XStoreAcquireLicenseForPackageAsync(
const XStoreContextHandle storeContextHandle,
const char* packageIdentifier,
XAsyncBlock* async
)
パラメーター
storeContextHandle _In_
型: XStoreContextHandle
XStoreCreateContext によって返されるユーザーの Microsoft Store コンテキスト ハンドル。
packageIdentifier _In_z_
型: char*
Microsoft Store パッケージを一意に識別する文字列。 これは通常、XPackageEnumeratePackagea 操作の一部として返されます。 パッケージ識別子の詳細については、「ダウンロード可能なコンテンツ (DLC) の管理とライセンス」を参照してください。
async _Inout_
型: XAsyncBlock*
行われている非同期処理が定義されている XAsyncBlock。 XAsyncBlock を使用して、呼び出しのステータスをポーリングし、呼び出しの結果を取得できます。 詳細については、「XAsyncBlock」を参照してください。
戻り値
型: HRESULT
HRESULT 成功またはエラー コード。
エラー コード | 説明 |
---|---|
0x89245208 E_GAMEPACKAGE_NO_PACKAGE_IDENTIFIER |
この製品のパッケージがインストールされていないか、パッケージの種類がない 非消費型 で呼び出されています (代わりにXStoreAcquireLicenseForDurablesAsync を使用してください)。 |
解説
この関数の実行結果とパッケージ ライセンスを取得するには、この関数を呼び出した後で、XStoreAcquireLicenseForPackageResult を呼び出します。 パッケージがライセンス可能かどうかを確認したいだけの場合は、XStoreCanAcquireLicenseForPackageAsync を呼び出してください。 ライセンスを取得した後は、XStoreIsLicenseValid を呼び出すことによってライセンスが有効かどうかを確認できます。
次のコード スニペットでは、以下の API の使用方法の例を示します。
- XStoreAcquireLicenseForPackageAsync
- XStoreAcquireLicenseForPackageResult
- XStoreIsLicenseValid
- XStoreCloseLicenseHandle
- XStoreRegisterPackageLicenseLost
- XStoreUnregisterPackageLicenseLost
void CALLBACK PackageLicenseLostCallback(void* context)
{
printf("**** License Lost ****\r\n");
}
void CALLBACK AcquireLicenseForPackageCallback(XAsyncBlock* asyncBlock)
{
XStoreLicenseHandle licenseHandle = nullptr;
HRESULT hr = XStoreAcquireLicenseForPackageResult(
asyncBlock,
&licenseHandle);
if (FAILED(hr))
{
printf("Failed retrieve the license handle: 0x%x\r\n", hr);
return;
}
bool isValid = XStoreIsLicenseValid(licenseHandle);
printf("isValid: %s\r\n", isValid ? "true" : "false");
if (isValid)
{
XTaskQueueHandle taskQueueHandle = reinterpret_cast<XTaskQueueHandle>(asyncBlock->context);
XTaskQueueRegistrationToken token = { 0 };
// Todo: Save the licenseHandle to hold onto it for the life of the app or until you unload the package.
// This allows us to be notified if the license becomes invalid and we need to handle unloading the content.
hr = XStoreRegisterPackageLicenseLost(
licenseHandle,
taskQueueHandle,
nullptr,
PackageLicenseLostCallback,
&token);
if (FAILED(hr))
{
XStoreCloseLicenseHandle(licenseHandle);
printf("Failed register license lost callback: 0x%x\r\n", hr);
return;
}
// This would normally go in your cleanup code when releasing the license
hr = XStoreUnregisterPackageLicenseLost(
licenseHandle,
token,
true);
if (FAILED(hr))
{
// This would normally go in your cleanup code when releasing the license
XStoreCloseLicenseHandle(licenseHandle);
printf("Failed unregister license lost callback: 0x%x\r\n", hr);
return;
}
}
XStoreCloseLicenseHandle(licenseHandle);
}
void AcquireLicenseForPackage(XStoreContextHandle storeContextHandle, XTaskQueueHandle taskQueueHandle, const char* packageIdentifier)
{
auto asyncBlock = std::make_unique<XAsyncBlock>();
ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
asyncBlock->queue = taskQueueHandle;
asyncBlock->context = taskQueueHandle;
asyncBlock->callback = AcquireLicenseForPackageCallback;
HRESULT hr = XStoreAcquireLicenseForPackageAsync(
storeContextHandle,
packageIdentifier,
asyncBlock.get());
if (FAILED(hr))
{
printf("Failed to get product for package: 0x%x\r\n", hr);
return;
}
}
要件
ヘッダー: XStore.h (XGameRuntime.h に含まれます)
ライブラリ: xgameruntime.lib
サポートされているプラットフォーム: Windows、Xbox One ファミリー本体、Xbox Series 本体
関連項目
XStore
XStoreAcquireLicenseForPackageAsync
XStoreAcquireLicenseForPackageResult
XStoreIsLicenseValid
XStoreCloseLicenseHandle
XStoreRegisterPackageLicenseLost
XStoreUnregisterPackageLicenseLost
XStoreCanAcquireLicenseForPackageAsync
XStoreCanAcquireLicenseForPackageResult