XUserAddByIdWithUiAsync
基于游戏邀请中的 XUID 将用户异步添加到游戏会话。 此函数应仅用于响应游戏邀请。
语法
HRESULT XUserAddByIdWithUiAsync(
uint64_t userId,
XAsyncBlock* async
)
参数
userId _In_
类型:uint64_t
要添加的用户的 XUID。 此 XUID 应通过以下方式获得:分析在注册到 XGameInviteRegisterForEvent 的游戏回调中收到的 inviteUri。
async _Inout_
类型:XAsyncBlock*
用于轮询调用的状态和检索调用结果的 XAsyncBlock。
返回值
类型:HRESULT
HRESULT 成功或错误代码。 有关错误代码的列表,请参阅错误代码。
备注
XUserAddByIdWithUiAsync 启动一个异步操作来将用户添加到游戏。 使用 XUserAddByIdWithUiResult 检索该操作的结果。
在处理游戏邀请时,主机上始终存在这样的可能,即游戏邀请中指定的人员的 XUID 并非已经登录游戏的人员。 XUserAddByIdWithUiAsync 允许游戏使用通过邀请 URI 分析的 XUID 来添加该用户。
此函数将尝试在不显示 UI 的情况下添加用户。 UI 可能显示的唯一原因是,用户需要解决其令牌问题。 在主机上,显示 UI 的情况并不常见。
如果用户未登录设备,XUserAddByIdWithUiResult 将返回 E_GAMEUSER_USER_NOT_FOUND。
必须通过调用 XUserCloseHandle 关闭从 XUsers API 检索到的每个 XUserHandle 句柄,且仅关闭一次。
为了获得游戏邀请,开发人员必须通过调用 XGameInviteRegisterForEvent 订阅 XGameInviteCallback。 调用此回调后,游戏将分析其收到的 inviteUri,并确定获得该邀请的用户的 XUID。 此时,游戏可能需要获取受邀者的 XUserHandle。 以下代码演示了其工作原理。
// Assumptions:
// 1. The game has previously registered for this callback using XGameInviteRegisterForEvent
// 2. The game has function: uint64_t GetXuidFromInviteUri(const char* inviteUri)
// 3. There is already a global task queue, g_GlobalQueue
void MyGameInviteEventCallback(void* context, const char* inviteUri)
{
XAsyncBlock* asyncBlock = new XAsyncBlock();
asyncBlock->queue = g_GlobalQueue;
asyncBlock->callback = [](XAsyncBlock* ab)
{
XUserHandle userHandle;
if(SUCCEEDED(XUserAddByIdWithUiResult(ab, &userHandle)))
{
// Copy this XUserHandle to some location that the game will use later or
// Do whatever actions you want with this user
XUserCloseHandle(userHandle);
}
else
{
// Since you didn't successfully add the user, setup your game state so that
// you are in a good place, likely a start menu
}
delete ab;
}
if(FAILED(XUserAddByIdWithUiAysnc(GetXuidFromInviteUri(inviteUri), asyncBlock)))
{
delete asyncBlock;
}
}
要求
头文件:XUser.h
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机