---
title: "Mixpanel"
description: "Подключите Mixpanel к Adapty для глубокой аналитики подписок."
---

[Mixpanel](https://mixpanel.com/home/) — мощный сервис продуктовой аналитики. Его решение для отслеживания событий помогает продуктовым командам получать ценные insights о стратегиях привлечения, конверсии и удержания пользователей на разных платформах.

Интеграция позволяет передавать все события Adapty в Mixpanel. В результате вы получаете более полное представление о своём подписочном бизнесе и действиях пользователей. Adapty предоставляет полный набор данных для отслеживания [событий подписок](events) из сторов в одном месте. С Adapty легко понять, как ведут себя подписчики, что им нравится, и использовать эту информацию для точечной и эффективной коммуникации с ними.

## Как настроить интеграцию с Mixpanel \{#how-to-set-up-mixpanel-integration\}

1. Откройте страницу [Integrations -> Mixpanel](https://app.adapty.io/integrations/mixpanel) в дашборде Adapty.
2. Включите переключатель и введите **Mixpanel Token**. Можно указать токен для всех платформ или ограничить его конкретными платформами, если нужно получать данные только с определённых.

  <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 */
  }}
/>

### Где найти Mixpanel Token \{#finding-your-mixpanel-token\}

Чтобы получить **Mixpanel Token**:

1. Войдите в свой [Mixpanel Dashboard](https://mixpanel.com/settings/project/).
2. Откройте **Settings** и выберите **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. На левой боковой панели перейдите в **Projects** и выберите свой проект.

  <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 */
  }}
/>

## Как работает интеграция \{#how-the-integration-works\}

Adapty автоматически сопоставляет нужные свойства событий — например, ID пользователя и выручку — с [нативными свойствами Mixpanel](https://docs.mixpanel.com/docs/data-structure/user-profiles). Это обеспечивает точное отслеживание и отчётность по событиям, связанным с подписками.

Кроме того, Adapty накапливает данные о выручке по каждому пользователю и обновляет их [свойства профиля](https://docs.mixpanel.com/docs/data-structure/user-profiles), включая `subscription state` и `subscription product ID`. После получения события Mixpanel обновляет соответствующие поля в реальном времени.

## События и теги \{#events-and-tags\}

Ниже блока с учётными данными находятся три группы событий, которые можно отправлять в Mixpanel из Adapty. Просто включите нужные. Полный список событий, предоставляемых Adapty, доступен [здесь](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 */
  }}
/>

Рекомендуем использовать названия событий по умолчанию, предложенные Adapty. При необходимости их можно изменить под свои нужды.

## Настройка SDK \{#sdk-configuration\}

Используйте метод `.setIntegrationIdentifier()`, чтобы задать `mixpanelUserId`. Если значение не задано, Adapty использует ваш пользовательский ID (`customerUserId`), а если он равен null — Adapty ID. Убедитесь, что ID пользователя, который вы используете для отправки данных в Mixpanel из приложения, совпадает с тем, который вы отправляете в Adapty.

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

<Callout type="note">
Если вы используете сторонний user ID в качестве Customer User ID, не передавайте его во время `activate()` — сторонний SDK может ещё не успеть его сгенерировать. Вместо этого сначала вызовите `activate()` без CUID, затем `setIntegrationIdentifier()`, а потом `identify()` с CUID.
</Callout>

<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

// If you already have a shared Mixpanel instance in your app, use that instance instead.
const trackAutomaticEvents = true;
const mixpanel = new Mixpanel('YOUR_PROJECT_TOKEN', trackAutomaticEvents);
await mixpanel.init();

// This is Mixpanel's current distinct_id (auto-generated, or set via mixpanel.identify(...))
const mixpanelUserId = await mixpanel.getDistinctId();

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

## Структура событий Mixpanel \{#mixpanel-event-structure\}

Adapty отправляет события в Mixpanel с помощью метода `track`. Свойства событий структурированы следующим образом:

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

Где:

| Параметр                             | Тип     | Описание                                                        |
|:-------------------------------------|:--------|:----------------------------------------------------------------|
| `event`                              | String  | Название события (соответствует событию Adapty).                |
| `properties`                         | Object  | Свойства события.                                               |
| `properties.ip`                      | Integer | IP-адрес (отправляется как 0 при server-to-server передаче).    |
| `properties.time`                    | Long    | UNIX-временная метка события в секундах.                        |
| `properties.$insert_id`              | String  | Уникальный ID события (UUID) для дедупликации.                  |
| `properties.vendor_product_id`       | String  | ID продукта в сторе.                                            |
| `properties.original_transaction_id` | String  | ID оригинальной транзакции.                                     |
| `properties.currency`                | String  | Код валюты.                                                     |
| `properties.store`                   | String  | Название стора (например, "app_store").                         |
| `properties.environment`             | String  | Окружение ("Sandbox" или "Production").                         |

### Обновления профиля пользователя \{#user-profile-updates\}

Adapty также обновляет профиль пользователя в Mixpanel с помощью `people_set`, используя следующие свойства:

| Параметр                  | Тип    | Описание                                                              |
|:--------------------------|:-------|:----------------------------------------------------------------------|
| `subscription_state`      | String | Текущий статус подписки (например, "subscribed").                     |
| `subscription_product_id` | String | ID активного продукта с подпиской.                                    |