Pular para o conteúdo principal

Visão geral

XUser é a API do Gaming Runtime para gerenciar contas de usuário e autenticação do XBOX em várias plataformas. Ela fornece uma interface unificada para que os jogos lidem com a entrada do usuário, a identidade e os fluxos de usuário relacionados em consoles XBOX, PCs e portáteis Windows e plataformas que não são da Microsoft, como o Steam Deck. Como parte da iniciativa multiplataforma do GDK, o XUser fornece uma superfície de API consistente em todas as plataformas, ao mesmo tempo em que acomoda as diferentes funcionalidades e restrições de cada ambiente.

Requisitos de integração

Para usar o XUser em seu jogo, inclua XUser.h em seus arquivos de origem e vincule com XGameRuntime.lib. A principal diferença entre as plataformas é como as dependências de runtime são tratadas:

Consoles XBOX e Microsoft Store / Game Pass no Windows

O Gaming Runtime é integrado ao sistema operacional e tratado pela loja. Seu jogo usa automaticamente os serviços e a interface do usuário internos do sistema.

Outras lojas no Windows

  • Os jogos usam os serviços e a interface do usuário internos do sistema operacional.
  • O instalador deve executar o GamingRepair.exe para garantir que o Gaming Runtime Service esteja instalado.
Integração da Ferramenta de Reparo de Jogos Adicione a Ferramenta de Reparo de Jogos ao instalador do seu jogo como uma etapa de instalação personalizada:
  1. Inclua a ferramenta no pacote do jogo – Ela está incluída no GDK em [GDK]\bin\GamingRepair.exe.
  2. Adicione uma ação personalizada – Execute a ferramenta antes da instalação do jogo (por exemplo: start /wait “Installing Gaming Services” GamingRepair.exe scenarioExternal). Isso verifica, baixa, instala ou repara quaisquer componentes ausentes do Gaming Runtime.
  3. Trate erros – Verifique o código de saída da ferramenta. Se ela falhar, notifique o usuário e forneça instruções de instalação manual.
Os jogos do Steam devem incluir XGameRuntime.dll e suas dependências para oferecer suporte a plataformas em que o serviço do sistema não está disponível (por exemplo, o Steam Deck). No Steam Deck ou em outras plataformas que não são da Microsoft, a Ferramenta de Reparo de Jogos não pode ser usada. Em vez disso, inclua XGameRuntime.dll e suas dependências no pacote do jogo e coloque-os junto ao seu executável para que possam ser carregados em runtime.

Diferenças entre plataformas e API unificada

No XBOX e no Windows, o sistema operacional lida nativamente com a entrada no XBOX Live e o gerenciamento de usuários, fornecendo a interface do usuário do sistema e o armazenamento seguro das credenciais do usuário. O XUser aproveita esses serviços internos do sistema nessas plataformas. Em outras plataformas de jogos, como o Steam Deck ou ambientes de terceiros, esse suporte nativo não existe. A partir da versão 2510 do GDK, o XUser foi aprimorado para funcionar perfeitamente em ambos os tipos de plataforma por meio de uma API consistente, com novas APIs e padrões orientados a eventos que permitem que os jogos forneçam a interface do usuário e o tratamento de dados necessários onde o suporte do sistema não está disponível:
  • Em plataformas com suporte nativo (XBOX, Windows) - O XUser usa os serviços internos do sistema operacional para autenticação, interface do usuário e armazenamento de credenciais. Os jogos chamam as APIs do XUser e o sistema lida com os detalhes automaticamente.
  • Em plataformas sem suporte nativo (Steam Deck etc.) - O XUser expõe as mesmas APIs principais, mas os jogos devem implementar manipuladores de eventos para fornecer a interface do usuário necessária (como exibir códigos QR para entrada) e o armazenamento de dados. Isso dá aos jogos controle total sobre a experiência de autenticação.
Independentemente da plataforma, os jogos obtêm um XUserHandle que representa o jogador e pode ser usado para serviços que oferecem suporte à autenticação do XBOX (XBOX services, serviços do PlayFab etc.)

Novas funcionalidades multiplataforma

As novas APIs introduzidas para o XUser se concentram em habilitar fluxos de entrada e tratamento de dados independentes de plataforma. As principais funcionalidades incluem:

Autenticação Remote Connect

Permite que os usuários entrem com a conta do XBOX em um dispositivo (como o Steam Deck) usando um dispositivo secundário. Os usuários podem escanear um código QR ou inserir um código de uso único em um site para concluir a autenticação. Isso é feito por meio de novos manipuladores de eventos do XUser para exibir e fechar prompts de entrada baseados em código.

Imposição de sessão única (SPoP)

Garante que os usuários não estejam executando o mesmo jogo em vários locais simultaneamente. Se um conflito for detectado, os usuários serão solicitados a escolher entre “jogar aqui” ou “trocar de conta”. Novas APIs permitem que os jogos apresentem essa escolha e respondam de acordo.
Nos consoles XBOX e no Windows, o sistema operacional continua a lidar automaticamente com a maioria das tarefas de autenticação. O jogo pode nunca ver esses eventos nessas plataformas. No entanto, em plataformas que não são XBOX, o jogo pode assumir o controle total por meio dos mecanismos de retorno de chamada do XUser.

Remote Connect para entrada entre dispositivos

O Remote Connect é um recurso que permite que os jogadores entrem na conta do XBOX em um dispositivo autenticando-se por meio de outro dispositivo (como um telefone ou PC). Isso geralmente é feito por meio de um código curto ou código QR exibido pelo jogo.

Como funciona

Nos consoles XBOX, esse “fluxo de código” é tratado automaticamente pela interface do usuário do sistema. No entanto, em plataformas como o Steam Deck ou outros ambientes de terceiros, não há uma interface de entrada do XBOX gerenciada pelo sistema. A API Remote Connect no XUser permite que os jogos viabilizem esse fluxo diretamente.

O fluxo

  1. Registro do manipulador de eventos - O jogo registra um manipulador de eventos do Remote Connect antes de iniciar a entrada usando XUserPlatformRemoteConnectSetEventHandlers(...). O título fornece retornos de chamada para tratar dois eventos principais:
    • Evento Show - Disparado quando o XUser precisa que o jogo exiba o código de uso único ou o código QR. O manipulador apresenta uma caixa de diálogo ou sobreposição com o código e as instruções (por exemplo: “Escaneie este código QR ou acesse xbox.com/play e insira o código ABCD para entrar”).
    • Evento Close - Disparado quando o processo de entrada remota é concluído ou cancelado, sinalizando ao jogo para ocultar ou fechar a caixa de diálogo do código.
  2. Início da entrada do usuário - Ao chamar XUserAddAsync para adicionar um novo usuário, se nenhum usuário local já estiver conectado, o sistema XUser poderá usar o fluxo do Remote Connect (especialmente em plataformas sem interface ou de terceiros).
  3. Exibição do código - O XUser invoca o retorno de chamada “show”, fornecendo o código de autenticação ou a URL. O manipulador de interface do usuário do jogo (como OnRemoteConnectShow) exibe o código QR ou a cadeia de caracteres do código ao usuário.
  4. Autenticação do usuário - O jogador usa o telefone ou navegador da Web para entrar com o código fornecido, vinculando a conta do XBOX à sessão atual.
  5. Conclusão - Depois que a autenticação é concluída no back-end, o XUser invoca o retorno de chamada “close”, sinalizando que o código pode ser removido da tela. Nesse ponto, o XUser obteve o token do XBOX Live do usuário e cria o XUserHandle.
  6. Sucesso - A tarefa XUserAddAsync retorna com êxito e o usuário é conectado sem inserir credenciais diretamente no dispositivo.

Implementação

Para usar o Remote Connect, implemente duas funções de retorno de chamada e registre-as:
Depois de registrar os manipuladores, chame XUserAddAsync normalmente para adicionar um novo usuário. No manipulador OnRemoteConnectShow, recupere as informações fornecidas (acessíveis por meio das APIs do XUser, normalmente uma URL e um código) e renderize-as para o usuário em um pop-up ou sobreposição. Quando OnRemoteConnectClose for chamado, o processo de entrada terá terminado e o jogo deverá ocultar o prompt.
Chame XUserPlatformRemoteConnectSetEventHandlers antes de chamar XUserAddAsync (e geralmente antes de XUserInitialize) para garantir que esses eventos sejam tratados corretamente.

Considerações sobre a experiência do usuário

Para fornecer uma boa experiência do usuário:
  • Instruções claras - Explique claramente o que o usuário precisa fazer ao exibir o código.
  • Tratamento de erros - Se o usuário cancelar no lado remoto ou ocorrer um erro, o XUser fará a tentativa de entrada falhar. Trate isso no retorno de chamada de conclusão normal de XUserAddAsync.
  • Descarte oportuno - Oculte o código imediatamente quando o evento de fechamento ocorrer para evitar confusão do usuário.
  • Design visual - Garanta que o código QR e as instruções sejam grandes o suficiente e claramente visíveis no dispositivo de destino.

Imposição de sessão única (SPoP)

A imposição de sessão única, ou SPoP (Single Point of Presence), é uma política que garante que um único perfil de usuário do XBOX Live não execute o mesmo título simultaneamente em vários dispositivos. Por exemplo, se você iniciar um jogo no PC enquanto ele já estiver em execução com sua conta no XBOX, uma sessão deverá ser suspensa ou desconectada para evitar conflitos de jogos salvos e outros problemas. Nos consoles XBOX, esse cenário dispara uma caixa de diálogo do sistema informando ao usuário que o jogo já está em execução em outro lugar e perguntando se ele deseja continuar (o que o desconectaria do outro dispositivo). Em plataformas que não são da Microsoft, não há um mecanismo interno para impor isso. A API de prompt SPoP do XUser permite que os jogos detectem essa situação e apresentem ao jogador a escolha “Jogar aqui ou Trocar de conta”.

Como funciona

A API SPoP usa um padrão de manipulador de eventos semelhante ao do Remote Connect. Quando um conflito de entrada é detectado, o XUser invoca o manipulador do jogo em vez de falhar imediatamente, permitindo que o jogo apresente opções ao usuário.

O fluxo

  1. Registro do manipulador de eventos - O jogo registra um manipulador de eventos de prompt SPoP antes de iniciar a entrada usando XUserPlatformSpopPromptSetEventHandlers(...).
  2. Detecção de conflito - Ao chamar XUserAddAsync para adicionar um usuário, se o XUser detectar que o mesmo usuário já está ativo em outro lugar no mesmo título, ele invocará o manipulador SPoP.
  3. Exibição do prompt - O manipulador do jogo recebe o gamertag moderno do usuário e um identificador de operação. O manipulador deve exibir um prompt de interface do usuário como: “[Gamertag] já está jogando em outro dispositivo. Deseja jogar aqui (o que desconectará a sessão no outro lugar) ou trocar para uma conta diferente?” com opções como “Jogar aqui” e “Trocar de conta”.
  4. Escolha do usuário - O jogo aguarda o usuário fazer uma seleção. A operação permanece pendente até que o jogo chame a API de conclusão.
  5. Conclusão da operação - Com base na escolha do usuário, o jogo chama XUserPlatformSpopPromptComplete com o resultado apropriado:
    • Jogar aqui - XUserPlatformSpopOperationResult::SignInHere - Conecta neste dispositivo e encerra a sessão remota.
    • Trocar de conta - XUserPlatformSpopOperationResult::SwitchAccount - Cancela a entrada neste dispositivo, permitindo que o usuário escolha uma conta diferente.
    • Cancelar - XUserPlatformSpopOperationResult::Canceled - Anula a tentativa de entrada.
  6. Resolução - O XUser prossegue com base no resultado. Se “Jogar aqui” for escolhido, a sessão remota será encerrada (o outro dispositivo receberá um evento de saída) e o usuário se tornará ativo localmente. Se “Trocar de conta” for escolhido, XUserAddAsync falhará e o jogo poderá solicitar uma conta diferente.

Implementação

Para usar o SPoP, implemente uma função de retorno de chamada e registre-a:
No manipulador OnSpopPrompt, o jogo recebe o identificador do usuário e o gamertag moderno. O manipulador deve pausar o fluxo do jogo (já que a entrada está pendente) e apresentar um prompt de interface do usuário com as opções. O manipulador armazena o identificador de operação e não o conclui imediatamente. Quando o usuário fizer uma escolha:
  • Chame XUserPlatformSpopPromptSetEventHandlers antes de chamar XUserAddAsync para garantir que os conflitos sejam tratados corretamente.
  • Você deve chamar XUserPlatformSpopPromptComplete exatamente uma vez para cada evento SPoP recebido; caso contrário, a entrada ficará travada indefinidamente.
  • Se nenhum manipulador for definido e ocorrer um conflito, XUserAddAsync falhará com um código de erro, sem dar ao usuário a oportunidade de resolver o conflito de forma adequada.

Considerações sobre a experiência do usuário

Para fornecer uma boa experiência do usuário:
  • Mensagens claras - Exiba o gamertag do usuário e explique claramente que continuar o desconectará do outro dispositivo.
  • Opções visíveis - Torne as opções “Jogar aqui” e “Trocar de conta” claramente visíveis e compreensíveis.
  • Evite conflitos de salvamento - Enfatize que isso evita conflitos de jogos salvos e problemas de jogabilidade simultânea.
  • Comportamento específico da plataforma - No XBOX e no Windows, o sistema operacional lida com isso automaticamente e o manipulador SPoP nunca será invocado. Em outras plataformas, seu jogo é responsável por apresentar essa escolha.
Sem essa API, os conflitos de entrada resultariam em erros enigmáticos ou em desconexões automáticas sem aviso, levando a uma experiência do usuário ruim. O prompt SPoP torna o comportamento explícito e controlado pelo usuário, alinhando-se à política de sessão única do XBOX e dando controle aos jogadores.

Confira também

Identidade do usuário e XUser
Última modificação em 6 de outubro de 2026