---
title: "Amplitude"
description: "Integra Amplitude con Adapty para obtener mejores insights sobre el comportamiento de los usuarios."
---

[Amplitude](https://amplitude.com/) es un potente servicio de analítica para móviles. Con Adapty, puedes enviar eventos a Amplitude fácilmente, ver cómo se comportan los usuarios y tomar decisiones inteligentes.

Adapty ofrece un conjunto completo de datos que te permite rastrear [eventos de suscripción](events) desde los stores en un solo lugar y enviarlos a tu cuenta de Amplitude. Esto te permite correlacionar el comportamiento de tus usuarios con su historial de pagos en Amplitude, y basar tus decisiones de producto en datos reales.

### Cómo configurar la integración con Amplitude \{#how-to-set-up-amplitude-integration\}

En Adapty puedes configurar flujos separados para **eventos de producción** y **de prueba** provenientes del entorno sandbox de Apple o Stripe, o de una cuenta de prueba de Google.

- Para eventos de producción, introduce las claves API de **Production** desde el dashboard de Amplitude, con una clave API única para cada plataforma: iOS, Android y Stripe.
- Para eventos de prueba, usa los campos de **Sandbox** según sea necesario.

Para configurar la integración con Amplitude:

1. Abre [**Integrations** -> **Amplitude**](https://app.adapty.io/integrations/amplitude) en tu Adapty Dashboard.

  <img src="/assets/shared/img/3b50552-CleanShot_2023-08-15_at_16.47.102x.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

2. Activa **Amplitude integration** para habilitarla.

3. Rellena los campos de la integración:

    | Campo                                      | Descripción                                                  |
    | ------------------------------------------ | ------------------------------------------------------------ |
    | **Amplitude iOS/ Android/ Stripe API key** | Introduce la **API Key** de Amplitude para iOS/ Android/ Stripe en Adapty. Encuéntrala en **Project settings** dentro de Amplitude. Para más ayuda, consulta la [documentación de Amplitude](https://amplitude.com/docs/apis/authentication). Comienza con las claves de **Sandbox** para pruebas y luego cambia a las claves de **Production** tras pruebas exitosas. |

    
      <img src="/assets/shared/img/2297782-CleanShot_2023-08-15_at_16.53.512x.webp"
      style={{
        border: '1px solid #727272', /* border width and color */
        width: '700px', /* image width */
        display: 'block', /* for alignment */
        margin: '0 auto' /* center alignment */
      }}
    />
    

4. Ajustes opcionales para mayor personalización:

   | Parámetro                               | Descripción                                                  |
   | --------------------------------------- | ------------------------------------------------------------ |
   | **How the revenue data should be sent** | Elige si enviar los ingresos brutos o los ingresos después de impuestos y comisiones. Consulta [Comisión del store e impuestos](controls-filters-grouping-compare-proceeds#display-gross-or-net-revenue) para más detalles. |
   | **Exclude historical events**           | Elige excluir los eventos anteriores a la instalación del SDK de Adapty para evitar datos duplicados. Por ejemplo, si un usuario se suscribió el 10 de enero pero instaló el SDK de Adapty el 6 de marzo, Adapty solo enviará eventos a partir del 6 de marzo. |
   | **Send User Attributes**                | Selecciona esta opción para enviar atributos específicos del usuario, como preferencias de idioma. |
   | **Always populate user_id**             | Adapty envía automáticamente `device_id` como `amplitudeDeviceId`. Para `user_id`, esta configuración define el comportamiento: <ul><li>**ON**: Envía el `profile_id` de Adapty si `amplitudeUserId` o `customer_user_id` no están disponibles.</li><li>**OFF**: Deja `user_id` vacío si ninguno de los IDs está disponible.</li></ul> |

5. Elige los eventos que deseas recibir y [asigna sus nombres](amplitude#events-and-tags).

6. Haz clic en **Save** para confirmar los cambios.

Una vez que hagas clic en **Save**, Adapty comenzará a enviar eventos a Amplitude.

Además de los eventos, Adapty envía el [estado de la suscripción](subscription-status) y el ID del producto de suscripción a las [propiedades de usuario de Amplitude](https://amplitude.com/docs/data/user-properties-and-events).

### Eventos y etiquetas \{#events-and-tags\}

Debajo de las credenciales encontrarás tres grupos de eventos que puedes enviar a Amplitude desde Adapty. Simplemente activa los que necesites. Consulta la lista completa de eventos disponibles en Adapty [aquí](events).

  <img src="/assets/shared/img/da67694-CleanShot_2023-08-15_at_16.52.352x.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

Recomendamos usar los nombres de eventos predeterminados que proporciona Adapty. No obstante, puedes cambiarlos según tus necesidades. Adapty enviará los eventos de suscripción a Amplitude mediante una integración servidor a servidor, lo que te permitirá ver todos los eventos de suscripción en tu dashboard de Amplitude.

### Configuración del SDK \{#sdk-configuration\}

Usa el método `setIntegrationIdentifier()` para establecer el parámetro `amplitude_device_id`. Es imprescindible configurarlo para que la integración funcione.

Si tienes registro de usuarios, también puedes pasar `amplitude_user_id`.

---
no_index: true
---
import Callout from '../../../components/Callout.astro';

<Callout type="note">
Si usas un ID de usuario de terceros como Customer User ID, no lo pases durante `activate()` — es posible que el SDK de terceros aún no lo haya generado. En su lugar, llama primero a `activate()` sin CUID, luego a `setIntegrationIdentifier()`, y después a `identify()` con el CUID.
</Callout>

<Tabs groupId="current-os" queryString>
<TabItem value="Swift" label="iOS (Swift)" default>

**Configurar amplitudeDeviceId**

```swift showLineNumbers

do {
    try await Adapty.setIntegrationIdentifier(
        key: "amplitude_device_id", 
        value: Amplitude.instance().deviceId
    )
} catch {
    // handle the error
}
```

**Configurar amplitudeUserId**

```swift showLineNumbers

do {
    try await Adapty.setIntegrationIdentifier(
        key: "amplitude_user_id", 
        value: "YOUR_AMPLITUDE_USER_ID"
    )
} catch {
    // handle the error
}
```

</TabItem>
<TabItem value="kotlin" label="Android (Kotlin)" default>

**Configurar amplitudeDeviceId**

```kotlin showLineNumbers 
//for Amplitude maintenance SDK (obsolete)
val amplitude = Amplitude.getInstance()
val amplitudeDeviceId = amplitude.getDeviceId()
val amplitudeUserId = amplitude.getUserId()

//for actual Amplitude Kotlin SDK
val amplitude = Amplitude(
    Configuration(
        apiKey = AMPLITUDE_API_KEY,
        context = applicationContext
    )
)
val amplitudeDeviceId = amplitude.store.deviceId

//

Adapty.setIntegrationIdentifier("amplitude_device_id", amplitudeDeviceId) { error ->
    if (error != null) {
        // handle the error
    }
}
```

**Configurar amplitudeUserId**

```kotlin showLineNumbers
//for Amplitude maintenance SDK (obsolete)
val amplitude = Amplitude.getInstance()
val amplitudeDeviceId = amplitude.getDeviceId()
val amplitudeUserId = amplitude.getUserId()

//for actual Amplitude Kotlin SDK
val amplitude = Amplitude(
    Configuration(
        apiKey = AMPLITUDE_API_KEY,
        context = applicationContext
    )
)
val amplitudeUserId = amplitude.store.userId

//

Adapty.setIntegrationIdentifier("amplitude_user_id", amplitudeUserId) { error ->
    if (error != null) {
        // handle the error
    }
}
```

</TabItem>
<TabItem value="Flutter" label="Flutter (Dart)" default>

**Configurar amplitudeDeviceId**

```javascript showLineNumbers

final Amplitude amplitude = Amplitude.getInstance(instanceName: "YOUR_INSTANCE_NAME");

try {
    await Adapty().setIntegrationIdentifier(
        key: "amplitude_device_id", 
        value: amplitude.getDeviceId(),
    );
} on AdaptyError catch (adaptyError) {
    // handle the error
} catch (e) {
    // handle the error
}
```

**Configurar amplitudeUserId**

```javascript showLineNumbers

final Amplitude amplitude = Amplitude.getInstance(instanceName: "YOUR_INSTANCE_NAME");

try {
    await Adapty().setIntegrationIdentifier(
        key: "amplitude_user_id", 
        value: "YOUR_AMPLITUDE_USER_ID",
    );
} on AdaptyError catch (adaptyError) {
    // handle the error
} catch (e) {
    // handle the error
}
```

</TabItem>
<TabItem value="Unity" label="Unity (C#)" default>

**Configurar amplitudeDeviceId**

```csharp showLineNumbers
using AdaptySDK;

Adapty.SetIntegrationIdentifier(
  "amplitude_device_id", 
  amplitude.getDeviceId(), 
  (error) => {
  // handle the error
});
```

**Configurar amplitudeUserId**

```csharp showLineNumbers
using AdaptySDK;

Adapty.SetIntegrationIdentifier(
  "amplitude_user_id", 
  "YOUR_AMPLITUDE_USER_ID", 
  (error) => {
  // handle the error
});
```

</TabItem>
<TabItem value="rn" label="React Native (TS)" default>

**Configurar amplitudeDeviceId**

```typescript showLineNumbers

try {
  await adapty.setIntegrationIdentifier("amplitude_device_id", deviceId);
} catch (error) {
  // handle `AdaptyError`
}
```

**Configurar amplitudeUserId**

```typescript showLineNumbers

try {
  await adapty.setIntegrationIdentifier("amplitude_user_id", userId);
} catch (error) {
  // handle `AdaptyError`
}
```

</TabItem>
</Tabs>

## Estructura del evento de Amplitude \{#amplitude-event-structure\}

Adapty envía eventos a Amplitude a través de la HTTP API v2. Cada evento tiene la siguiente estructura:

```json
{
  "api_key": "your_amplitude_api_key",
  "events": [
    {
      "partner_id": "adapty",
      "event_type": "subscription_renewed",
      "time": 1709294400000,
      "insert_id": "123e4567-e89b-12d3-a456-426614174000",
      "user_id": "user_12345",
      "device_id": "device_12345",
      "platform": "iOS",
      "os_name": "iOS",
      "productId": "yearly.premium.6999",
      "revenue": 9.99,
      "event_properties": {
        "vendor_product_id": "yearly.premium.6999",
        "original_transaction_id": "GPA.3383...",
        "currency": "USD",
        "environment": "Production",
        "store": "app_store"
      },
      "user_properties": {
        "subscription_state": "subscribed",
        "subscription_product": "yearly.premium.6999"
      }
    }
  ]
}
```

Donde:

| Parámetro                   | Tipo   | Descripción                                                          |
|:----------------------------|:-------|:---------------------------------------------------------------------|
| `api_key`                   | String | Tu clave API de Amplitude.                                           |
| `events`                    | Array  | Lista de objetos de evento (Adapty envía uno a la vez).              |
| `events[].partner_id`       | String | Siempre "adapty".                                                    |
| `events[].event_type`       | String | El nombre del evento (mapeado desde el evento de Adapty).            |
| `events[].time`             | Long   | Marca de tiempo del evento en milisegundos.                          |
| `events[].insert_id`        | String | ID único del evento (UUID).                                          |
| `events[].user_id`          | String | ID de usuario de Amplitude o ID de usuario del cliente.              |
| `events[].device_id`        | String | ID del dispositivo en Amplitude.                                     |
| `events[].platform`         | String | Plataforma (p. ej., "iOS", "Android").                               |
| `events[].os_name`          | String | Nombre del sistema operativo.                                        |
| `events[].productId`        | String | El ID del producto en el store.                                      |
| `events[].revenue`          | Float  | Importe de los ingresos.                                             |
| `events[].event_properties` | Object | Atributos detallados del evento (contiene todos los [campos de evento](webhook-event-types-and-fields#for-most-event-types) disponibles). |
| `events[].user_properties`  | Object | Atributos del usuario, como el estado de la suscripción.             |