다음을 통해 공유


XUserResolveIssueWithUiUtf16Result

XUserResolveIssueWithUiUtf16Async에 대한 호출 결과를 검색합니다.

구문

HRESULT XUserResolveIssueWithUiUtf16Result(  
         XAsyncBlock* async  
)  

매개 변수

async _Inout_
형식: XAsyncBlock*

XUserResolveIssueWithUiUtf16Async에 전달하는 XAsyncBlock입니다.

반환 값

형식: HRESULT

성공한 경우 S_OK를 반환하고, 그렇지 않으면 오류 코드를 반환합니다. 오류 코드 목록은 오류 코드를 참조하세요.

반환 코드 설명
S_OK 작업이 성공했습니다.
E_ABORT 사용자가 작업을 취소했습니다.

비고

XUsers API가 E_GAMEUSER_RESOLVE_USER_ISSUE_REQUIRED 오류를 반환한다면, 사용자는 반드시 시스템 UI(사용자 인터페이스)를 이용해 문제를 해결해야 합니다. XUserResolveIssueWithUiUtf16Async를 호출하여 적절한 시스템 UI를 표시합니다.

유니코드가 아닌 URL을 이용해 토큰 문제를 해결하는 시스템 사용자 인터페이스를 표시하려면, XUserResolveIssueWithUiAsync를 호출합니다.

다음 예제에서는 시스템 UI를 표시하여 URL의 토큰 문제를 해결하는 방법을 보여줍니다.

HRESULT ResolveUserIssueComplete(XAsyncBlock* ab)
{
    if (SUCCEEDED_LOG(XUserResolveIssueWithUiResult(ab)))
    {
        appLog.AddLog("Successfully Resolved User Issue\n");
    }

    return S_OK;
}

HRESULT ResolveUserIssueUtf16Complete(XAsyncBlock* ab)
{
    if (SUCCEEDED_LOG(XUserResolveIssueWithUiUtf16Result(ab)))
    {
        appLog.AddLog("Successfully Resolved User Issue\n");
    }

    return S_OK;
}

HRESULT ResolveUserIssueWithUiAsync(
    XTaskQueueHandle queue,
    const char* narrowUrl = nullptr,
    const wchar_t* wideUrl = nullptr,
    bool useUtf16 = false)
{
    auto resolveAsyncBlock = std::make_unique<XAsyncBlock>();
    ZeroMemory(resolveAsyncBlock.get(), sizeof(*resolveAsyncBlock));
    resolveAsyncBlock->queue = queue;
    resolveAsyncBlock->context = this;

    if (useUtf16)
    {
        resolveAsyncBlock->callback = [](XAsyncBlock* ab)
        {
            auto asyncBlock = std::unique_ptr<XAsyncBlock>(ab);
            LOG_IF_FAILED(static_cast<User*>(ab->context)->ResolveUserIssueUtf16Complete(ab));
        };

        if (SUCCEEDED_LOG(XUserResolveIssueWithUiUtf16Async(
            _handle.get(),
            wideUrl,
            resolveAsyncBlock.get())))
        {
            // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
            // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
            resolveAsyncBlock.release();
        }
    }
    else
    {
        resolveAsyncBlock->callback = [](XAsyncBlock* ab)
        {
            auto asyncBlock = std::unique_ptr<XAsyncBlock>(ab);
            LOG_IF_FAILED(static_cast<User*>(ab->context)->ResolveUserIssueComplete(ab));
        };

        if (SUCCEEDED_LOG(XUserResolveIssueWithUiAsync(
            _handle.get(),
            narrowUrl,
            resolveAsyncBlock.get())))
        {
            // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
            // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
            resolveAsyncBlock.release();
        }
    }

    return S_OK;
}

요구 사항

헤더: XUser.h

라이브러리: xgameruntime.lib

지원되는 플랫폼: Windows, Xbox One 패밀리 콘솔 및 Xbox Series 콘솔

참고 항목

XUser

XUserResolveIssueWithUiUtf16Async

XUserResolveIssueWithUiAsync