---
title: "AppMetrica"
description: "Integra AppMetrica con Adapty para un análisis detallado de suscripciones."
---

[AppMetrica](https://appmetrica.yandex.com/about) es una herramienta de análisis gratuita que te ayuda a rastrear el comportamiento de los usuarios y analizar el rendimiento de tu app móvil en tiempo real. Al integrar AppMetrica con Adapty, puedes obtener información más detallada sobre tus métricas de suscripción y la interacción de los usuarios.

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

La configuración de la integración con AppMetrica consta de dos pasos principales:

1. Configurar la integración en el Adapty Dashboard
2. Configurar la integración en el código de tu app

### Configuración en el dashboard \{#dashboard-configuration\}

Para configurar la integración con AppMetrica:

1. Abre la [lista de apps de AppMetrica](https://appmetrica.yandex.ru/application/list)
2. Selecciona la app que quieres rastrear
3. Ve a **Settings > Main** y copia el **Application ID** y la **Post API key**

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

4. Ve a [Integrations > AppMetrica](https://app.adapty.io/integrations/appmetrica) en el Adapty Dashboard
5. Pega tus credenciales de AppMetrica.

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

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

Adapty te permite enviar tres grupos de eventos a AppMetrica. Puedes habilitar los eventos que necesitas para rastrear el rendimiento de tu app. Para ver la lista completa de eventos disponibles, consulta nuestra [documentación de eventos](events).

:::note
AppMetrica sincroniza los eventos cada 4 horas, por lo que puede haber un retraso antes de que los eventos aparezcan en tu dashboard.
:::

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

:::tip
Recomendamos usar los nombres de eventos predeterminados de Adapty para mantener la coherencia, aunque puedes personalizarlos para que coincidan con tu configuración de análisis existente.
:::

### Configuración de ingresos \{#revenue-settings\}

De forma predeterminada, Adapty envía los datos de ingresos como propiedades en los eventos, que aparecen en el informe de Events de AppMetrica. Puedes configurar cómo se calculan y muestran estos datos:

- **Revenue calculation**: Elige cómo se calculan los valores de ingresos para que coincidan con tus necesidades de informes financieros:
  - **Gross revenue**: Muestra los ingresos totales antes de cualquier deducción, útil para rastrear el importe completo que pagan los clientes
  - **Proceeds after store commission**: Muestra los ingresos después de deducir las comisiones de App Store/Play Store, lo que te ayuda a rastrear los ingresos reales
  - **Proceeds after store commission and taxes**: Muestra los ingresos netos después de las comisiones del store y los impuestos aplicables, lo que ofrece la imagen más precisa de tus ganancias

- **Report user's currency**: Cuando está habilitado, las ventas se informan en la moneda local del usuario, lo que facilita el análisis de ingresos por región. Cuando está deshabilitado, todas las ventas se convierten a USD para mantener informes coherentes en diferentes mercados.

- **Send revenue events**: Habilita esta opción para que los datos de ingresos aparezcan no solo en el informe de Events, sino también en el informe [In-app and ad revenue](https://appmetrica.yandex.com/docs/en/mobile-reports/revenue-report) de AppMetrica. Asegúrate de no enviar ingresos desde ningún otro lugar, ya que esto podría generar duplicados.

- **Exclude historical events**: Cuando está habilitado, Adapty no enviará eventos que ocurrieron antes de que el usuario instalara la app con el SDK de Adapty. Esto ayuda a evitar la duplicación de datos si ya estabas enviando eventos a analytics antes de integrar Adapty.

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

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

Para habilitar la integración con AppMetrica en tu app, necesitas configurar dos identificadores:

1. `appmetrica_device_id`: Necesario para la integración básica
2. `appmetrica_profile_id`: Opcional, pero recomendado si tu app tiene registro de usuarios

Usa el método `setIntegrationIdentifier()` para establecer estos valores. A continuación se muestra cómo implementarlo en cada plataforma:

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

**Setting appmetrica_device_id**

```swift showLineNumbers
AppMetrica.requestStartupIdentifiers(on: nil) { ids, error in
  if let error {
    // handle AppMetrica error    
    return
  }

  guard let deviceIDHash = ids?[.deviceIDHashKey] as? String else {
    // handle AppMetrica error
    return
  }

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

**Setting appmetrica_profile_id**

```swift showLineNumbers
do {
  try await Adapty.setIntegrationIdentifier(
    key: "appmetrica_profile_id",
    value: "YOUR_APPMETRICA_PROFILE_ID"
  )
} catch {
  // handle the error
}
```
</TabItem>
<TabItem value="kotlin" label="Android (Kotlin)" default>

**Setting appmetrica_device_id**

```kotlin showLineNumbers 
val startupParamsCallback = object: StartupParamsCallback {
    override fun onReceive(result: StartupParamsCallback.Result?) {
        val deviceIdHash = result?.deviceIdHash ?: return

        Adapty.setIntegrationIdentifier("appmetrica_device_id", deviceIdHash) { error ->
            if (error != null) {
                // handle the error
            }
        }
    }

    override fun onRequestError(
        reason: StartupParamsCallback.Reason,
        result: StartupParamsCallback.Result?
    ) {
        //handle the error
    }
}

AppMetrica.requestStartupParams(context, startupParamsCallback, listOf(StartupParamsCallback.APPMETRICA_DEVICE_ID_HASH))
```

**Setting appmetrica_profile_id**

```kotlin showLineNumbers
val startupParamsCallback = object: StartupParamsCallback {
    override fun onReceive(result: StartupParamsCallback.Result?) {
        val deviceIdHash = result?.deviceIdHash ?: return

        Adapty.setIntegrationIdentifier("appmetrica_device_id", deviceIdHash) { error ->
            if (error != null) {
                // handle the error
            }
        }
        
        Adapty.setIntegrationIdentifier("appmetrica_profile_id", "YOUR_ADAPTY_CUSTOMER_USER_ID") { error ->
            if (error != null) {
                // handle the error
            }
        }
    }

    override fun onRequestError(
        reason: StartupParamsCallback.Reason,
        result: StartupParamsCallback.Result?
    ) {
        //handle the error
    }
}

AppMetrica.requestStartupParams(context, startupParamsCallback, listOf(StartupParamsCallback.APPMETRICA_DEVICE_ID_HASH))
```
</TabItem>
<TabItem value="Flutter" label="Flutter (Dart)" default>

**Setting appmetrica_device_id**

```javascript showLineNumbers

final startupParams = await AppMetrica.requestStartupParams([AppMetricaStartupParams.deviceIdHashKey]);
final deviceIdHash = startupParams.result?.deviceIdHash;

if (deviceIdHash != null) {
  try {
    await Adapty().setIntegrationIdentifier(
        key: "appmetrica_device_id", 
        value: deviceIdHash,
    );
  } on AdaptyError catch (adaptyError) {
    // handle the error
  } catch (e) {
    // handle the error
  }
}
```

**Setting appmetrica_profile_id**

```javascript showLineNumbers

try {
    await Adapty().setIntegrationIdentifier(
        key: "appmetrica_profile_id", 
        value: "YOUR_APPMETRICA_PROFILE_ID",
    );
} on AdaptyError catch (adaptyError) {
    // handle the error
} catch (e) {
    // handle the error
}
```
</TabItem>
<TabItem value="Unity" label="Unity (C#)" default>

**Setting appmetrica_device_id**

```csharp showLineNumbers
using AdaptySDK;
using Io.AppMetrica;

AppMetrica.RequestStartupParams(
    (result, errorReason) => {
        string deviceIdHash = result.DeviceIdHash;

        if (deviceIdHash != null) {
            Adapty.SetIntegrationIdentifier(
                "appmetrica_device_id",
                deviceIdHash,
                (error) => {
                    // handle the error
                });
          }
      },
      new List<string>() { StartupParamsKey.AppMetricaDeviceIDHash }
);
```

**Setting appmetrica_profile_id**

```csharp showLineNumbers
Adapty.SetIntegrationIdentifier(
  "appmetrica_profile_id",
  "YOUR_APPMETRICA_PROFILE_ID",
  (error) => {
    // handle the error
});
```
</TabItem>
<TabItem value="RN" label="React Native (TS)" default>

**Setting appmetrica_device_id**

```typescript showLineNumbers

// ...
const startupParamsCallback = async (
  params?: StartupParams,
  reason?: StartupParamsReason
) => {
  const deviceIdHash = params?.deviceIdHash
  if (deviceIdHash) {
    try {
      await adapty.setIntegrationIdentifier("appmetrica_device_id", deviceIdHash);
    } catch (error) {
      // handle `AdaptyError`
    }
  }
}

AppMetrica.requestStartupParams(startupParamsCallback, [DEVICE_ID_HASH_KEY])
```

**Setting appmetrica_profile_id**

```typescript showLineNumbers

try {
  await adapty.setIntegrationIdentifier("appmetrica_profile_id", 'YOUR_ADAPTY_CUSTOMER_USER_ID');
} catch (error) {
  // handle `AdaptyError`
}
```
</TabItem>
</Tabs>

## Estructura de eventos de AppMetrica \{#appmetrica-event-structure\}

Adapty envía eventos a AppMetrica mediante solicitudes POST con parámetros pasados como parámetros de consulta. Para cada evento de Adapty, AppMetrica recibe hasta **dos solicitudes separadas**:

1. **Evento de perfil** (siempre enviado): Contiene metadatos del evento
2. **Evento de ingresos** (opcional): Contiene datos de ingresos si la opción "Send revenue events" está habilitada en el Adapty Dashboard

### Solicitud de evento de perfil \{#profile-event-request\}

Se envía a: `https://api.appmetrica.yandex.ru/logs/v1/import/events`

Ejemplo de URL con parámetros de consulta:

```
POST https://api.appmetrica.yandex.ru/logs/v1/import/events?post_api_key=your_key&application_id=your_app_id&event_name=subscription_renewed&event_timestamp=1709294400&event_json=%7B%22vendor_product_id%22%3A%22yearly.premium%22...%7D&os_name=ios&ios_ifa=00000000-0000-0000-0000-000000000000&ios_ifv=12345678-1234-1234-1234-123456789012&profile_id=user_12345&session_type=foreground
```

Parámetros de consulta:

| Parámetro              | Tipo   | Descripción                                                                                                                                                          |
|:-----------------------|:-------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `post_api_key`         | String | Tu Post API Key de AppMetrica.                                                                                                                                       |
| `application_id`       | String | Tu Application ID de AppMetrica.                                                                                                                                     |
| `event_name`           | String | El nombre del evento (mapeado desde el evento de Adapty).                                                                                                            |
| `event_timestamp`      | Long   | Marca de tiempo UNIX del evento en segundos. Se limita a los últimos 7 días si es más antiguo.                                                                       |
| `event_json`           | String | Cadena JSON codificada en URL que contiene todos los [campos del evento](webhook-event-types-and-fields#for-most-event-types) disponibles. Solo se incluyen los campos no nulos. |
| `os_name`              | String | "ios" o "android".                                                                                                                                                   |
| `profile_id`           | String | AppMetrica Profile ID (si está configurado), en caso contrario el Customer User ID (si está disponible).                                                             |
| `appmetrica_device_id` | String | AppMetrica Device ID Hash. Solo se envía si `profile_id` no está disponible.                                                                                         |
| `session_type`         | String | Siempre "foreground".                                                                                                                                                |
| `ios_ifa`              | String | **Solo iOS**. ID for Advertisers.                                                                                                                                    |
| `ios_ifv`              | String | **Solo iOS**. ID for Vendors.                                                                                                                                        |
| `google_aid`           | String | **Solo Android**. Google Advertising ID.                                                                                                                             |

### Solicitud de evento de ingresos (opcional) \{#revenue-event-request-optional\}

Se envía a: `https://api.appmetrica.yandex.ru/logs/v1/import/revenue`

Esta solicitud solo se envía cuando la opción "Send revenue events" está habilitada en la configuración de la integración en tu Adapty Dashboard.

Ejemplo de URL con parámetros de consulta:

```
POST https://api.appmetrica.yandex.ru/logs/v1/import/revenue?post_api_key=your_key&application_id=your_app_id&revenue_event_type=subscription_renewed&price=9.99&currency=USD&product_id=yearly.premium&quantity=1&transaction_id=GPA.3383...&payload=%7B%22vendor_product_id%22%3A%22yearly.premium%22...%7D&os_name=ios&ios_ifa=00000000-0000-0000-0000-000000000000&profile_id=user_12345&session_type=foreground
```

Parámetros de consulta:

| Parámetro              | Tipo    | Descripción                                                                                                                                                                                   |
|:-----------------------|:--------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `post_api_key`         | String  | Tu Post API Key de AppMetrica.                                                                                                                                                                |
| `application_id`       | String  | Tu Application ID de AppMetrica.                                                                                                                                                              |
| `revenue_event_type`   | String  | El tipo de evento de ingresos (por ejemplo, "subscription_renewed", "refund", "intro_started"). Consulta el [mapeo de eventos de AppMetrica](#revenue-event-type-mapping).                     |
| `price`                | Float   | Importe de ingresos (según tu configuración de cálculo de ingresos).                                                                                                                          |
| `currency`             | String  | Código de moneda (por ejemplo, "USD").                                                                                                                                                        |
| `product_id`           | String  | El ID del producto en el store.                                                                                                                                                               |
| `quantity`             | Integer | Siempre 1.                                                                                                                                                                                    |
| `transaction_id`       | String  | ID de transacción del store.                                                                                                                                                                  |
| `payload`              | String  | Cadena JSON codificada en URL que contiene los detalles del evento. Se recorta automáticamente si supera los 30 KB eliminando campos opcionales por orden de importancia para preservar los datos más críticos. |
| `os_name`              | String  | "ios" o "android".                                                                                                                                                                            |
| `profile_id`           | String  | AppMetrica Profile ID (si está configurado), en caso contrario el Customer User ID (si está disponible).                                                                                      |
| `appmetrica_device_id` | String  | AppMetrica Device ID Hash. Solo se envía si `profile_id` no está disponible.                                                                                                                  |
| `session_type`         | String  | Siempre "foreground".                                                                                                                                                                         |
| `ios_ifa`              | String  | **Solo iOS**. ID for Advertisers.                                                                                                                                                             |
| `ios_ifv`              | String  | **Solo iOS**. ID for Vendors.                                                                                                                                                                 |
| `google_aid`           | String  | **Solo Android**. Google Advertising ID.                                                                                                                                                      |