# Recopilar datos de los jugadores

Pushwoosh necesita saber quiénes son sus jugadores y qué hacen en el juego. Los eventos registran las acciones, y las etiquetas guardan el estado actual de cada jugador.

<Aside type="tip" title="Deje que AI Assistant cree los eventos y las etiquetas">
[AI Assistant](/es/product/pushwoosh-ai/ai-assistant/) puede crear en su aplicación los eventos y las etiquetas de esta página. Envíele el enlace a la página y pídale que haga las etiquetas User-specific. Revise cada cambio antes de aprobarlo.
</Aside>

<span id="identify-players-by-user-id" />

## Identificar a los jugadores por User ID

<Aside type="caution" icon="setting" title="Se necesita la ayuda de un desarrollador">
Configurar el User ID es un cambio en el código de su juego. Comparta [Recopilación de User IDs](/es/developer/first-steps/collecting-user-ids/#setuserid-sdk-method) con sus desarrolladores.
</Aside>

Pushwoosh vincula todos los dispositivos de un jugador a un único User ID, de modo que sus segmentos y journeys tratan a una persona como un solo jugador. Los eventos y las etiquetas User-specific que un dispositivo registró antes de que el jugador iniciara sesión se quedan con su ID anterior. Las etiquetas Device-specific se mueven con el dispositivo.

De forma predeterminada, Pushwoosh usa el ID de hardware (HWID) de cada dispositivo como su User ID. Así, un jugador que juega en dos dispositivos cuenta como dos jugadores. Para evitarlo con los jugadores que inician sesión, establezca su propio ID de cuenta como su User ID:

1. Elija el ID que va a usar. Tome el ID de cuenta que su juego ya asigna a cada jugador.
2. Pida a sus desarrolladores que llamen a `setUserId` con este ID cuando el jugador inicie sesión.
3. Compruebe el resultado. Inicie sesión en el juego en un dispositivo de prueba, luego abra **Audiencia** → **Explorador de usuarios**, busque por **ID de usuario** e introduzca el ID de cuenta. Se abre el perfil del jugador.

Los jugadores que nunca inician sesión conservan el HWID como su User ID, y Pushwoosh lo establece por ellos.

Para obtener más información sobre la relación entre los User IDs y los dispositivos, consulte [Usuarios (ID de Usuario)](/es/product/pushwoosh-knowledge-hub/users-userids/).

<span id="set-up-the-events-to-track" />

## Configurar los eventos que se van a rastrear

Los eventos son la forma en que Pushwoosh se entera de lo que hace un jugador. Créelos primero: los [segmentos](/es/tutorials/industry-playbooks/mobile-games/build-the-segments/) agrupan a los jugadores según los eventos que activaron, y los [journeys](/es/tutorials/industry-playbooks/mobile-games/build-the-journeys/) se inician cuando ocurre un evento.

Planifique tanto los eventos como sus atributos antes de crear nada. [Eventos recomendados para aplicaciones de juegos](/es/product/audience-data-and-segmentation/events/recommended-events-for-gaming-apps/) enumera eventos de juego listos para usar con sus atributos, y [Eventos personalizados](/es/product/audience-data-and-segmentation/events/custom-events/) explica cómo definir los suyos.

Hay dos tipos de eventos:

* [Eventos predeterminados](#default-events): registro del dispositivo, apertura de la aplicación, compra y algunos más. El SDK los envía, y usted no los crea en el Control Panel.
* [Eventos personalizados](#custom-events): nivel completado, recompensa reclamada, tienda abierta y otros. Sus desarrolladores [los envían desde el juego](#send-the-events-from-the-game), y Pushwoosh crea cada uno la primera vez que llega. Para elegir usted mismo los tipos de atributos, cree primero el evento en el Control Panel. Consulte [Eventos personalizados](/es/product/audience-data-and-segmentation/events/custom-events/) y [Eventos creados automáticamente](/es/product/audience-data-and-segmentation/events/#events-created-automatically).

<span id="default-events" />

### Eventos predeterminados

El SDK envía estos eventos por usted. Los necesita para la mayoría de los journeys de esta guía práctica: onboarding, recuperación y ofertas de compra.

* [`PW_DeviceRegistered`](/es/product/audience-data-and-segmentation/events/default-events/#pw_deviceregistered): un dispositivo recibió su primer token push. El SDK solicita el token solo cuando el juego llama a `registerForPushNotifications`, que en iOS también muestra la solicitud de permiso, y el token llega sea cual sea la respuesta del jugador. Si el juego pide el permiso más tarde que en el primer inicio, el evento se activa en ese momento, no en la instalación. Para captar a los jugadores nuevos, use en su lugar el evento `Tutorial started`.
* [`PW_ApplicationOpen`](/es/product/audience-data-and-segmentation/events/default-events/#pw_applicationopen): un jugador abrió el juego. Lo necesita para encontrar a los jugadores que siguen jugando y a los que dejaron de jugar, para poder recuperarlos.
* [`PW_InAppPurchase`](/es/product/audience-data-and-segmentation/events/default-events/#pw_inapppurchase): un jugador compró algo en el juego. Lo necesita para distinguir a los jugadores que pagan de los que no pagan, por ejemplo para ofrecer una primera compra solo a los jugadores que nunca han pagado. Sus desarrolladores activan el seguimiento de compras en el SDK de iOS o envían las compras desde el código, y en Android siempre las envían desde el código. En iOS, se activa solo para los productos configurados en App Store Connect.
* Opcional: [`PW_UserIdle`](/es/product/audience-data-and-segmentation/events/default-events/#pw_useridle): se activa cuando un jugador deja de tocar la pantalla durante el tiempo que usted establezca, de al menos 30 segundos. Inicia un journey que muestra una sugerencia in-app cuando un jugador se atasca. Sus desarrolladores lo habilitan en la configuración del SDK.
* Opcional: [`PW_ApplicationExit`](/es/product/audience-data-and-segmentation/events/default-events/#pw_applicationexit): se activa cuando un jugador sale del juego y no vuelve en un plazo de 10 a 30 segundos. Inicia un journey de recuperación para los jugadores que abandonan a mitad de un flujo. Sus desarrolladores lo habilitan en la configuración del SDK.

Un evento aparece en **Audiencia** → **Eventos** después de que el SDK lo envía por primera vez.

Para añadir antes a la lista cualquier otro evento predeterminado, por ejemplo para crear un segmento antes de que la actualización del juego esté disponible:

1. Abra **Audiencia** → **Eventos** y haga clic en **Crear evento**.
2. Elija **Evento predeterminado**.
3. Seleccione el evento y haga clic en **Activar**.

La lista del paso 3 no incluye `PW_UserIdle` ni `PW_ApplicationExit`. Aparecen en **Audiencia** → **Eventos** solo después de que el SDK los envía por primera vez.


Para obtener más información sobre estos y otros eventos predeterminados, consulte [Eventos predeterminados](/es/product/audience-data-and-segmentation/events/default-events/).

<span id="custom-events" />

### Eventos personalizados

Los eventos personalizados registran lo que ocurre en su juego, como completar un nivel. Usted elige cuáles necesita el juego, sus desarrolladores los envían y usted comprueba que llegan.

<span id="choose-the-events-to-track" />

#### Elegir los eventos que se van a rastrear

Elija los eventos que necesita su juego y los atributos que lleva cada uno, por ejemplo `level_id` para `Level completed`. La tabla ofrece ejemplos: úselos tal cual, cámbieles el nombre o añada los suyos. Rastree solo los eventos que necesitan los journeys que lance.

| Evento | Cuándo se activa | Atributos clave | Para qué sirve |
| --- | --- | --- | --- |
| [New level](/es/product/audience-data-and-segmentation/events/recommended-events-for-gaming-apps/#new-level) | El jugador alcanza un nivel nuevo | `level_id` (String) | Opcional: sus propios segmentos de hitos |
| [Level completed](/es/product/audience-data-and-segmentation/events/recommended-events-for-gaming-apps/#level-completed) | El jugador termina un nivel | `level_id` (String) | Segmentos de jugadores comprometidos que no pagan y de jugadores atascados, journey de ayuda para jugadores atascados |
| Level failed | El jugador falla un nivel | `level_id` (String) | Segmento y journey de jugadores atascados |
| Tutorial started | El jugador empieza el tutorial del juego | `tutorial_name` (String) | Journey de onboarding, segmento de abandono del tutorial |
| [Tutorial completed](/es/product/audience-data-and-segmentation/events/recommended-events-for-gaming-apps/#tutorial-completed) | El jugador termina el tutorial del juego | `tutorial_name` (String), `completion` (Boolean) | Journey de onboarding, flujo de permiso push |
| [Virtual currency earned](/es/product/audience-data-and-segmentation/events/recommended-events-for-gaming-apps/#virtual-currency-earned) | Aumenta el saldo de moneda del juego del jugador | `currency_name` (String), `quantity` (Integer) | Opcional: sus propios segmentos basados en la moneda |
| [Achievement unlocked](/es/product/audience-data-and-segmentation/events/recommended-events-for-gaming-apps/#achievement-unlocked) | El jugador desbloquea un logro | `achievement_name` (String), `level` (Integer) | Segmento de cazadores de logros |
| Daily reward claimed | El jugador reclama la recompensa diaria | `day_number` (Integer) | Journey de recordatorio de la recompensa diaria |
| Live event joined | El jugador se une a un evento en vivo | `event_id` (String) | Objetivo de conversión del journey del evento en vivo |
| Store opened | El jugador abre la tienda del juego | `section` (String) | Journey de abandono de la tienda |

<Aside type="tip" title="¿Su juego no tiene tutorial?">
Use sus propios eventos para las dos primeras acciones que realiza cada jugador nuevo, como empezar y terminar el primer nivel, en lugar de `Tutorial started` y `Tutorial completed` dondequiera que esta guía práctica los mencione.

* El primer evento inicia el journey de onboarding, y el segundo le indica que el jugador ha terminado. Omita la condición `completion` que acompaña a `Tutorial completed`.
* Los SDK no envían ningún evento propio de primer inicio, así que ambos tienen que ser eventos personalizados que envíe su juego.
</Aside>

<span id="send-the-events-from-the-game" />

#### Enviar los eventos desde el juego

<Aside type="caution" icon="setting" title="Se necesita la ayuda de un desarrollador">
Enviar eventos es un cambio en el código de su juego. Comparta [Eventos para desarrolladores](/es/developer/guides/audience-and-segmentation/events/) y los [ejemplos de eventos de juegos](/es/developer/guides/audience-and-segmentation/events/custom-events-examples#gaming-apps) con sus desarrolladores. Envían cada evento con `postEvent` en el momento en que ocurre la acción. Las compras y la entrega de recompensas deben llegar desde el servidor del juego con el `userId` del jugador.
</Aside>

Acuerde con sus desarrolladores qué eventos envía el juego y qué atributos lleva cada uno. Los nombres de los eventos y de los atributos deben coincidir exactamente.

Por ejemplo, así es como el juego envía `Level completed` con su atributo `level_id`:

<Tabs>
<TabItem label="Android">
```java
TagsBundle attributes = new TagsBundle.Builder()
    .putString("level_id", "12")
    .build();

InAppManager.getInstance().postEvent("Level completed", attributes);
```
</TabItem>
<TabItem label="iOS">
```swift
PWInAppManager.shared().postEvent("Level completed", withAttributes: ["level_id": "12"])
```
</TabItem>
</Tabs>

Si un evento ocurre en un servidor que ya envía sus propios webhooks, como el backend de su juego o un servicio de torneos, puede llegar a Pushwoosh a través de un [webhook entrante](/es/product/integrations/inbound-webhook/) en lugar de `postEvent`. Usted asigna los campos que envía a un evento de Pushwoosh en el Control Panel, y el evento puede iniciar un journey como cualquier otro.

Para comprobar que un evento ha llegado, abra **Audiencia** → **Explorador de usuarios**, busque un jugador de prueba y abra la pestaña **Historial de eventos**.


<span id="track-revenue-as-pw_conversion" />

### Rastrear los ingresos como PW_Conversion

`PW_Conversion` registra el importe y la moneda de cada compra en un único formato. Lo necesita para un objetivo de ingresos en los journeys y para los niveles de gasto en la [segmentación RFM](/es/product/audience-data-and-segmentation/segmentation/rfm-segmentation/), que agrupa a los jugadores según cuán recientemente, con qué frecuencia y cuánto compran.

Las compras que rastrea el SDK de iOS llegan a `PW_Conversion` por sí solas, porque llevan los atributos `__amount` y `__currency`. Las compras de Android necesitan una de estas opciones:

* Si su juego funciona tanto en iOS como en Android, pida a sus desarrolladores que envíen las compras de Android como `PW_InAppPurchase` con los atributos numéricos `__amount` y `__currency` mediante `postEvent`, en lugar del método de compra del SDK. Así, la misma asignación automática cubre ambas plataformas.
* Si su juego funciona solo en Android, asigne usted mismo las compras, sin código nuevo. Un evento conserva una sola asignación, por lo que en un juego con compras de iOS una asignación manual reemplazaría la automática.

Para asignar usted mismo las compras:

1. Abra **Audiencia** → **Eventos** y abra la configuración de eventos de conversión.
2. Añada `PW_InAppPurchase` como evento de conversión.
3. Seleccione los atributos que contienen su **Precio** y su **Moneda**.
4. Haga clic en **Aplicar**.

<Aside type="caution">
Use una sola vía por transacción. Si su código también envía `PW_Conversion` para la misma compra, Pushwoosh registra dos eventos de conversión distintos.
</Aside>

Para ver todas las opciones de configuración, consulte [Eventos de conversión](/es/product/audience-data-and-segmentation/events/conversion-events/).

<span id="track-subscriptions-from-the-stores" />

### Rastrear las suscripciones desde las tiendas

Si su juego vende suscripciones, como un pase VIP o un pase de batalla, Pushwoosh recibe sus cambios de estado desde la App Store y Google Play. Cada cambio llega como un evento `PW_Subscription*`, por ejemplo:

* `PW_SubscriptionStart`: un jugador se suscribe.
* `PW_SubscriptionCancel`: un jugador desactiva la renovación automática.
* `PW_SubscriptionBillingIssue`: falla un pago de renovación.

Use estos eventos para iniciar journeys, por ejemplo un recordatorio antes de que caduque un pase cancelado.

<Aside type="caution" icon="setting" title="Se necesita la ayuda de un desarrollador">
El juego debe pasar el HWID de Pushwoosh del jugador con cada compra:

* En iOS, como `appAccountToken`.
* En Android, como `obfuscatedAccountId`. El juego pasa el valor de `getSubscriptionAccountId()` del SDK, que es el Application Code y el HWID juntos, no solo el HWID.

Sin él, Pushwoosh recibe la notificación pero no registra ningún evento, y las suscripciones compradas antes no se pueden asociar más adelante. Comparta [Seguimiento de suscripciones de la App Store](/es/product/integrations/app-store-subscription-tracking/) y [Seguimiento de suscripciones de Google Play](/es/product/integrations/google-play-subscription-tracking/) con sus desarrolladores.
</Aside>

Los eventos cubren solo las suscripciones. Las compras únicas, como un paquete de monedas, siguen llegando como `PW_InAppPurchase`.

<span id="store-player-data-in-tags" />

## Guardar los datos de los jugadores en etiquetas

Una [etiqueta](/es/product/audience-data-and-segmentation/user-data-tags/) es un valor que Pushwoosh guarda en el perfil de un jugador, como su nivel o si ha pagado. Un evento registra lo que ocurrió, y una etiqueta guarda el estado actual. Las etiquetas le ayudan a:

* Enviar un mensaje solo a los jugadores con un valor determinado, por ejemplo una oferta solo a los jugadores que pagan.
* Insertar el valor en el texto del mensaje, por ejemplo el nivel del jugador. Consulte [Crear los journeys](/es/tutorials/industry-playbooks/mobile-games/build-the-journeys/).

Las etiquetas son opcionales. Los journeys de esta guía práctica funcionan con eventos y con etiquetas predeterminadas que Pushwoosh establece por sí mismo, así que al principio puede prescindir de sus propias etiquetas. Añádalas cuando quiera más formas de agrupar a los jugadores. Consulte [Segmentos por etiquetas](/es/tutorials/industry-playbooks/mobile-games/build-the-segments/#segments-by-tags).

### Sus propias etiquetas

Sus desarrolladores envían los valores de las etiquetas desde el juego, o usted puede [importarlos desde un archivo CSV](/es/product/audience-data-and-segmentation/user-data-tags/update-tags-via-csv/). Pushwoosh crea una etiqueta la primera vez que sus desarrolladores la envían, como etiqueta User-specific. Cree primero la etiqueta en el Control Panel si quiere elegir usted mismo su tipo. Consulte [Gestionar datos de usuario con etiquetas](/es/product/audience-data-and-segmentation/user-data-tags/tags/).

Estas etiquetas son ejemplos. Cámbieles el nombre para que coincidan con el vocabulario de su juego y añada las suyas:

| Etiqueta | Tipo | Ejemplo | Para qué sirve |
| --- | --- | --- | --- |
| `player_level` | Integer | `12` | Filtrar mensajes por nivel de progreso |
| `is_paying_user` | Boolean | `true` | Separar los mensajes para jugadores que pagan y que no pagan |
| `soft_currency_balance` | Integer | `1500` | Ofrecer un paquete de moneda a los jugadores con saldo bajo |
| `vip_tier` | String | `gold` | Dar a los jugadores VIP sus propias ofertas y acceso anticipado |
| `favorite_mode` | String | `pvp` | Anunciar eventos en vivo para el modo que le gusta al jugador |

Cuando cree una etiqueta en el Control Panel, mantenga activada la opción [**Específico del usuario**](/es/product/audience-data-and-segmentation/user-data-tags/tags/#tag-scope-general-vs-user-specific), como está de forma predeterminada. Así, Pushwoosh guarda un valor por User ID, de modo que el valor pertenece al jugador y no a uno de sus dispositivos. Con **Específico del usuario** desactivado, cada dispositivo guarda su propio valor. Consulte [Identificar a los jugadores por User ID](/es/tutorials/industry-playbooks/mobile-games/collect-player-data/#identify-players-by-user-id).

### Etiquetas predeterminadas

Pushwoosh guarda estas [etiquetas predeterminadas](/es/product/audience-data-and-segmentation/user-data-tags/tags/#default-tags) para cada dispositivo, así que usted no las crea:

* **Language**: el idioma del dispositivo. Pushwoosh lo usa para enviar a cada jugador el mensaje en su propio idioma.
* **Last Application Open**: cuándo se abrió el juego por última vez en el dispositivo. Úsela para encontrar a los jugadores que dejaron de jugar.
* **Push Alerts Enabled**: si las notificaciones están permitidas en la configuración del dispositivo. Úsela para mostrar un mensaje in-app solo a los jugadores que todavía no las han permitido.
* **First Install**: cuándo se instaló el juego por primera vez en el dispositivo. Úsela para los aniversarios de instalación.
* **Country**: el país del dispositivo. Úsela para enviar una oferta o un anuncio de evento en vivo solo a los jugadores de una región.