> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Usuarios y dispositivos de entrada

> Usuarios y dispositivos de entrada

Los juegos necesitan saber qué dispositivos de entrada están asociados a un usuario especificado.
Esto es clave para responder a las preguntas siguientes:

* ¿Quién realizó una acción en el juego?

* ¿Quién obtiene el logro?

* ¿Quién está realizando la compra?

Este tema aborda algunos conceptos clave que le ayudan a gestionar estas asociaciones y responder
a este tipo de preguntas.

## Diferencias en el modelo de usuario entre la ERA de XBOX One y el Microsoft Game Development Kit (GDK)

Ya sea al desarrollar un nuevo título con el Microsoft Game Development Kit (GDK) o al portar un título anterior de la ERA de XBOX One, implementar la administración de usuarios y dispositivos de entrada puede resultar confuso cuando se está acostumbrado al modelo de usuario de la ERA de XBOX One.

* Los títulos que necesitan usuarios, por ejemplo cuando se necesitan guardados de juego o logros, deben establecer un usuario
  principal. Este usuario principal es una construcción exclusiva del título y no la proporciona el sistema.

* El título solo conoce los usuarios agregados mediante una llamada a [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync). El título no
  recibe información sobre las acciones que realiza el sistema para los usuarios que no ha agregado.

* Cuando un dispositivo que anteriormente estaba asociado a un usuario del título se asocia a un usuario que el título
  desconoce, el título solo recibe información de un evento de asociación de dispositivo sin un nuevo usuario.

* Si un dispositivo que no estaba asociado a un usuario del título se asocia a otro usuario que tampoco
  se agregó con [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync), el título no recibe información del evento de asociación.

* El selector de cuentas actúa de forma diferente según cómo se haya abierto (guía del sistema frente a
  [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync)).

<Note>El ejemplo UserManagement cubre el comportamiento de administración de usuarios y emparejamiento de dispositivos
de entrada en una amplia variedad de situaciones de juego. También gestiona los requisitos XR relacionados con los usuarios
y los dispositivos de entrada. Para obtener más información sobre los ejemplos, consulte
[Ejemplos del Microsoft Game Development Kit](/home/setup-install/samples).</Note>

## Cómo identificar a un usuario especificado

Los juegos usan el *identificador local* para interactuar con los dispositivos de entrada. El identificador local es un
identificador que permanece con el usuario durante toda su vida dentro de la sesión de juego. El identificador local se puede usar en
todos los procesos que genere un juego o si el juego
llama a [XLaunchNewGame](/reference/system/xgame/functions/xlaunchnewgame). No use el identificador local para identificar a un usuario
entre sesiones de juego.

Para obtener el identificador local de un usuario, use la función [XUserGetLocalId](/reference/system/xuser/functions/xusergetlocalid).

## Cómo identificar un dispositivo de entrada en particular

Todos los dispositivos de juego, como mandos, sticks arcade y volantes, tienen un
*identificador de dispositivo* único que se representa mediante una estructura [APP\_LOCAL\_DEVICE\_ID](/reference/system/xuser/structs/app_local_device_id).
Este identificador de dispositivo persiste entre varios inicios del juego o
reinicios del sistema. El identificador de dispositivo es diferente entre dos
juegos diferentes que se ejecutan en el mismo sistema.

Si usa `XInput` en la consola, puede obtener el identificador de dispositivo mediante
[XInputGetDeviceId](/reference/input/xinputongameinput/functions/xinputgetdeviceid).

Si usa [GameInput](/build/core-features/common/input/overviews/input-overview), puede obtener el identificador de dispositivo del
miembro `deviceId` del objeto [GameInputDeviceInfo](/reference/input/gameinput/structs/gameinputdeviceinfo) que devuelve
una llamada a [IGameInputDevice::GetDeviceInfo](/reference/input/gameinput/interfaces/igameinputdevice/methods/igameinputdevice_getdeviceinfo).

## Modelo de usuario

Cuando un título necesita tener usuarios, por ejemplo cuando se necesitan guardados de juego o logros, el título es
totalmente responsable de establecer un usuario principal. Este usuario principal debe mantenerse incluso cuando
se permite que varios usuarios inicien sesión. El título también debe permitir que el usuario principal se cambie según
sea necesario. Un método para hacerlo sería tener un aviso de *cambio de usuario* que abra un selector de cuentas
con [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync).

El selector de cuentas enumera todos los usuarios que han iniciado sesión anteriormente en la
consola, tiene un botón **Add new** para iniciar sesión con cuentas nuevas y permite iniciar sesión a usuarios
invitados temporales. Se puede seleccionar cualquiera de estas cuentas de usuario, independientemente de la identidad
real del usuario. El sistema admite usuarios que eligen jugar como otras personas de esta
manera.

Los títulos del Microsoft Game Development Kit (GDK) no tienen conocimiento completo de los usuarios del sistema. En su lugar, los usuarios solo
se pueden agregar a un título mediante una llamada a [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync). Los usuarios agregados de esta manera son los
únicos usuarios con los que el título puede interactuar. El sistema no informará al título sobre las acciones realizadas para
usuarios que el título no ha agregado. Como resultado, el título debe mantener su propia lista de usuarios.

El selector de cuentas se puede abrir de dos maneras diferentes: desde la guía del sistema y mediante
[XUserAddAsync](/reference/system/xuser/functions/xuseraddasync). Este selector se comporta de forma diferente en estas dos circunstancias:

| Caso                                                           | Selector de cuentas de [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync)                     | Selector de cuentas de la guía                                                                              |
| -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| Selección de un usuario que no ha iniciado sesión en el título | El usuario inicia sesión tanto en el sistema como en el título.                                             | El usuario solo inicia sesión en el sistema. El título no recibe información del inicio de sesión.          |
| Selección de un usuario que ya ha iniciado sesión en el título | El usuario ya ha iniciado sesión en el título, por lo que no se producen más cambios de estado del usuario. | El usuario ya ha iniciado sesión en el título, por lo que no se producen más cambios de estado del usuario. |

<Note>El conjunto de usuarios con sesión iniciada en un título es siempre un subconjunto de los usuarios
con sesión iniciada en el sistema. Un título no puede tener usuarios con sesión iniciada que el sistema no tenga con sesión iniciada.
Sin embargo, el sistema puede tener usuarios que el título desconoce.</Note>

Los eventos de usuario se pueden gestionar mediante una [XUserChangeEventCallback](/reference/system/xuser/functions/xuserchangeeventcallback) registrada
con [XUserRegisterForChangeEvent](/reference/system/xuser/functions/xuserregisterforchangeevent). Los eventos solo se llamarán para
los usuarios que hayan iniciado sesión con [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync). Cuando un usuario cierra sesión en el
sistema, el título debe reaccionar en consecuencia y quitar al usuario del título o permitir que el jugador
intente iniciar la sesión del usuario de nuevo.

## Asociaciones de dispositivos de entrada

El Microsoft Game Development Kit (GDK) permite que los usuarios tengan cualquier número de dispositivos de entrada asociados. Esto puede
ser un desafío al portar títulos más antiguos que quizás asuman una asignación 1:1 entre usuarios y dispositivos.

Las asociaciones de dispositivos suelen realizarse mediante el selector de cuentas. El dispositivo de entrada que selecciona al usuario desde
la interfaz de usuario queda asociado a ese usuario. Las asociaciones también pueden cambiar en otros casos, como cuando un
usuario cierra sesión o cuando se usa [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync) sin interfaz de usuario mediante las
opciones [AddDefaultUserSilently](/reference/system/xuser/enums/xuseraddoptions) y [AddDefaultUserAllowingUI](/reference/system/xuser/enums/xuseraddoptions).

El selector de cuentas también se comporta de forma diferente para las asociaciones según cómo se haya abierto el selector:

| Caso                                                           | Selector de cuentas de [XUserAddAsync](/reference/system/xuser/functions/xuseraddasync)                               | Selector de cuentas de la guía                                                                                                                                                                                                                   |
| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Selección de un usuario que no ha iniciado sesión en el título | Después de que el usuario inicia sesión en el título, el dispositivo que completó el aviso queda asociado al usuario. | El usuario inicia sesión en el sistema (si aún no ha iniciado sesión) y el dispositivo que completó el aviso queda asociado a ese usuario. Como el título no conoce a este usuario, recibirá información de que el dispositivo está sin asociar. |
| Selección de un usuario que ya ha iniciado sesión en el título | El dispositivo que completó el aviso queda asociado al usuario del sistema y del título.                              | El dispositivo que completó el aviso queda asociado al usuario del sistema y del título.                                                                                                                                                         |

Si el usuario inició sesión automáticamente en el título sin un selector de cuentas mediante una llamada a
[XUserAddAsync](/reference/system/xuser/functions/xuseraddasync) con una de las opciones [AddDefaultUserSilently](/reference/system/xuser/enums/xuseraddoptions) o
[AddDefaultUserAllowingUI](/reference/system/xuser/enums/xuseraddoptions), los emparejamientos de dispositivos de entrada que tenía el sistema
se comunican al título.

Para recibir notificaciones de los cambios de asociación de dispositivos de usuario, puede registrar una devolución de llamada
[XUserDeviceAssociationChangedCallback](/reference/system/xuser/functions/xuserdeviceassociationchangedcallback) con el método
[XUserRegisterForDeviceAssociationChanged](/reference/system/xuser/functions/xuserregisterfordeviceassociationchanged). También puede
llamar a [XUserFindForDevice](/reference/system/xuser/functions/xuserfindfordevice) para buscar una asociación de un dispositivo específico.

<Note>Dado que el título solo puede conocer los usuarios que se han agregado con
[XUserAddAsync](/reference/system/xuser/functions/xuseraddasync), las devoluciones de llamada y los métodos de asociación de dispositivos de usuario solo pueden devolver usuarios
que el título haya agregado previamente.</Note>

## Coincidencia del usuario con un punto de conexión de audio predeterminado

Con frecuencia se usan auriculares o micrófonos con los juegos. A continuación se indican algunas preguntas
importantes que debe hacerse.

* ¿Tiene el usuario unos auriculares? Si es así, ¿qué auriculares es probable que esté usando?
  ¿Cuál es el punto de conexión de audio predeterminado para la representación de comunicaciones?

* ¿Tiene el usuario un micrófono asociado? ¿Cuál es el
  punto de conexión predeterminado para la captura de comunicaciones?

Para responder a estas preguntas para un usuario específico, los juegos pueden llamar a
[XUserGetDefaultAudioEndpointUtf16](/reference/system/xuser/functions/xusergetdefaultaudioendpointutf16). Al igual que las asociaciones
de usuario a dispositivo pueden cambiar, los puntos de conexión de audio predeterminados asociados a un
usuario específico también pueden cambiar. Para detectar estos cambios de asociación, los juegos
deben llamar a [XUserRegisterForDefaultAudioEndpointUtf16Changed](/reference/system/xuser/functions/xuserregisterfordefaultaudioendpointutf16changed) y prestar atención
a la devolución de llamada resultante.


## Related topics

- [Usuarios](/es/build/core-features/common/user/user-toc.md)
- [XUserFindForDevice](/es/reference/system/xuser/functions/xuserfindfordevice.md)
- [XUserDeviceAssociationChange](/es/reference/system/xuser/structs/xuserdeviceassociationchange.md)
- [Identidad de usuario y API de XUser en el GDK](/es/build/core-features/common/user/index.md)
- [Directrices de experiencia de usuario de texto a voz y entrada de texto de PlayFab Party](/es/services/playfab/community/voice-communications/party-text-to-speech-ux-guidelines.md)
