---
title: "Отчёт о транзакциях в режиме Observer Mode во Flutter SDK"
description: "Отчитывайтесь о транзакциях покупок в Adapty Observer Mode для получения аналитики пользователей и отслеживания дохода во Flutter SDK."
---

<Tabs groupId="sdk-version" queryString> 

<TabItem value="current" label="Adapty SDK v3.4+ (current)" default> 
В режиме Observer Mode SDK Adapty не может самостоятельно отслеживать покупки, сделанные через вашу существующую систему покупок. Вам нужно сообщать о транзакциях из вашего стора. Крайне важно настроить это **до** выпуска приложения, чтобы избежать ошибок в аналитике.

Используйте `reportTransaction`, чтобы явно сообщать о каждой транзакции, которую должна распознать Adapty.

:::warning

**Не пропускайте отчёт о транзакциях!**
Если вы не вызываете `reportTransaction`, Adapty не распознает транзакцию, она не появится в аналитике и не будет отправлена в интеграции.

:::

Если вы используете пейволы Adapty, включайте `variationId` при отчёте о транзакции. Это связывает покупку с пейволом, который её инициировал, и обеспечивает точную аналитику пейвола.

```javascript showLineNumbers
try {
    // every time when calling transaction.finish()
    await Adapty().reportTransaction(
        "YOUR_TRANSACTION_ID", 
        variationId: "PAYWALL_VARIATION_ID", // optional
    );
} on AdaptyError catch (adaptyError) {
    // handle the error
} catch (e) {
    // handle the error
}
```

Параметры:

| Параметр      | Обязательность | Описание                                                     |
| ------------- | -------------- | ------------------------------------------------------------ |
| transactionId | обязательный   | <ul><li> Для iOS: идентификатор транзакции.</li><li> Для Android: строковый идентификатор `purchase.getOrderId` покупки, где покупка — это экземпляр класса [Purchase](https://developer.android.com/reference/com/android/billingclient/api/Purchase) из библиотеки биллинга.</li></ul> |
| variationId   | необязательный | Строковый идентификатор варианта. Его можно получить с помощью свойства `variationId` объекта [AdaptyPaywall](https://pub.dev/documentation/adapty_flutter/latest/adapty_flutter/AdaptyPaywall-class.html). |

</TabItem>
<TabItem value="old" label="Adapty SDK 3.3.x (legacy)" default> 

В режиме Observer Mode SDK Adapty не может самостоятельно отслеживать покупки, сделанные через вашу существующую систему покупок. Вам нужно сообщать о транзакциях из вашего стора или восстанавливать их. Крайне важно настроить это **до** выпуска приложения, чтобы избежать ошибок в аналитике.

Используйте `reportTransaction` на обеих платформах, чтобы явно сообщать о каждой транзакции, и используйте `restorePurchases` на Android в качестве дополнительного шага, чтобы убедиться, что Adapty распознала её.

:::warning

**Не пропускайте отчёт о транзакциях и восстановление покупок!**
Если вы не вызываете эти методы, Adapty не распознает транзакцию, она не появится в аналитике и не будет отправлена в интеграции.

:::

Если вы используете пейволы Adapty, включайте `variationId` при отчёте о транзакции. Это связывает покупку с пейволом, который её инициировал, и обеспечивает точную аналитику пейвола.

```javascript showLineNumbers
// every time when calling transaction.finish()
if (Platform.isAndroid) {
    try {
        await Adapty().restorePurchases();
    } on AdaptyError catch (adaptyError) {
        // handle the error
    } catch (e) {
    }
}

try {
    // every time when calling transaction.finish()
    await Adapty().reportTransaction(
        "YOUR_TRANSACTION_ID", 
        variationId: "PAYWALL_VARIATION_ID", // optional
    );
} on AdaptyError catch (adaptyError) {
    // handle the error
} catch (e) {
    // handle the error
}
```

Параметры:

| Параметр      | Обязательность | Описание                                                     |
| ------------- | -------------- | ------------------------------------------------------------ |
| transactionId | обязательный   | <ul><li> Для iOS, StoreKit 1: объект [SKPaymentTransaction](https://developer.apple.com/documentation/storekit/skpaymenttransaction).</li><li> Для iOS, StoreKit 2: объект [Transaction](https://developer.apple.com/documentation/storekit/transaction).</li><li> Для Android: строковый идентификатор (purchase.getOrderId покупки, где покупка — это экземпляр класса [Purchase](https://developer.android.com/reference/com/android/billingclient/api/Purchase) из библиотеки биллинга).</li></ul> |
| variationId   | необязательный | Строковый идентификатор варианта. Его можно получить с помощью свойства `variationId` объекта [AdaptyPaywall](https://pub.dev/documentation/adapty_flutter/latest/adapty_flutter/AdaptyPaywall-class.html). |

</TabItem>
<TabItem value="old2" label="Adapty SDK up to 3.2.x (legacy)" default> 

<Tabs groupId="current-os" queryString> 
<TabItem value="swift" label="iOS" default> 

**Отчёт о транзакциях**

- Версии до 3.1.x автоматически отслеживают транзакции в App Store, поэтому ручной отчёт не требуется.
- Версия 3.2 не поддерживает Observer Mode.

</TabItem> 
<TabItem value="kotlin" label="Android and Android-based cross-platforms" default> 

**Отчёт о транзакциях**

Используйте `restorePurchases`, чтобы сообщить о транзакции в Adapty в режиме Observer Mode, как описано на странице [Восстановление покупок в мобильном коде](flutter-restore-purchase).

:::warning
**Не пропускайте отчёт о транзакциях!**
Если вы не вызываете `restorePurchases`, Adapty не распознает транзакцию, она не появится в аналитике и не будет отправлена в интеграции.
::: 

</TabItem>
</Tabs>

**Привязка пейволов к транзакциям**

SDK Adapty не может определить источник покупок, так как вы сами их обрабатываете. Поэтому, если вы планируете использовать пейволы и/или A/B-тесты в режиме Observer Mode, вам нужно связать транзакцию из вашего стора с соответствующим пейволом в коде мобильного приложения. Это важно сделать правильно до выпуска приложения, иначе это приведёт к ошибкам в аналитике.

```javascript
final transactionId = transaction.transactionIdentifier
final variationId = paywall.variationId

try {
  await Adapty().setVariationId('transactionId', variationId);
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
}
```

</TabItem> 
</Tabs>