> ## 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.

# Tutorial Obtener un perfil de jugador

> Recupere datos del perfil de jugador de PlayFab en Unity mediante GetPlayerProfile, configure PlayerProfileViewConstraints y lea las marcas de tiempo de creación y último inicio de sesión.

# Tutorial: Obtener un perfil de jugador

En este tutorial aprenderá a:

<Note>
  \[!div class="checklist"] \* Crear un usuario con un nombre para mostrar \* Realizar una llamada de perfil de jugador \* Obtener la hora de creación del jugador y la hora del último inicio de sesión \* Configurar las restricciones de vista del perfil de jugador para el título \* Obtener el perfil de jugador mediante la operación de inicio de sesión
</Note>

## Requisitos

* Una [cuenta de desarrollador de PlayFab](https://developer.playfab.com).
* Una copia instalada del editor de Unity. Para instalar Unity para uso personal mediante Unity Hub, o Unity+ para uso profesional, consulte [Descargar Unity](https://unity3d.com/get-unity/download).

<Note>
  El SDK de Unity3D de PlayFab es compatible con la versión 5.3 del editor de Unity (publicada en diciembre de 2015) y posteriores.
</Note>

* Un proyecto de Unity \* puede ser cualquiera de los siguientes:
  * Un proyecto totalmente nuevo. Para obtener más información, consulte [Iniciar Unity por primera vez](https://docs.unity3d.com/550/Documentation/Manual/GettingStarted.html).
  * Un proyecto de tutorial guiado. Para obtener más información, consulte [Introducción a Unity](https://learn.unity.com/).
  * Un proyecto existente.
* El [SDK de Unity3D](/services/playfab/sdks/unity3d) de PlayFab.

Para este tutorial se necesitan conocimientos básicos sobre cómo crear un jugador para su título, de modo que pueda ejecutar un `GetPlayerProfile` en el jugador.

También merece la pena leer el [inicio rápido de Game Manager](/services/playfab/live-service-management/gamemanager/quickstart) si no está familiarizado con Game Manager, ya que es el lugar donde se configuran las restricciones de perfil.

Los ejemplos de C# de este artículo están escritos para el SDK de Unity. El SDK de Unity usa un modelo controlado por eventos para controlar las tareas no sincrónicas. Para ejecutar el código de ejemplo con el SDK de C#, debe modificar el código para usar un modelo asincrónico de tareas (Task). Los métodos que deben modificarse tienen Async anexado al nombre del método en la firma. Por ejemplo, SetObject en el SDK de Unity se convierte en SetObjectAsync en el SDK de C#. Para obtener más información, consulte [Programación asincrónica con async y await](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/).

## Crear un usuario con un nombre para mostrar

El primer paso es crear un jugador y agregar un nombre para mostrar al usuario. Este ejemplo creará un nuevo usuario con el nombre para mostrar `UnicornTossMaster`.

```csharp theme={null}
void CreatePlayerAndUpdateDisplayName() {
    PlayFabClientAPI.LoginWithCustomID( new LoginWithCustomIDRequest {
        CustomId = "PlayFabGetPlayerProfileCustomId",
        CreateAccount = true
    }, result => {
        Debug.Log("Successfully logged in a player with PlayFabId: " + result.PlayFabId);
        UpdateDisplayName();
    }, error => Debug.LogError(error.GenerateErrorReport()));
}

void UpdateDisplayName() {
    PlayFabClientAPI.UpdateUserTitleDisplayName( new UpdateUserTitleDisplayNameRequest {
        DisplayName = "UnicornTossMaster"
    }, result => {
        Debug.Log("The player's display name is now: " + result.DisplayName);
    }, error => Debug.LogError(error.GenerateErrorReport()));
}
```

La salida de la consola debería mostrar:

```
Successfully logged in a player with PlayFabId: SOME_PLAYFAB_ID
The player's display name is now: UnicornTossMaster
```

## Realizar una llamada de perfil de jugador

El siguiente paso es crear un perfil muy básico para el jugador

El ejemplo siguiente usa una llamada básica a [GetPlayerProfile](xref:titleid.playfabapi.com.server.accountmanagement.getplayerprofile).

```csharp theme={null}
void GetPlayerProfile(string playFabId) {
    PlayFabClientAPI.GetPlayerProfile( new GetPlayerProfileRequest() {
        PlayFabId = playFabId,
        ProfileConstraints = new PlayerProfileViewConstraints() {
            ShowDisplayName = true
        }
    },
    result => Debug.Log("The player's DisplayName profile data is: " + result.PlayerProfile.DisplayName),
    error => Debug.LogError(error.GenerateErrorReport()));
}
```

La respuesta incluye un objeto [PlayerProfileModel](xref:titleid.playfabapi.com.server.accountmanagement.getplayerprofile#playerprofilemodel) que contiene el nombre para mostrar `UnicornTossMaster` del jugador.

## Obtener la hora de creación del jugador y la hora del último inicio de sesión

En el objeto [PlayerProfileModel](xref:titleid.playfabapi.com.server.accountmanagement.getplayerprofile#playerprofilemodel) hay una buena cantidad de datos sobre el jugador. En el paso anterior se emitió un `GetPlayerProfile` y la respuesta recibida solo contenía información del nombre para mostrar.

El siguiente paso es obtener aún *más* datos de perfil del jugador. Para ello, llame a `GetPlayerProfile` con campos adicionales en el parámetro de solicitud [PlayerProfileViewConstraints](xref:titleid.playfabapi.com.server.accountmanagement.getplayerprofile#playerprofileviewconstraints).

El siguiente ejemplo de **C#** modifica el método `GetPlayerProfile` del paso 2 y llama a `GetPlayerProfile` para solicitar los campos `Created` y `LastLogin` estableciendo sus marcas en [ProfileConstraints](xref:titleid.playfabapi.com.server.accountmanagement.getplayerprofile#playerprofileviewconstraints).

<Note>
  **¡Esta llamada no se realizará correctamente en este paso!**
</Note>

```csharp theme={null}
void CreatePlayerAndUpdateDisplayName(string playFabId) {
    PlayFabClientAPI.GetPlayerProfile( new GetPlayerProfileRequest() {
        PlayFabId = playFabId,
        ProfileConstraints = new PlayerProfileViewConstraints {
            ShowDisplayName = true,
            ShowCreated = true,
            ShowLastLogin = true
        }
    },
    result => Debug.Log("The player's profile Created date is: " + result.PlayerProfile.Created),
    error => Debug.LogError(error.GenerateErrorReport()));
}
```

Si ejecuta este código de ejemplo en este punto, devuelve un error con `Error Code 1303`. `RequestViewConstraintParamsNotAllowed`, y un mensaje de error que indica que hay `Invalid view constraints` con una salida JSON de las restricciones que el título tiene establecidas actualmente.

El error se produce porque aún no ha configurado la capacidad de mostrar `Created` y `LastLogin` en la configuración de restricciones de perfil de su título.

## Configurar las restricciones de vista del perfil de jugador para el título

Para obtener más datos al llamar a la API [GetPlayerProfile](xref:titleid.playfabapi.com.server.accountmanagement.getplayerprofile), debe configurar las restricciones sobre los datos que estarán disponibles. Estos valores se encuentran en la configuración del título en Game Manager.

De forma predeterminada, **ALLOW CLIENT ACCESS TO PROFILE PROPERTIES:** solo tenía habilitado **Display name**, lo que le permitía recuperar el valor de **Display Name**.

Para configurar restricciones adicionales para el título:

* En [Game Manager](https://developer.playfab.com), seleccione su título.
* Seleccione el icono de engranaje en la esquina superior izquierda y, a continuación, seleccione **Title settings**.
* Seleccione la pestaña **Client Profile Options**.
* Para habilitar tanto **Created** como **LastLogin** en [ProfileConstraints](xref:titleid.playfabapi.com.server.accountmanagement.getplayerprofile#playerprofileviewconstraints), marque **Creation date** y **Last login time** y, a continuación, seleccione **SAVE CLIENT PROFILE OPTIONS**.

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/player-progression/player-data/tutorials/playfab-allow-client-access-to-profile-properties.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=e3bbe44c17680cdd24273e71fb2f7d80" alt="Configuración de PlayFab * Opciones de perfil de cliente * Permitir el acceso del cliente a las propiedades del perfil" width="1227" height="937" data-path="images/playfab/player-progression/player-data/tutorials/playfab-allow-client-access-to-profile-properties.png" />

Ahora, cuando llame a 1`CreatePlayerAndUpdateDisplayName`, devuelve el objeto [PlayerProfileModel](xref:titleid.playfabapi.com.server.accountmanagement.getplayerprofile#playerprofilemodel) con datos sobre la hora de creación del usuario, el último inicio de sesión y el nombre para mostrar `UnicornTossMaster`.

## Obtener el perfil de jugador mediante la operación de inicio de sesión

En la mayoría de los casos, querrá recuperar los datos del perfil de jugador en cuanto un jugador inicie sesión. La API de PlayFab le permite combinar la llamada de inicio de sesión y la llamada para recuperar el perfil de jugador en una sola llamada.

El ejemplo siguiente muestra cómo obtener información de perfil mediante una solicitud de inicio de sesión, y usa `LoginWithCustomId` como ejemplo.

<Note>
  Esto funciona con *todos* los mecanismos de inicio de sesión.
</Note>

```csharp theme={null}
void CreatePlayerAndUpdateDisplayName(string customId) {
    PlayFabClientAPI.LoginWithCustomID( new LoginWithCustomIDRequest() {
        CustomId = customId,
        // Define info request parameters
        InfoRequestParameters = new GetPlayerCombinedInfoRequestParams() {
            // And make sure PlayerProfile is included
            GetPlayerProfile = true,
            // Define rules for PlayerProfile request
            ProfileConstraints = new PlayerProfileViewConstraints() {
                // And make sure that both AvatarUrl and LastLogin are included.
                ShowAvatarUrl = true,
                ShowLastLogin = true,
            }
        }
    },
    result =>
    {
        // Extract the data you have requested
        var avatarUrl = result.InfoResultPayload.PlayerProfile.AvatarUrl;
    },
    error => Debug.LogError(error.GenerateErrorReport()));
}
```


## Related topics

- [Tutorial para exportar los jugadores de un segmento](/es/services/playfab/live-service-management/game-configuration/segmentation/segmentation-export-players-in-a-segment.md)
- [Configuración de idiomas predeterminados](/es/services/playfab/live-service-management/game-configuration/title-communications/news/setting-default-languages.md)
- [Uso del perfil para tablas de clasificación avanzadas](/es/services/playfab/community/leaderboards/tournaments-leaderboards/using-the-profile-for-advanced-leaderboards.md)
- [Obtención del valor hasta la fecha (VTD) de un jugador en Economy (heredado)](/es/services/playfab/economy-monetization/economy/tutorials/getting-a-players-vtd.md)
- [Cómo obtener datos internos del jugador](/es/services/playfab/player-progression/player-data/how-to-get-internal-player-data.md)
