타이틀 관리 도전 과제 업데이트
이 항목에서는 다음에 대해 설명합니다.
도전 과제 잠금 해제
파트너 센터를 통해 도전 과제를 구성하고 개발 샌드박스에 퍼블리싱하면, 타이틀에서 XblAchievementsUpdateAchievementAsync API를 호출하여 도전 과제를 잠금 해제할 수 있습니다. 자세한 내용은 다음 섹션의 예제 코드를 참조하세요.
도전 과제를 잠금 해제하려면 percentComplete
을(를) 100으로 설정합니다.
사용자가 온라인 상태라면 이 요청이 즉시 Xbox 서비스 도전 과제 서비스로 전송되어 다음과 같은 사용자 경험을 트리거합니다.
- 사용자가 도전 과제 잠금 해제 알림을 받습니다.
- 지정된 도전 과제는 타이틀에 대한 사용자의 도전 과제 목록에서 잠금 해제됨으로 표시됩니다.
- 잠금이 해제된 도전 과제는 사용자의 활동 피드에 추가됩니다.
참고 항목
사용자 환경은 이벤트 기반 도전 과제 또는 타이틀 관리 도전 과제를 사용하는 도전 과제에 대해 시각적으로 동일합니다.
사용자가 오프라인 상태인 경우 잠금 해제 요청이 사용자의 장치에 로컬로 대기열에 들어갑니다. 사용자의 장치가 네트워크 연결을 다시 설정하면 요청이 자동으로 도전 과제 서비스로 전송되고(이 작업을 트리거하기 위해 게임에서 아무 조치도 필요하지 않음) 이전 사용자 환경이 설명된 대로 발생합니다.
도전 과제에 대한 완료 진행률 업데이트
도전 과제 잠금 해제를 위한 사용자의 진행률을 업데이트하려면 XblAchievementsUpdateAchievementAsync를 호출합니다.
percentComplete
인수를 1–100 사이의 정수로 설정합니다.
자세한 내용은 다음 예제 코드를 참조하세요.
성과의 진행 상황은 증가할 수 있습니다.
percentComplete
은(는) 도전 과제의 마지막 percentComplete
값보다 작은 숫자로 설정되면 업데이트가 무시됩니다.
예를 들어 도전 과제의 percentComplete
이(가) 이전에 75로 설정된 경우 값이 25인 업데이트를 보내는 것은 무시됩니다. 도전 과제는 여전히 75%가 완료된 상태로 표시됩니다.
percentComplete
을(를) 100으로 설정하면 도전 과제의 잠금이 해제됩니다.
percentComplete
을(를) 100보다 더 큰 숫자로 설정하면 API는 숫자를 100으로 설정했을 때처럼 동작합니다.
현재 타이틀의 도전 과제 업데이트
다음과 같이 XblAchievementsUpdateAchievementAsync를 호출하여 현재 제목의 성과를 업데이트할 수 있습니다.
플랫 C API
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*.
auto result = XAsyncGetStatus(asyncBlock, false);
if (SUCCEEDED(result))
{
// The achievement was updated.
}
else if (result == HTTP_E_STATUS_NOT_MODIFIED)
{
// The achievement wasn't updated.
}
else
{
// The achievement failed to update.
}
};
HRESULT hr = XblAchievementsUpdateAchievementAsync(
xboxLiveContext,
xboxUserId,
achievementId.c_str(),
percentComplete,
asyncBlock.get()
);
if (SUCCEEDED(hr))
{
// The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
// If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
asyncBlock.release();
}
자세한 내용은 다음을 참조하십시오.
다른 타이틀의 도전 과제 업데이트
다음과 같이 XblAchievementsUpdateAchievementForTitleIdAsync를 사용하여 다른 titleId
에 대한 성과를 업데이트할 수 있습니다.
플랫 C API
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*.
auto result = XAsyncGetStatus(asyncBlock, false);
if (SUCCEEDED(result))
{
// The achievement was updated.
}
else if (result == HTTP_E_STATUS_NOT_MODIFIED)
{
// The achievement wasn't updated.
}
else
{
// The achievement failed to update.
}
};
HRESULT hr = XblAchievementsUpdateAchievementForTitleIdAsync(
xboxLiveContext,
xboxUserId,
titleId,
scid,
achievementId.c_str(),
percentComplete,
asyncBlock.get()
);
if (SUCCEEDED(hr))
{
// The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
// If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
asyncBlock.release();
}
자세한 내용은 다음을 참조하십시오.