XGameUiShowWebAuthenticationWithOptionsAsync

开始异步身份验证请求,该请求显示 web UI(带有全屏选项),该 UI 允许用户向外部网站和服务委派访问权限,而不是直接提供自己的正在运行的游戏的凭据。

语法

STDAPI XGameUiShowWebAuthenticationWithOptionsAsync(
    _In_ XAsyncBlock* async,
    _In_ XUserHandle requestingUser,
    _In_z_ const char* requestUri,
    _In_z_ const char* completionUri,
    _In_ XGameUiWebAuthenticationOptions options
    ) noexcept;
)  

参数

async _In_
类型:XAsyncBlock*

指向传递到 XAsyncRunXAsyncBlock 的指针。

requestingUser _In_
类型:XUserHandle

请求 web 身份验证的用户的句柄。

requestUri _In_z_
类型:char*

向用户显示的 web 视图的初始 URI(可能包含用于服务的用户身份验证的字段)。 请求 URI 必须是一个安全的 HTTPS 地址。

completionUri _In_z_
类型:char*

指示表示成功完成 web 身份验证过程的 URI。 当 web 视图导航到与 completionUri 匹配的 uri 时,web 视图将关闭,控制返回给调用游戏。

选项 &nbps;_In_ 类型: XGameUiWebAuthenticationOptions

标记指示是否尝试将 UI 全屏显示。 在电脑上,将忽略此标记。 电脑上不支持全屏选项。

返回值

类型:HRESULT

异步调用的 HRESULT 成功或错误代码。

要获取结果,请在 AsyncBlock 回调中或 AsyncBlock 完成后调用 xgameuishowwebauthenticationresultsizexgameuishowwebauthenticationresult

备注

当此异步任务运行时,系统会向用户显示一个 web 视图(覆盖当前应用程序),用户可以与之交互或通过按“后退”取消。 这允许用户使用 OAuth,以便将授权权限授予外部网站和服务。 这可以用在如为了在社交媒体上分享游戏中的亮点而进行的游戏身份验证、从外部提供商请求用户数据等等场景中。

身份验证请求的结果存储在从 XGameUiShowWebAuthenticationResult 方法返回的 XGameUiWebAuthenticationResultData 对象中。

如果 web 视图因导航到 completionUri 而被关闭,则结果数据结构的 responseStatus 字段将为 S_OK

如果用户取消或手动关闭了 web 视图,结果数据结构的 responseStatus 字段将为 E_CANCELLED

示例

下面的代码示例演示如何使用 Facebook 执行 OAuth。 为保持代码简洁,此示例不包括内存分配错误处理。

// Use Facebook example for OAuth; client_id should correspond to your registered application.
const char completionUri[] = "https://www.facebook.com/connect/login_success.html"; 
const char requestUri[] =
    "https://www.facebook.com/dialog/oauth?"
    "client_id=000000000000000&"
    "redirect_uri=https%3A%2F%2Fwww.facebook.com%2Fconnect%2Flogin_success.html&"
    "response_type=token&"
    "sdk=xboxone";

// Allocate and initialize XAsyncBlock for asynchronous authentication operation.
XAsyncBlock* block = new XAsyncBlock();
ZeroMemory(block, sizeof(XAsyncBlock));
block->callback = [](XAsyncBlock* block)
{
    // Query required size and allocate buffer for authentication result data.
    uint32_t bufferSize = 0;
    FAIL_FAST_IF_FAILED(XGameUiShowWebAuthenticationResultSize(block, &bufferSize));
    uint8_t* buffer = new uint8_t[bufferSize];

    // The currentUser is initialized with user to authenticate for.
    XGameUiWebAuthenticationResultData* resultData = nullptr;
    FAIL_FAST_IF_FAILED(XGameUiShowWebAuthenticationResult(
        block,
        bufferSize,
        buffer,
        &resultData,
        nullptr
        ));

    //
    // Use the result data here. If resultData->responseStatus is S_OK, then web authentication was successful.
    //

    // Free allocated buffer and XAsyncBlock.
    delete[] buffer;
    delete block;
};

//  Begin asynchronous authentication operation.
XUserHandle currentUser = GetCurrentUserForAuthentication();
FAIL_FAST_IF_FAILED(XGameUiShowWebAuthenticationWithOptionsAsync(
    block,
    currentUser,
    requestUri,
    completionUri,
    XGameUiWebAuthenticationOptions::PreferFullscreen
    ));

要求

头文件: XGameUI.h

库:xgameruntime.lib

支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机

另请参阅

XGameUIXGameUiShowWebAuthenticationAsync
XGameUiShowWebAuthenticationResultSize
XGameUiShowWebAuthenticationResult
XGameUiWebAuthenticationResultData
异步编程模型