# Seguimiento de suscripciones de Google Play

<Aside type="caution" icon="setting" title="Se necesita la ayuda de un desarrollador">
Necesitará la ayuda de su equipo de desarrollo para configurar esta integración. Por favor, comparta esta guía con ellos.
</Aside>

## Resumen de la integración

Las [Notificaciones para desarrolladores en tiempo real (RTDN)](https://developer.android.com/google/play/billing/rtdn-reference) son el servicio de servidor a servidor de Google Play que envía un mensaje en tiempo real cada vez que cambia el estado de una suscripción.

Al conectar las RTDN de Google Play a Pushwoosh, puede reaccionar a todo el ciclo de vida de la suscripción, incluyendo compras, renovaciones, cancelaciones, problemas de facturación, vencimientos y reembolsos, sin necesidad de construir su propia infraestructura de backend. Cada vez que el estado de una suscripción cambia en la cuenta de Google Play de un usuario, Google notifica a Pushwoosh, y Pushwoosh activa el evento [`PW_Subscription*`](#tracked-events) correspondiente en el perfil del usuario.

<Aside type="note">
Esta integración es compatible con las **suscripciones de Android** (RTDN de Google Play). Para realizar un seguimiento de las suscripciones de iOS, consulte [seguimiento de suscripciones de la App Store](/es/product/integrations/app-store-subscription-tracking/).
</Aside>

### Tipo de integración

**Fuente:** Las Notificaciones para desarrolladores en tiempo real se envían desde Google Play a Pushwoosh.

### Eventos rastreados

Pushwoosh asigna cada notificación de Google Play compatible a un conjunto de eventos unificado `PW_Subscription*`, para que pueda activar campañas en cualquier etapa del ciclo de vida de la suscripción.

| Evento | Se activa cuando |
| ----- | ---------- |
| `PW_SubscriptionStart` | Un usuario compra la suscripción por primera vez. |
| `PW_SubscriptionRenew` | La suscripción se renueva automáticamente para un nuevo período de facturación. |
| `PW_SubscriptionCancel` | Un usuario desactiva la renovación automática. La suscripción permanece activa hasta que expira. |
| `PW_SubscriptionResume` | Un usuario reinicia la suscripción antes de que caduque. |
| `PW_SubscriptionBillingIssue` | Falla un pago de renovación y la suscripción entra en su período de gracia. |
| `PW_SubscriptionRecovered` | Una renovación que había fallado previamente se procesa y la suscripción vuelve a estar activa. |
| `PW_SubscriptionExpired` | La suscripción ha caducado por completo y ya no está activa. |
| `PW_SubscriptionRefund` | Google Play revoca la suscripción (por ejemplo, después de un reembolso). |

Cada evento lleva los mismos atributos:

- **productID:** el identificador de producto de Google Play de la suscripción.
- **expiresAt:** cuándo finaliza el período de pago actual, como una marca de tiempo Unix en segundos. Se incluye cuando Google lo proporciona.

<details>

<summary>Cómo se asignan los eventos a las Notificaciones para desarrolladores en tiempo real</summary>

Para los desarrolladores que verifican la integración, cada evento de Pushwoosh corresponde a estos valores de `notificationType` de RTDN:

| Evento de Pushwoosh | `notificationType` de RTDN |
| --------------- | ----------------------- |
| `PW_SubscriptionStart` | `SUBSCRIPTION_PURCHASED` (4) |
| `PW_SubscriptionRenew` | `SUBSCRIPTION_RENEWED` (2) |
| `PW_SubscriptionCancel` | `SUBSCRIPTION_CANCELED` (3) |
| `PW_SubscriptionResume` | `SUBSCRIPTION_RESTARTED` (7) |
| `PW_SubscriptionBillingIssue` | `SUBSCRIPTION_IN_GRACE_PERIOD` (6) |
| `PW_SubscriptionRecovered` | `SUBSCRIPTION_RECOVERED` (1) |
| `PW_SubscriptionExpired` | `SUBSCRIPTION_EXPIRED` (13) |
| `PW_SubscriptionRefund` | `SUBSCRIPTION_REVOKED` (12) |

Otros tipos de notificación, como en espera, cambios de precio, aplazamientos y pausas, se reconocen pero no publican un evento.

</details>

### Cómo funciona

Una notificación de Google Play no lleva ningún identificador de Pushwoosh. Solo incluye un token de compra y el `packageName` de la aplicación. Por lo tanto, su aplicación etiqueta cada compra con el identificador que Pushwoosh necesita, y Pushwoosh lo lee de la compra cada vez que llega una notificación.

1. El estado de una suscripción cambia en la cuenta de Google Play de un usuario (una compra, renovación, cancelación, etc.).
2. Google Play publica un mensaje RTDN en el tema compartido de Pushwoosh.
3. Pushwoosh lee el `obfuscatedAccountId` de la compra, que su aplicación estableció como `<AppCode>:<hwid>` en el momento de la compra.
4. Pushwoosh resuelve el dispositivo cuyo HWID coincide, encuentra el usuario vinculado a él y publica el evento `PW_Subscription*` correspondiente para ese usuario.

<Aside type="caution" title="Importante">
La coincidencia entre una compra de Google Play y un usuario de Pushwoosh se basa en el `obfuscatedAccountId`. Si su aplicación no establece este valor en el momento de la compra, Pushwoosh recibe la notificación pero **no se publica ningún evento**. Se establece en el momento de la compra y **no se puede rellenar retroactivamente** para las suscripciones existentes. Consulte [cómo establecer el identificador de la cuenta en el momento de la compra](#set-the-account-identifier-at-purchase).
</Aside>

### Casos de uso

**Recuperar suscriptores que abandonan:** Desactivar la renovación automática no finaliza el acceso de inmediato. La suscripción permanece activa hasta que finaliza el período de pago, y esa es su ventana para recuperar al usuario. En `PW_SubscriptionCancel`, inicie un [Customer Journey](/es/product/customer-journey/pushwoosh-journey-overview/) con una notificación push de retención, un [correo electrónico](/es/product/messaging-channels/emails/) sobre las funciones que perderían, o un [mensaje in-app](/es/product/messaging-channels/in-apps/) con un descuento de renovación antes de que caduque el acceso.

**Incorporar a nuevos suscriptores:** Active una serie de bienvenida en `PW_SubscriptionStart` para ayudar a los usuarios a obtener valor de su plan desde el principio y preparar el terreno para la renovación.

**Rescatar pagos fallidos:** Cuando se activa `PW_SubscriptionBillingIssue`, un pago de renovación no se ha procesado y la suscripción está en su período de gracia. Pida al usuario que actualice su método de pago antes de que pierda el acceso, y haga un seguimiento con `PW_SubscriptionRecovered` para confirmar una vez que se haya resuelto.

**Volver a atraer a usuarios inactivos:** Inicie una campaña de reactivación en `PW_SubscriptionExpired` con una oferta para clientes que regresan para los suscriptores que han abandonado por completo.

## Configuración de la integración

Antes de comenzar, asegúrese de tener una aplicación de Pushwoosh con [FCM configurado](/es/developer/pushwoosh-sdk/android-sdk/firebase-integration/integrate-pushwoosh-android-sdk/) (ya requerido para las notificaciones push), una aplicación de Google Play con una suscripción y acceso de administrador a la Play Console.

### Establecer el identificador de la cuenta en el momento de la compra

Pushwoosh identifica al usuario correcto a partir del **HWID** del dispositivo, combinado con su **Código de aplicación**. El SDK de Android de Pushwoosh expone un ayudante, `getSubscriptionAccountId()`, que devuelve este valor ya formateado como `<AppCode>:<hwid>`. Páselo a `BillingFlowParams.setObfuscatedAccountId()` cuando inicie el flujo de facturación de Google Play.

<Tabs>
<TabItem label="Kotlin">
```kotlin
val billingParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(productDetailsParamsList)
    // Etiquete la compra con el identificador de cuenta de Pushwoosh "<AppCode>:<hwid>"
    .setObfuscatedAccountId(Pushwoosh.getInstance().subscriptionAccountId)
    .build()

billingClient.launchBillingFlow(activity, billingParams)
```
</TabItem>
<TabItem label="Java">
```java
BillingFlowParams billingParams = BillingFlowParams.newBuilder()
        .setProductDetailsParamsList(productDetailsParamsList)
        // Etiquete la compra con el identificador de cuenta de Pushwoosh "<AppCode>:<hwid>"
        .setObfuscatedAccountId(Pushwoosh.getInstance().getSubscriptionAccountId())
        .build();

billingClient.launchBillingFlow(activity, billingParams);
```
</TabItem>
</Tabs>

<Aside type="note">
Llame a `getSubscriptionAccountId()` después de que se inicialice el SDK. Devuelve una cadena vacía si el Código de aplicación o el HWID aún no están disponibles. Google limita el ID de cuenta ofuscado a 64 caracteres. El valor `<AppCode>:<hwid>` de Pushwoosh se mantiene dentro de ese límite.
</Aside>

<Aside type="caution">
Si su aplicación anula el HWID de Pushwoosh con un valor personalizado, `getSubscriptionAccountId()` lo refleja automáticamente. No construya el identificador a mano. Utilice siempre el ayudante para que el valor coincida con el HWID del dispositivo en Pushwoosh, o el evento no podrá ser atribuido.
</Aside>

### Apuntar las Notificaciones para desarrolladores en tiempo real a Pushwoosh

1. En la [Google Play Console](https://play.google.com/console/), vaya a **Monetizar → Configuración de la monetización**.
2. Busque **Notificaciones para desarrolladores en tiempo real** y establezca el **Nombre del tema** en:

```
projects/pw-playstore-subscriptions/topics/play-rtdn
```

3. Haga clic en **Guardar**. El permiso de publicación ya está concedido al servicio de notificaciones de Google, por lo que no hay nada más que configurar aquí.

### Conceder acceso a la cuenta de servicio de Pushwoosh

1. En la Google Play Console, vaya a **Usuarios y permisos → Invitar a un nuevo usuario**.
2. Introduzca el correo electrónico de la cuenta de servicio de Pushwoosh:

```
play-api@pw-playstore-subscriptions.iam.gserviceaccount.com
```

3. En **Permisos de la aplicación**, añada su aplicación y conceda **Ver datos financieros, pedidos y respuestas a encuestas de cancelación** (además del permiso de información de la aplicación de solo lectura).
4. Haga clic en **Guardar**. Una cuenta de servicio no necesita aceptar la invitación. El acceso se activa inmediatamente.

### Confirmar los eventos en Pushwoosh

Pushwoosh registra cada evento `PW_Subscription*` en su proyecto la primera vez que ocurre, con los atributos `productID` y `expiresAt`. Después de una prueba, abra **Audiencia → Eventos** para verificar que los eventos aparecen. A continuación, estarán listos para la segmentación, las estadísticas y los Customer Journeys.

### Cree su campaña

Cree un [Customer Journey](/es/product/customer-journey/pushwoosh-journey-overview/) con una [entrada basada en un activador](/es/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) en cualquier evento `PW_Subscription*`, por ejemplo `PW_SubscriptionCancel` para la recuperación o `PW_SubscriptionStart` para la incorporación, y añada los mensajes que desea enviar.

## Pruebas

Para verificar la integración de extremo a extremo:

1. En la Google Play Console, abra **Configuración de la monetización** y haga clic en **Enviar notificación de prueba**. Debería informar de que se ha realizado con éxito, confirmando que el tema está conectado correctamente.
2. Realice una compra de suscripción con el identificador de cuenta establecido como se ha descrito anteriormente (esto activa `PW_SubscriptionStart`), y luego cancélela desde **Play Store → Suscripciones → Cancelar** (esto activa `PW_SubscriptionCancel`).
3. En el Panel de Control de Pushwoosh, abra el perfil de usuario y vaya al [Historial de eventos](/es/product/audience-data-and-segmentation/user-explorer/#events-history-tab).
4. Confirme que los eventos aparecen en unos instantes.