다음을 통해 공유


소셜 관계 가져오기

참고 항목

이 항목에서는 고급 API 사용을 보여 줍니다. 소셜 관리자에서 지원되지 않는 시나리오를 찾으면 DAM(개발자 계정 관리자)에게 알려주세요.

이 항목에서는 Social Manager API를 사용하여 사용자의 소셜 관계 및 공용 속성을 검색하는 방법을 보여 주는 코드 예제를 제공합니다.

소셜 관리자를 시작하려면 Social Manager 개요를 참조하세요. 소셜 관리자 API는 온라인 친구와 게임 활동을 추적하기 위한 개발을 크게 간소화합니다.

첫 번째 사용자의 소셜 관계 가져오기

다음 코드 예제에서는 Xbox 서비스와의 소셜 관계를 검색하는 방법을 보여 줍니다.

코드 예제에서는 다음을 수행합니다.

  1. 시스템의 모든 사용자 목록을 생성한 다음 첫 번째 사용자를 검색합니다.
  2. 그 사용자의 소셜 관계를 모두 검색합니다.
  3. 검색된 각 관계의 공용 속성을 표시합니다.

플랫 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();
}

자세한 내용은 다음을 참조하십시오.

단일 관계 가져오기

플랫 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();
    }
}

자세한 내용은 다음을 참조하십시오.