---
title: "Mixpanel"
description: "Connectez Mixpanel à Adapty pour des analyses d'abonnements puissantes."
---

[Mixpanel](https://mixpanel.com/home/) est un puissant service d'analyse produit. Sa solution de suivi basée sur les événements permet aux équipes produit d'obtenir des informations précieuses sur les meilleures stratégies d'acquisition, de conversion et de rétention des utilisateurs sur différentes plateformes.

Cette intégration vous permet d'importer tous les événements Adapty dans Mixpanel. Vous obtenez ainsi une vision plus complète de votre activité d'abonnement et des actions de vos utilisateurs. Adapty fournit un ensemble complet de données qui vous permet de suivre les [événements d'abonnement](events) depuis les stores en un seul endroit. Avec Adapty, vous pouvez facilement observer le comportement de vos abonnés, comprendre leurs préférences et utiliser ces informations pour communiquer avec eux de manière ciblée et efficace.

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

1. Ouvrez la page [Integrations -> Mixpanel](https://app.adapty.io/integrations/mixpanel) dans l'Adapty Dashboard.
2. Activez le bouton et saisissez votre **Mixpanel Token**. Vous pouvez indiquer un token pour toutes les plateformes ou le limiter à des plateformes spécifiques si vous souhaitez recevoir des données uniquement de certaines d'entre elles.
3. Définissez le **Mixpanel Data Residency** en fonction de votre projet Mixpanel. Ce champ est obligatoire et vaut **US** par défaut. Choisissez **US** pour l'endpoint `api.mixpanel.com` ou **Europe** pour `api-eu.mixpanel.com`.

:::warning
Si votre projet Mixpanel utilise la résidence des données dans l'UE, vous devez définir **Mixpanel Data Residency** sur **Europe**. Mixpanel rejette les événements envoyés au point de terminaison américain depuis les projets UE.
:::

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

### Trouver votre token Mixpanel \{#finding-your-mixpanel-token\}

Pour obtenir votre **Mixpanel Token** :

1. Connectez-vous à votre [Mixpanel Dashboard](https://mixpanel.com/settings/project/).
2. Ouvrez **Settings** et sélectionnez **Organization Settings**.

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

3. Dans la barre latérale gauche, accédez à **Projects** et sélectionnez votre projet.

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

## Fonctionnement de l'intégration \{#how-the-integration-works\}

Adapty mappe automatiquement les propriétés d'événements pertinentes — comme l'identifiant utilisateur et les revenus — vers les [propriétés natives Mixpanel](https://docs.mixpanel.com/docs/data-structure/user-profiles). Cela garantit un suivi et un reporting précis des événements liés aux abonnements.

De plus, Adapty accumule les données de revenus par utilisateur et met à jour leurs [propriétés de profil utilisateur](https://docs.mixpanel.com/docs/data-structure/user-profiles), notamment `subscription state` et `subscription product ID`. Dès qu'un événement est reçu, Mixpanel met à jour les champs correspondants en temps réel.

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

Sous les identifiants, vous trouverez trois groupes d'événements que vous pouvez envoyer à Mixpanel depuis Adapty. Activez simplement ceux dont vous avez besoin. Consultez la liste complète des événements proposés par Adapty [ici](events).

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

Nous recommandons d'utiliser les noms d'événements par défaut fournis par Adapty. Vous pouvez cependant les modifier selon vos besoins.

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

Utilisez la méthode `.setIntegrationIdentifier()` pour définir `mixpanelUserId`. Si elle n'est pas définie, Adapty utilise votre identifiant utilisateur (`customerUserId`) ou, s'il est nul, l'identifiant Adapty. Assurez-vous que l'identifiant utilisateur que vous utilisez pour envoyer des données à Mixpanel depuis votre application est le même que celui que vous envoyez à Adapty.

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

```swift showLineNumbers

do {
    try await Adapty.setIntegrationIdentifier(
        key: "mixpanel_user_id",
        value: Mixpanel.mainInstance().distinctId
    )
} catch {
    // handle the error
}
```
</TabItem>
<TabItem value="swift-callback" label="iOS (Swift-Callback)" default>

```swift showLineNumbers

let builder = AdaptyProfileParameters.Builder()
            .with(mixpanelUserId: Mixpanel.mainInstance().distinctId)

Adapty.updateProfile(params: builder.build())
```
</TabItem>
<TabItem value="kotlin" label="Android (Kotlin)" default>

```kotlin showLineNumbers
Adapty.setIntegrationIdentifier("mixpanel_user_id", mixpanelAPI.distinctId) { error ->
    if (error != null) {
        // handle the error
    }
}
```
</TabItem>
<TabItem value="flutter" label="Flutter (Dart)" default>

```javascript showLineNumbers

final mixpanel = await Mixpanel.init("Your Token", trackAutomaticEvents: true);
final distinctId = await mixpanel.getDistinctId();

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

```csharp showLineNumbers
using AdaptySDK;

var distinctId = Mixpanel.DistinctId;

if (distinctId != null) {
  Adapty.SetIntegrationIdentifier(
    "mixpanel_user_id",
    distinctId,
    (error) => {
    // handle the error
  });
}
```
</TabItem>
<TabItem value="rn" label="React Native (TS)" default>

```typescript showLineNumbers

// Si vous avez déjà une instance Mixpanel partagée dans votre app, utilisez-la à la place.
const trackAutomaticEvents = true;
const mixpanel = new Mixpanel('YOUR_PROJECT_TOKEN', trackAutomaticEvents);
await mixpanel.init();

// Voici le distinct_id actuel de Mixpanel (généré automatiquement, ou défini via mixpanel.identify(...))
const mixpanelUserId = await mixpanel.getDistinctId();

try {
    await adapty.setIntegrationIdentifier("mixpanel_user_id", mixpanelUserId);
} catch (error) {
    // gérer l'`AdaptyError`
}
```
</TabItem>
</Tabs>

## Structure des événements Mixpanel \{#mixpanel-event-structure\}

Adapty envoie les événements à Mixpanel via la méthode `track`. Les propriétés des événements sont structurées de la façon suivante :

```json
{
  "event": "subscription_renewed",
  "properties": {
    "ip": 0,
    "time": 1709294400,
    "$insert_id": "123e4567-e89b-12d3-a456-426614174000",
    "vendor_product_id": "yearly.premium.6999",
    "original_transaction_id": "GPA.3383...",
    "currency": "USD",
    "environment": "Production",
    "store": "app_store",
    "purchase_date": "2024-03-01T12:00:00.000000+0000"
  }
}
```

Où :

| Paramètre                            | Type    | Description                                                    |
|:-------------------------------------|:--------|:---------------------------------------------------------------|
| `event`                              | String  | Nom de l'événement (mappé depuis l'événement Adapty).          |
| `properties`                         | Object  | Propriétés de l'événement.                                     |
| `properties.ip`                      | Integer | Adresse IP (envoyée comme 0 en serveur à serveur).             |
| `properties.time`                    | Long    | Horodatage UNIX de l'événement en secondes.                    |
| `properties.$insert_id`              | String  | Identifiant unique de l'événement (UUID) pour la déduplication. |
| `properties.vendor_product_id`       | String  | L'ID du produit dans le store.                                 |
| `properties.original_transaction_id` | String  | Identifiant de transaction d'origine.                          |
| `properties.currency`                | String  | Code de devise.                                                |
| `properties.store`                   | String  | Nom du store (ex. : « app_store »).                            |
| `properties.environment`             | String  | Environnement (« Sandbox » ou « Production »).                 |

### Mises à jour du profil utilisateur \{#user-profile-updates\}

Adapty met également à jour le profil utilisateur Mixpanel via `people_set` avec les propriétés suivantes :

| Paramètre                 | Type   | Description                                                      |
|:--------------------------|:-------|:-----------------------------------------------------------------|
| `subscription_state`      | String | État actuel de l'abonnement (par exemple, « subscribed »).       |
| `subscription_product_id` | String | ID du produit d'abonnement actif.                                |

## Résolution des problèmes \{#troubleshooting\}

### `access_level_updated` apparaît comme échoué dans le fil 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.