XUser. Cada instancia de XUser representa un usuario que ha iniciado sesión en el juego. Cada usuario se representa mediante XUserHandle. Los juegos pueden hacer lo siguiente mediante XUserHandle.
- Consultar el estado de inicio de sesión en los servicios de XBOX.
- Obtener el gamertag de los usuarios.
- Obtener la imagen de jugador de los usuarios.
- Determinar el grupo de edad de los usuarios.
- Determinar qué privilegios tiene permitidos el usuario, por ejemplo, si puede participar en comunicación en tiempo real o en sesiones multijugador.
- Obtener un token autenticado.
Identificadores de XUser
Hay dos identificadores diferentes asociados a unXUser determinado: el identificador local y el identificador de los servicios de XBOX (XUID).
El identificador local es un identificador que permanece con el usuario durante toda la vida de ese usuario dentro de la sesión de juego. Use el identificador local en todos los procesos que genere un juego o si el juego llama a XLaunchNewGame. Sin embargo, no use elidentificador local para identificar a un usuario entre sesiones de juego. Para obtener el identificador local de un usuario, use la función
XUserGetLocalId.
El identificador de los servicios de Xbox (XUID) es el identificador que se debe usar al comunicarse con los servicios de XBOX o al invocar la interfaz de usuario invocable desde el título (TCUI). Para obtener el XUID de un usuario, use la función XUserGetId. Es posible que se requiera el consentimiento del usuario para obtener el XUID. Si este consentimiento es necesario y no se concede, XUserGetId devuelve E_GAMEUSER_RESOLVE_USER_ISSUE_REQUIRED. Para resolver el problema y recopilar el consentimiento, los juegos deben llamar entonces a XUserResolveIssueWithUiAsync.
Estados de XUser
Los usuarios pueden estar en uno de tres estados: han iniciado sesión en los servicios de XBOX, están en proceso de cerrar sesión en los servicios de XBOX o han cerrado sesión por completo. Los juegos pueden consultar este estado de un usuario especificado mediante la funciónXUserGetState. Los juegos también pueden registrarse para recibir notificaciones de cambio mediante la función XUserRegisterForChangeEvent.
No juzgue la conectividad de red basándose en el estado de XUser. Si XUserState es SignedIn, esto indica que en algún momento el usuario se autenticó con los servicios de XBOX y se puede tratar como un usuario activo. Sin embargo, es posible que la red no esté conectada.
Adición o eliminación de usuarios en el juego
A diferencia del modelo de la ERA de XBOX One, un juego solo puede interactuar con los usuarios que el juego ha solicitado llamando a la funciónXUserAddAsync. Por ejemplo, suponga que dos usuarios han iniciado sesión en la consola: el usuario A y el usuario B.
- Alguien inicia el juego. Para este escenario, no importa quién lo hizo.
- El juego se registra para los cambios de estado de usuario mediante
XUserRegisterForChangeEvent. - El juego llama a
XUserAddAsyncy el usuario A inicia sesión en el juego. - El juego ahora tiene un
XUserHandleque representa al usuario A. - Desde la guía, el usuario B elige cerrar sesión.
- No se desencadena ningún evento de cambio de inicio de sesión en el juego. El juego nunca supo del usuario B.
- Desde la guía, el usuario A elige cerrar sesión.
- El juego recibe un evento de cambio que indica primero que el usuario A está en proceso de cerrar sesión y, después, en última instancia, un evento diferente que indica que el usuario A ha cerrado sesión.
- El juego podría cerrar todos los identificadores que representan al usuario mediante la función
XUserCloseHandle. - El usuario usa la guía para cerrar sesión en la consola.
- El usuario inicia sesión en un dispositivo diferente.
Tipos de usuarios
XBOX One admite dos tipos de usuarios: jugadores de XBOX e invitados. Los jugadores de Xbox tienen todas las capacidades como usuarios en el sistema. Se crean inicialmente al agregar una nueva cuenta en el selector de cuentas, una interfaz de usuario proporcionada por el sistema para que los usuarios inicien sesión. Los jugadores de XBOX persisten en la consola hasta que se quitan explícitamente con la aplicación de configuración. Los invitados de Xbox tienen una sesión única en una consola. Se crean cuando eligen en el selector de cuentas jugar como invitado y están patrocinados por otro jugador de XBOX con sesión iniciada. Los invitados persisten hasta que cierran sesión, hasta que el jugador de XBOX patrocinador cierra sesión o hasta que se apaga la consola. Los juegos que quieran permitir invitados deben especificar la opciónAllowGuest cuando llamen a XUserAddAsync.
Patrones para agregar usuarios
Los juegos siempre deben intentar establecer un usuario inicial. Hay dos maneras principales de lograrlo.Opción 1: determinar el usuario lo antes posible sin mostrar interfaz de usuario
- Llame a
XUserAddAsyncmedianteAddDefaultUserSilently. Esta función intenta determinar quién inició el juego sin mostrar ninguna interfaz de usuario. - La llamada a
XUserAddAsyncpodría producir el errorE\_GAMEUSER\_NO\_DEFAULT\_USER. Si esto sucede, nadie tenía sesión iniciada cuando el juego se inició por primera vez. Para establecer el usuario inicial, el juego debe llamar aXUserAddAsyncsin usar la marcaAddDefaultUserSilently. A diferencia de la opción “silenciosa”, esta llamada garantiza que todos los problemas de consentimiento se resuelvan por completo y que, si la llamada se realiza correctamente, el usuario tenga sesión iniciada en los servicios de XBOX. El juego puede crear un contexto de XBOX para ese usuario.
Opción 2: determinar el usuario con la posibilidad de mostrar interfaz de usuario
Llame aXUserAddAsync mediante AddDefaultUserAllowingUI. Al igual que la opción anterior (con “silencioso”), esta función intenta determinar quién inició el juego. A diferencia de la opción anterior, si no se puede determinar el usuario predeterminado, muestra la interfaz de usuario para permitir que los jugadores inicien sesión o se seleccionen a sí mismos. Si XUserAddResult se realiza correctamente, el juego tiene un usuario que ha iniciado sesión por completo en los servicios de XBOX y el juego puede crear un contexto de XBOX para ese usuario.
Para ver código de ejemplo que muestra estos pasos, consulte Procedimiento: práctica recomendada para iniciar la sesión de un usuario.
Administración de XUserHandle
CadaXUserHandle representa un usuario. Sin embargo, es posible que varios de estos identificadores representen cada uno al mismo usuario. Los juegos deben usar el siguiente patrón básico.
- Mantenga una colección de instancias de
XUserHandleque representen la colección de usuarios que le interesan al juego. - Regístrese para los cambios de estado de
XUserllamando aXUserRegisterForChangeEvent. Cuando vea que un usuario está cerrando sesión, actualice su colección de usuarios. - Cuando obtenga un nuevo
XUserHandledeXUserAddAsync, asegúrese de comprobar si representa a un nuevo usuario. Puede comparar directamente los identificadores medianteXUserCompare. También puede comparar mediante el identificador local que se obtiene llamando aXUserGetLocalId. - Si tiene varias instancias de
XUserHandleque representan al mismo usuario, useXUserCloseHandlepara quitar las instancias adicionales.
XLaunchNewGame. Sin embargo, no use el identificador local para identificar a un usuario entre sesiones de juego.