XStoreAcquireLicenseForPackageAsync
사용자가 사용할 수 있는 현재 게임의 설치된 DLC 패키지(패키지 제품 유형이 포함된 지속성 콘텐츠)에 대한 라이선스를 획득합니다.
XStoreRegisterPackageLicenseLost를 사용하여 이 API에서 가져온 라이선스가 손실되었는지를 모니터링할 수 있습니다.
참고 항목
이 API는 패키지가 없는 지속성 콘텐츠 추가 기능에서 작동하지 않습니다. 패키지 없이 지속성 콘텐츠에 대한 라이선스를 가져오려면 XStoreAcquireLicenseForDurablesAsync를 사용합니다.
구문
HRESULT XStoreAcquireLicenseForPackageAsync(
const XStoreContextHandle storeContextHandle,
const char* packageIdentifier,
XAsyncBlock* async
)
매개 변수
storeContextHandle _In_
형식: XStoreContextHandle
XStoreCreateContext가 반환하는 사용자의 Microsoft Store 컨텍스트 핸들입니다.
packageIdentifier _In_z_
형식: char*
Microsoft Store 패키지를 고유하게 식별하는 문자열입니다. 전형적으로 XPackageEnumeratePackages 연산의 일부로 반환됩니다. 패키지 식별자에 대한 자세한 내용은 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