소셜 관계 가져오기
참고 항목
이 항목에서는 고급 API 사용을 보여 줍니다. 소셜 관리자에서 지원되지 않는 시나리오를 찾으면 DAM(개발자 계정 관리자)에게 알려주세요.
이 항목에서는 Social Manager API를 사용하여 사용자의 소셜 관계 및 공용 속성을 검색하는 방법을 보여 주는 코드 예제를 제공합니다.
소셜 관리자를 시작하려면 Social Manager 개요를 참조하세요. 소셜 관리자 API는 온라인 친구와 게임 활동을 추적하기 위한 개발을 크게 간소화합니다.
첫 번째 사용자의 소셜 관계 가져오기
다음 코드 예제에서는 Xbox 서비스와의 소셜 관계를 검색하는 방법을 보여 줍니다.
코드 예제에서는 다음을 수행합니다.
- 시스템의 모든 사용자 목록을 생성한 다음 첫 번째 사용자를 검색합니다.
- 그 사용자의 소셜 관계를 모두 검색합니다.
- 검색된 각 관계의 공용 속성을 표시합니다.
플랫 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 XAsyncBlock*.
HRESULT hr = XblSocialGetSocialRelationshipsResult(asyncBlock, &state.socialResultHandle);
// Be sure to call XblSocialRelationshipResultCloseHandle when the result object is no longer needed.
};
HRESULT hr = XblSocialGetSocialRelationshipsAsync(
xboxLiveContext,
xboxUserId,
socialRelationshipFilter,
0,
0,
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();
}
자세한 내용은 다음을 참조하십시오.
- XAsyncBlock
- XblSocialGetSocialRelationshipsAsync
- XblSocialGetSocialRelationshipsResult
- XblSocialRelationshipResultCloseHandle
단일 관계 가져오기
플랫 C API
const XblSocialRelationship* relationships = nullptr;
size_t relationshipsCount = 0;
HRESULT hr = XblSocialRelationshipResultGetRelationships(state.socialResultHandle, &relationships, &relationshipsCount);
LogToFile("Got %u SocialRelationships:", relationshipsCount);
for (size_t i = 0; i < relationshipsCount; ++i)
{
LogToFile("Xuid = %u, isFollowingCaller = %u", relationships[i].xboxUserId, relationships[i].isFollowingCaller);
}
자세한 내용은 다음을 참조하십시오.
관계의 다음 페이지 가져오기
플랫 C API
bool hasNext{ false };
HRESULT hr = XblSocialRelationshipResultHasNext(state.socialResultHandle, &hasNext);
if (hasNext)
{
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 XAsyncBlock*.
// Close the handle to the previous page of results.
if (state.socialResultHandle)
{
XblSocialRelationshipResultCloseHandle(state.socialResultHandle);
}
HRESULT hr = XblSocialRelationshipResultGetNextResult(asyncBlock, &state.socialResultHandle);
};
uint32_t maxItems = 100;
HRESULT hr = XblSocialRelationshipResultGetNextAsync(xboxLiveContext, state.socialResultHandle, maxItems, 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();
}
}
자세한 내용은 다음을 참조하십시오.