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

# Inicio rápido (Windows): llamada a PlayFab Services

> Use el PFEntityHandle autenticado del SDK unificado de PlayFab para recuperar claves de entidad y llamar a las API de los servicios de PlayFab desde un título de Windows.

Esta guía muestra cómo realizar llamadas a las API de los servicios de PlayFab mediante el SDK unificado. Aprenderá a llamar a varios servicios de PlayFab para administrar los datos de los jugadores, recuperar archivos e interactuar con otras características de PlayFab.

## Requisitos previos

Antes de empezar, asegúrese de tener:

* Completada la [configuración del SDK de Core y la autenticación](/services/playfab/sdks/unified-sdk/quickstart-core)
* Un `PFEntityHandle` autenticado del proceso de inicio de sesión
* Su Title ID de PlayFab y la configuración del servicio establecidos

<Note>
  Esta guía asume que ya ha inicializado el SDK de PlayFab y ha autenticado a un jugador siguiendo la [guía de inicio rápido de Core](/services/playfab/sdks/unified-sdk/quickstart-core). Si aún no lo ha hecho, complete primero esa guía.
</Note>

## Qué logrará

Al final de este inicio rápido, habrá:

* Recuperado la clave de entidad de un jugador autenticado
* Realizado su primera llamada a la API de un servicio de PlayFab
* Procesado la respuesta de un servicio de PlayFab

## Realización de su primera llamada a la API de un servicio

Después de una autenticación correcta, puede realizar llamadas a la API de PlayFab con el `PFEntityHandle` obtenido durante el inicio de sesión. Este ejemplo muestra cómo recuperar los archivos almacenados para el jugador actual.

### Paso 1: obtener la clave de entidad

Primero, recupere la clave de entidad de su identificador de entidad autenticado:

```cpp theme={null}
PFEntityKey const* pEntityKey{};
std::vector<char> entityKeyBuffer;
size_t size{};
HRESULT hr = PFEntityGetEntityKeySize(entityHandle, &size);
if (FAILED(hr))
{
    std::wcerr << L"Failed to get entity key size: 0x" << std::hex << hr << std::endl;
    return hr;
}

entityKeyBuffer.resize(size);
hr = PFEntityGetEntityKey(entityHandle, entityKeyBuffer.size(), 
    entityKeyBuffer.data(), &pEntityKey, nullptr);
if (FAILED(hr))
{
    std::wcerr << L"Failed to get entity key: 0x" << std::hex << hr << std::endl;
    return hr;
}

std::wcout << L"Entity ID: " << pEntityKey->id << std::endl;
```

### Paso 2: llamar a la API GetFiles

Ahora realice su primera llamada a un servicio de PlayFab para obtener los archivos asociados al jugador:

```cpp theme={null}
// Prepare the request
XAsyncBlock async{};
PFDataGetFilesRequest requestFiles{};
requestFiles.entity = pEntityKey;  // Use the entity key from above

// Make the async API call
HRESULT hr = PFDataGetFilesAsync(entityHandle, &requestFiles, &async);
if (FAILED(hr))
{
    std::wcerr << L"Failed to start GetFiles request: 0x" << std::hex << hr << std::endl;
    return hr;
}

// Wait for the call to complete
hr = XAsyncGetStatus(&async, true);
if (FAILED(hr))
{
    std::wcerr << L"GetFiles request failed: 0x" << std::hex << hr << std::endl;
    return hr;
}

// Get the result size and allocate buffer
size_t resultSize;
hr = PFDataGetFilesGetResultSize(&async, &resultSize);
if (FAILED(hr))
{
    std::wcerr << L"Failed to get result size: 0x" << std::hex << hr << std::endl;
    return hr;
}

// Retrieve the actual result
std::vector<char> getFilesResultBuffer(resultSize);
PFDataGetFilesResponse* getFilesResponseResult{ nullptr };
hr = PFDataGetFilesGetResult(&async, getFilesResultBuffer.size(), 
    getFilesResultBuffer.data(), &getFilesResponseResult, nullptr);
if (SUCCEEDED(hr))
{
    std::wcout << L"Successfully retrieved files. Count: " 
               << (getFilesResponseResult->metadata ? getFilesResponseResult->metadataCount : 0) 
               << std::endl;
    
    // Process the files as needed
    if (getFilesResponseResult->metadata)
    {
        for (uint32_t i = 0; i < getFilesResponseResult->metadataCount; ++i)
        {
            std::wcout << L"File: " << getFilesResponseResult->metadata[i].fileName << std::endl;
        }
    }
}
else
{
    std::wcerr << L"Failed to get GetFiles result: 0x" << std::hex << hr << std::endl;
}
```

🎉 **¡Enhorabuena!** Ha realizado correctamente su primera llamada a la API de un servicio de PlayFab con el SDK unificado.

## Comprensión del patrón de llamada a la API

Todas las llamadas a las API de los servicios de PlayFab siguen un patrón similar:

1. **Prepare la solicitud**: cree y rellene una estructura de solicitud
2. **Inicie la llamada asincrónica**: llame a la función `*Async`
3. **Espere la finalización**: use `XAsyncGetStatus` para esperar la operación
4. **Obtenga el tamaño del resultado**: llame a `*GetResultSize` para determinar las necesidades del búfer
5. **Recupere el resultado**: llame a `*GetResult` para obtener los datos reales

Este patrón se aplica a todas las API de los servicios de PlayFab, lo que facilita trabajar con diferentes servicios una vez que comprenda los conceptos básicos.

## Pasos siguientes

Ahora que ha llamado correctamente a un servicio de PlayFab, explore estas características adicionales:

### API de servicio comunes

* **Administración de datos de jugadores**: almacene y recupere datos personalizados de los jugadores
* **Estadísticas de jugadores**: realice el seguimiento de las estadísticas y los logros de los jugadores
* **Datos del título**: acceda a los datos de configuración del juego
* **Cloud Script**: ejecute lógica del lado del servidor

### Características avanzadas

* **Tablas de clasificación**: implemente características competitivas con clasificaciones
* **Economía y monetización**: agregue monedas y artículos virtuales
* **Multijugador**: integre servicios de matchmaking y salas
* **Análisis**: realice el seguimiento del comportamiento de los jugadores y las métricas del juego

### Procedimientos recomendados

* [Operaciones asincrónicas](/services/playfab/sdks/unified-sdk/async-model): comprensión del modelo de programación asincrónica de PlayFab
* [Administración de memoria](/services/playfab/sdks/unified-sdk/memory-management): procedimientos recomendados para administrar la memoria del SDK
* [Seguimiento y diagnóstico](/services/playfab/sdks/unified-sdk/debug-trace): depuración y supervisión de su integración

## Solución de problemas

**Problemas comunes y soluciones:**

| Problema                                        | Solución                                                             |
| ----------------------------------------------- | -------------------------------------------------------------------- |
| Identificador de entidad no válido              | Asegúrese de haber completado la autenticación correctamente         |
| Tiempo de espera agotado en la llamada a la API | Compruebe la conectividad de red y el estado del servicio de PlayFab |
| Errores de acceso denegado                      | Verifique su Title ID y los permisos de la entidad                   |
| Errores de tamaño de búfer                      | Llame siempre a `*GetResultSize` antes de `*GetResult`               |

Para obtener información de error más detallada, habilite el [seguimiento y diagnóstico](/services/playfab/sdks/unified-sdk/debug-trace) en su aplicación.

## Documentación de referencia

* [Referencia de la API del SDK unificado de PlayFab](/services/playfab/api-references/c/pfauthentication/pfauthentication_members)
* [Referencia de la API de PlayFab Services](/services/playfab/api-references)
* [Documentación de la API de datos de PlayFab](https://docs.microsoft.com/gaming/playfab/api-references/data/)


## Related topics

- [Inicio rápido de Unity](/es/services/playfab/sdks/unity3d/quickstart.md)
- [Inicio rápido de NodeJS](/es/services/playfab/sdks/nodejs/quickstart.md)
- [Inicio rápido de C++ para Windows](/es/services/playfab/sdks/playfab-cpp/quickstart-windows.md)
- [Inicio rápido del GDK](/es/services/playfab/sdks/c/quickstart-gdk.md)
- [Inicio rápido](/es/services/playfab/economy-monetization/economy-v2/quickstart.md)
