---
title: "Flutter SDK'da Observer Mode'da işlemleri raporlama"
description: "Flutter SDK'da kullanıcı içgörüleri ve gelir takibi için Adapty Observer Mode'da satın alma işlemlerini raporlayın."
---

<Tabs groupId="sdk-version" queryString> 

<TabItem value="current" label="Adapty SDK v3.4+ (current)" default> 
Observer mode'da Adapty SDK, mevcut satın alma sisteminiz üzerinden yapılan satın almaları kendi başına takip edemez. App store'dan gelen işlemleri kendiniz raporlamanız gerekir. Analizlerde hata oluşmaması için bunu uygulamanızı yayınlamadan **önce** yapılandırmanız kritik önem taşır.

Her işlemi Adapty'nin tanıyabilmesi için `reportTransaction` kullanarak açıkça raporlayın.

:::warning

**İşlem raporlamayı atlamayın!**
`reportTransaction` çağırmazsanız Adapty işlemi tanımaz, işlem analizlerde görünmez ve entegrasyonlara gönderilmez.

:::

Adapty paywall'larını kullanıyorsanız, işlem raporlarken `variationId` parametresini ekleyin. Bu, satın almayı tetikleyen paywall ile ilişkilendirir ve paywall analizlerinin doğru olmasını sağlar.

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

Parametreler:

| Parametre     | Zorunluluk | Açıklama                                                  |
| ------------- | -------- | ------------------------------------------------------------ |
| transactionId | zorunlu | <ul><li> iOS için: İşlemin tanımlayıcısı.</li><li> Android için: Satın almanın `purchase.getOrderId` string tanımlayıcısı; burada purchase, billing library [Purchase](https://developer.android.com/reference/com/android/billingclient/api/Purchase) sınıfının bir örneğidir.</li></ul> |
| variationId   | isteğe bağlı | Varyasyonun string tanımlayıcısı. [AdaptyPaywall](https://pub.dev/documentation/adapty_flutter/latest/adapty_flutter/AdaptyPaywall-class.html) nesnesinin `variationId` özelliğini kullanarak alabilirsiniz. |

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

Observer mode'da Adapty SDK, mevcut satın alma sisteminiz üzerinden yapılan satın almaları kendi başına takip edemez. App store'dan gelen işlemleri kendiniz raporlamanız veya geri yüklemeniz gerekir. Analizlerde hata oluşmaması için bunu uygulamanızı yayınlamadan **önce** yapılandırmanız kritik önem taşır.

Her işlemi açıkça raporlamak için her iki platformda da `reportTransaction` kullanın; Android'de Adapty'nin işlemi tanıdığından emin olmak için ek bir adım olarak `restorePurchases` de çağırın.

:::warning

**İşlem raporlamayı ve satın alma geri yüklemeyi atlamayın!**
Bu metodları çağırmazsanız Adapty işlemi tanımaz, işlem analizlerde görünmez ve entegrasyonlara gönderilmez.

:::

Adapty paywall'larını kullanıyorsanız, işlem raporlarken `variationId` parametresini ekleyin. Bu, satın almayı tetikleyen paywall ile ilişkilendirir ve paywall analizlerinin doğru olmasını sağlar.

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

Parametreler:

| Parametre     | Zorunluluk | Açıklama                                                  |
| ------------- | -------- | ------------------------------------------------------------ |
| transactionId | zorunlu | <ul><li> iOS, StoreKit 1 için: bir [SKPaymentTransaction](https://developer.apple.com/documentation/storekit/skpaymenttransaction) nesnesi.</li><li> iOS, StoreKit 2 için: [Transaction](https://developer.apple.com/documentation/storekit/transaction) nesnesi.</li><li> Android için: String tanımlayıcı (satın almanın purchase.getOrderId değeri; burada purchase, billing library [Purchase](https://developer.android.com/reference/com/android/billingclient/api/Purchase) sınıfının bir örneğidir).</li></ul> |
| variationId   | isteğe bağlı | Varyasyonun string tanımlayıcısı. [AdaptyPaywall](https://pub.dev/documentation/adapty_flutter/latest/adapty_flutter/AdaptyPaywall-class.html) nesnesinin `variationId` özelliğini kullanarak alabilirsiniz. |

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

**İşlemleri raporlama**

- 3.1.x ve önceki sürümler App Store'daki işlemleri otomatik olarak dinler, bu yüzden manuel raporlama gerekmez.
- 3.2 sürümü Observer Mode'u desteklemez.

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

**İşlemleri raporlama**

Observer Mode'da Adapty'ye bir işlem raporlamak için `restorePurchases` kullanın. Ayrıntılar için [Mobil Kodda Satın Almaları Geri Yükleme](flutter-restore-purchase) sayfasına bakın.

:::warning
**İşlem raporlamayı atlamayın!**
`restorePurchases` çağırmazsanız Adapty işlemi tanımaz, işlem analizlerde görünmez ve entegrasyonlara gönderilmez.
::: 

</TabItem>
</Tabs>

**Paywall'ları işlemlerle ilişkilendirme**

Satın almaları siz işlediğiniz için Adapty SDK, satın almaların kaynağını belirleyemez. Bu nedenle Observer mode'da paywall ve/veya A/B testi kullanmayı planlıyorsanız, app store'dan gelen işlemi mobil uygulama kodunuzda ilgili paywall ile ilişkilendirmeniz gerekir. Uygulamanızı yayınlamadan önce bunu doğru şekilde yapılandırmak önemlidir; aksi takdirde analizlerde hatalara yol açar.

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