다음을 통해 공유


XUserResolveIssueWithUiUtf16Async

특정 유니코드 URL로 토큰 문제를 해결하는 시스템 사용자 인터페이스를 표시합니다.

구문

HRESULT XUserResolveIssueWithUiUtf16Async(  
         XUserHandle user,  
         const wchar_t* url,  
         XAsyncBlock* async  
)  

매개 변수

user _In_
형식: XUserHandle

토큰 문제가 있는 사용자에 대한 핸들입니다.

url _In_opt_z_
형식: wchar_t*

동의와 같은 Xbox Live 문제에는 nullptr을 전달합니다. 그렇지 않다면 문제를 일으킨 웹 요청의 유니코드 URL로 설정합니다.

async _Inout_
형식: XAsyncBlock*

호출의 상태를 폴링하고 호출 결과를 검색하기 위해 사용할 수 있는 XAsyncBlock입니다.

반환 값

형식: HRESULT

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

비고

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

유니코드가 아닌 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

XUserResolveIssueWithUiUtf16Result

XUserResolveIssueWithUiAsync