---
title: "AppMetrica"
description: "Intégrez AppMetrica avec Adapty pour des analyses d'abonnements approfondies."
---

> **AI agents**: to search Adapty docs faster and with fewer tokens, install the Adapty skill. Claude Code (self-updating via plugin): `claude plugin marketplace add adaptyteam/adapty-sdk-integration-skill && claude plugin install adapty-sdk-integration@adapty` — other tools: `npx skills add adaptyteam/adapty-sdk-integration-skill --all`

[AppMetrica](https://appmetrica.yandex.com/about) est un outil d'analyse gratuit qui vous permet de suivre le comportement des utilisateurs et d'analyser les performances de votre application mobile en temps réel. En intégrant AppMetrica avec Adapty, vous obtenez une vision plus approfondie de vos métriques d'abonnement et de l'engagement de vos utilisateurs.

## Comment configurer l'intégration AppMetrica \{#how-to-set-up-appmetrica-integration\}

La configuration de l'intégration AppMetrica comprend deux étapes principales :

1. Configurer l'intégration dans l'Adapty Dashboard
2. Mettre en place l'intégration dans le code de votre application

### Configuration du tableau de bord \{#dashboard-configuration\}

Pour configurer l'intégration AppMetrica :

1. Ouvrez la [liste des applications AppMetrica](https://appmetrica.yandex.ru/application/list)
2. Sélectionnez l'application que vous souhaitez suivre
3. Allez dans **Settings > Main** et copiez l'**Application ID** et 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. Rendez-vous dans [Integrations > AppMetrica](https://app.adapty.io/integrations/appmetrica) dans l'Adapty Dashboard
5. Collez vos identifiants 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 */
  }}
/>

### Événements et tags \{#events-and-tags\}

Adapty vous permet d'envoyer trois groupes d'événements à AppMetrica. Vous pouvez activer les événements dont vous avez besoin pour suivre les performances de votre application. Pour la liste complète des événements disponibles, consultez notre [documentation sur les événements](events).

:::note
AppMetrica synchronise les événements toutes les 4 heures, ce qui peut entraîner un délai avant que les événements n'apparaissent dans votre tableau de bord.
:::

  <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
Nous recommandons d'utiliser les noms d'événements par défaut d'Adapty pour plus de cohérence, mais vous pouvez les personnaliser pour les adapter à votre configuration analytique existante.
:::

### Paramètres de revenus \{#revenue-settings\}

Par défaut, Adapty envoie les données de revenus sous forme de propriétés dans les événements, qui apparaissent dans le rapport Événements d'AppMetrica. Vous pouvez configurer la façon dont ces données de revenus sont calculées et affichées :

- **Calcul des revenus** : Choisissez comment les valeurs de revenus sont calculées pour correspondre à vos besoins de reporting financier :
  - **Revenus bruts** : Affiche le total des revenus avant toute déduction, utile pour suivre le montant total payé par les clients
  - **Recettes après commission du store** : Affiche les revenus après déduction des frais de l'App Store/Play Store, pour suivre vos gains réels
  - **Recettes après commission du store et taxes** : Affiche les revenus nets après déduction des frais du store et des taxes applicables, offrant la vision la plus précise de vos gains

- **Report user's currency** : lorsque cette option est activée, les ventes sont rapportées dans la devise locale de l'utilisateur, ce qui facilite l'analyse des revenus par région. Lorsqu'elle est désactivée, toutes les ventes sont converties en USD pour un reporting cohérent sur l'ensemble des marchés.

- **Send revenue events** : activez cette option pour que les données de revenus apparaissent non seulement dans le rapport Événements, mais aussi dans le rapport [In-app and ad revenue](https://appmetrica.yandex.com/docs/en/mobile-reports/revenue-report) d'AppMetrica. Assurez-vous de ne pas envoyer des données de revenus depuis un autre endroit, car cela pourrait entraîner des doublons.

- **Exclude historical events** : Lorsque cette option est activée, Adapty n'envoie pas les événements survenus avant l'installation de l'app avec le SDK Adapty. Cela permet d'éviter les doublons si vous envoyiez déjà des événements à votre outil d'analyse avant d'intégrer 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 */
  }}
/>

### Configuration du SDK \{#sdk-configuration\}

Pour activer l'intégration AppMetrica dans votre application, vous devez configurer deux identifiants :

1. `appmetrica_device_id` : Requis pour l'intégration de base
2. `appmetrica_profile_id` : Optionnel, mais recommandé si votre application dispose d'un système d'inscription utilisateur

Utilisez la méthode `setIntegrationIdentifier()` pour définir ces valeurs. Voici comment l'implémenter sur chaque plateforme :

:::note
Les SDK tiers génèrent des identifiants utilisateur de manière asynchrone. L'identifiant peut ne pas être disponible au moment où `Adapty.activate()` s'exécute. Si votre **Customer User ID** provient de l'un de ces SDK, appelez `Adapty.activate()` sans lui. Dès que l'identifiant est disponible, appelez `setIntegrationIdentifier()`, puis `identify()` avec le CUID.
:::

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

**Définir 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
    }
  }
}
```

**Définir 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))
```

**Définir 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>

**Définir 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 }
);
```

**Définition de 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>

**Définir 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])
```

**Définir appmetrica_profile_id**

```typescript showLineNumbers

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

## Structure des événements AppMetrica \{#appmetrica-event-structure\}

Adapty envoie des événements à AppMetrica via des requêtes POST avec des paramètres transmis en tant que paramètres de requête. Pour chaque événement Adapty, AppMetrica reçoit jusqu'à **deux requêtes distinctes** :

1. **Événement de profil** (toujours envoyé) : contient les métadonnées de l'événement
2. **Événement de revenus** (optionnel) : contient les données de revenus si l'option « Send revenue events » est activée dans le Adapty Dashboard

### Requête d'événement de profil \{#profile-event-request\}

Envoyée à : `https://api.appmetrica.yandex.ru/logs/v1/import/events`

Exemple d'URL avec paramètres de requête :

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

Paramètres de requête :

| Paramètre              | Type   | Description                                                                                                                                                     |
|:-----------------------|:-------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `post_api_key`         | String | Votre clé API Post AppMetrica.                                                                                                                                  |
| `application_id`       | String | Votre ID d'application AppMetrica.                                                                                                                              |
| `event_name`           | String | Le nom de l'événement (mappé depuis l'événement Adapty).                                                                                                        |
| `event_timestamp`      | Long   | Horodatage UNIX de l'événement en secondes. Limité aux 7 derniers jours si la date est plus ancienne.                                                           |
| `event_json`           | String | Chaîne JSON encodée en URL contenant tous les [champs d'événement](webhook-event-types-and-fields#for-most-event-types) disponibles. Seuls les champs non nuls sont inclus. |
| `os_name`              | String | "ios" ou "android".                                                                                                                                             |
| `profile_id`           | String | ID de profil AppMetrica (si défini), sinon Customer User ID (si disponible).                                                                                    |
| `appmetrica_device_id` | String | Hash de l'ID d'appareil AppMetrica. Envoyé uniquement si `profile_id` n'est pas disponible.                                                                     |
| `session_type`         | String | Toujours "foreground".                                                                                                                                          |
| `ios_ifa`              | String | **iOS uniquement**. ID for Advertisers.                                                                                                                         |
| `ios_ifv`              | String | **iOS uniquement**. ID for Vendors.                                                                                                                             |
| `google_aid`           | String | **Android uniquement**. Google Advertising ID.                                                                                                                  |

### Requête d'événement de revenu (Optionnelle) \{#revenue-event-request-optional\}

Envoyée vers : `https://api.appmetrica.yandex.ru/logs/v1/import/revenue`

Cette requête n'est envoyée que lorsque l'option « Send revenue events » est activée dans les paramètres d'intégration de votre Adapty Dashboard.

Exemple d'URL avec paramètres de requête :

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

Paramètres de requête :

| Paramètre            | Type    | Description                                                                                                                                                                   |
|:---------------------|:--------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `post_api_key`       | String  | Votre clé Post API AppMetrica.                                                                                                                                                |
| `application_id`     | String  | Votre ID d'application AppMetrica.                                                                                                                                            |
| `revenue_event_type` | String  | Le type d'événement de revenus (ex. : "subscription_renewed", "refund", "intro_started"). Voir [Correspondance des événements AppMetrica](#events-and-tags).       |
| `price`              | Float   | Montant des revenus (selon vos paramètres de calcul des revenus).                                                                                                             |
| `currency`           | String  | Code de devise (ex. : "USD").                                                                                                                                                 |
| `product_id`         | String  | L'ID du produit dans le store.                                                                                                                                                |
| `quantity`           | Integer | Toujours 1.                                                                                                                                                                   |
| `transaction_id`     | String  | ID de transaction du store.                                                                                                                                                   |
| `payload`            | String  | Chaîne JSON encodée en URL contenant les détails de l'événement. Automatiquement tronquée si elle dépasse 30 Ko en supprimant les champs optionnels par ordre d'importance afin de conserver les données les plus critiques. |
| `os_name`            | String  | "ios" ou "android".                                                                                                                                                           |
| `profile_id`         | String  | L'ID de profil AppMetrica (si défini), sinon le Customer User ID (si disponible).                                                                                             |
| `appmetrica_device_id` | String  | Hash de l'ID d'appareil AppMetrica. Envoyé uniquement si `profile_id` n'est pas disponible.                                                                                   |
| `session_type`       | String  | Toujours "foreground".                                                                                                                                                        |
| `ios_ifa`            | String  | **iOS uniquement**. ID pour les annonceurs.                                                                                                                                   |
| `ios_ifv`            | String  | **iOS uniquement**. ID pour les éditeurs.                                                                                                                                     |
| `google_aid`         | String  | **Android uniquement**. Google Advertising ID.                                                                                                                                |

## Dépannage \{#troubleshooting\}

### `access_level_updated` s'affiche comme échoué dans le Journal d'événements \{#access_level_updated-shows-as-failed-in-the-event-feed\}

`access_level_updated` est un **événement réservé aux webhooks**. Adapty ne l'envoie jamais à cette intégration. Mais Adapty enregistre un résultat pour chaque intégration activée, et un événement non pris en charge est affiché comme un échec.