---
title: "Amplitude"
description: "Интегрируйте Amplitude с Adapty для более глубокого понимания поведения пользователей."
---

[Amplitude](https://amplitude.com/) — мощный сервис мобильной аналитики. С помощью Adapty вы можете легко отправлять события в Amplitude, отслеживать поведение пользователей и принимать взвешенные решения.

Adapty предоставляет полный набор данных, позволяющий отслеживать [события подписки](events) из сторов в одном месте и отправлять их в ваш аккаунт Amplitude. Это даёт возможность сопоставлять поведение пользователей с историей их платежей в Amplitude и принимать обоснованные продуктовые решения.

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

В Adapty можно настроить отдельные потоки для **продакшн** и **тестовых событий** из песочницы Apple или Stripe, либо из тестового аккаунта Google.

- Для продакшн-событий введите **Production** API-ключи из дашборда Amplitude — отдельный ключ для каждой платформы: iOS, Android и Stripe.
- Для тестовых событий используйте поля **Sandbox** по необходимости.

Чтобы настроить интеграцию с Amplitude:

1. Откройте [**Integrations** -> **Amplitude**](https://app.adapty.io/integrations/amplitude) в дашборде Adapty.

  <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. Включите **Amplitude integration** с помощью переключателя.

3. Заполните поля интеграции:

    | Поле | Описание |
    | ---- | -------- |
    | **Amplitude iOS/ Android/ Stripe API key** | Введите **API Key** Amplitude для iOS/ Android/ Stripe в Adapty. Найти его можно в разделе **Project settings** в Amplitude. Подробнее см. в [документации Amplitude](https://amplitude.com/docs/apis/authentication). Начните с ключей **Sandbox** для тестирования, затем переключитесь на ключи **Production** после успешных тестов. |

    
      <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. Дополнительные настройки для расширенной конфигурации:

   | Параметр | Описание |
   | -------- | -------- |
   | **How the revenue data should be sent** | Выберите, отправлять ли валовую выручку или выручку после вычета налогов и комиссий. Подробнее см. в разделе [Комиссия стора и налоги](controls-filters-grouping-compare-proceeds#store-commission-and-taxes). |
   | **Exclude historical events** | Выберите этот параметр, чтобы исключить события, произошедшие до установки Adapty SDK, и избежать дублирования данных. Например, если пользователь оформил подписку 10 января, а Adapty SDK установил 6 марта, Adapty будет отправлять только события начиная с 6 марта. |
   | **Send User Attributes** | Выберите этот параметр, чтобы отправлять пользовательские атрибуты, например языковые настройки. |
   | **Always populate user_id** | Adapty автоматически отправляет `device_id` как `amplitudeDeviceId`. Для `user_id` этот параметр определяет поведение: <ul><li>**ON**: отправляет `profile_id` из Adapty, если `amplitudeUserId` или `customer_user_id` недоступны.</li><li>**OFF**: оставляет `user_id` пустым, если ни один из идентификаторов недоступен.</li></ul> |

5. Выберите события, которые хотите получать, и [задайте им имена](amplitude#events-and-tags).

6. Нажмите **Save**, чтобы сохранить изменения.

После нажатия **Save** Adapty начнёт отправлять события в Amplitude.

Помимо событий, Adapty отправляет [статус подписки](subscription-status) и идентификатор продукта подписки в [пользовательские свойства Amplitude](https://amplitude.com/docs/data/user-properties-and-events).

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

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

Рекомендуем использовать имена событий по умолчанию, предоставляемые Adapty. При необходимости вы можете изменить их под свои нужды. Adapty отправляет события подписки в Amplitude через серверную интеграцию (server-to-server), что позволяет просматривать все события подписки в вашем дашборде Amplitude.

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

Используйте метод `setIntegrationIdentifier()`, чтобы задать параметр `amplitude_device_id`. Это обязательный шаг для настройки интеграции.

Если у вас есть система регистрации пользователей, можно также передать `amplitude_user_id`.

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

**Установка amplitudeDeviceId**

```swift showLineNumbers

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

**Установка 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>

**Установка 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
    }
}
```

**Установка 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>

**Установка 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
}
```

**Установка 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>

**Установка amplitudeDeviceId**

```csharp showLineNumbers
using AdaptySDK;

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

**Установка 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>

**Установка amplitudeDeviceId**

```typescript showLineNumbers

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

**Установка amplitudeUserId**

```typescript showLineNumbers

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

</TabItem>
</Tabs>

## Структура события Amplitude \{#amplitude-event-structure\}

Adapty отправляет события в Amplitude через HTTP API v2. Каждое событие имеет следующую структуру:

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

Где:

| Параметр | Тип | Описание |
|:---------|:----|:---------|
| `api_key` | String | Ваш API-ключ Amplitude. |
| `events` | Array | Список объектов событий (Adapty отправляет по одному за раз). |
| `events[].partner_id` | String | Всегда "adapty". |
| `events[].event_type` | String | Имя события (сопоставленное с событием Adapty). |
| `events[].time` | Long | Временна́я метка события в миллисекундах. |
| `events[].insert_id` | String | Уникальный идентификатор события (UUID). |
| `events[].user_id` | String | Amplitude User ID или Customer User ID. |
| `events[].device_id` | String | Amplitude Device ID. |
| `events[].platform` | String | Платформа (например, "iOS", "Android"). |
| `events[].os_name` | String | Название ОС. |
| `events[].productId` | String | Идентификатор продукта из стора. |
| `events[].revenue` | Float | Сумма выручки. |
| `events[].event_properties` | Object | Подробные атрибуты события (содержит все доступные [поля события](webhook-event-types-and-fields#for-most-event-types)). |
| `events[].user_properties` | Object | Пользовательские атрибуты, например статус подписки. |