---
title: "Flutter SDK'da çağrı sırası"
description: "Adapty SDK metotlarını doğru sırayla çağırarak kayıp premium erişim, eksik attribution ve aralıklı #2002 hatalarından kaçının."
---

`Adapty().activate()` tamamlanmadan diğer hiçbir Adapty SDK metodunu çağıramazsınız. Bu metot çözümlenmeden SDK'nın herhangi bir durumu yoktur. `activate()` ile eş zamanlı ya da daha önce yapılan tüm çağrılar [`#2002 notActivated`](error-handling-on-flutter-react-native-unity#custom-network-codes) hatasıyla sonuçlanır.
Uygulamanız kullanıcıları doğruluyorsa ve başlatma sonrasında bir müşteri kullanıcı kimliği topluyorsanız, bu noktada `Adapty().identify()` çağrısını yapın. `identify` tamamlanana kadar kullanıcı eylemine bağlı metotları çağırmayın. Bununla yarışan çağrılar ya [`#3006 profileWasChanged`](error-handling-on-flutter-react-native-unity#custom-network-codes) hatasıyla başarısız olur ya da etkinleştirme sırasında oluşturulan anonim profile düşer. Bu durumda attribution, `appsflyer_id` gibi MMP kimlikleri ve kurulum sahipliği her zaman tanımlanan profile aktarılmaz. Uygulamanız kullanıcıları doğrulamıyorsa `identify` çağrısını atlayın ve anonim profille çalışmaya devam edin.
MMP ve analitik SDK'ları (AppsFlyer, Adjust, Branch, PostHog) aynı kurala tabidir. `Adapty().activate` çağrısından önce bunları başlatın ve UID geri çağırımlarını bekleyin. Aksi takdirde MMP kimliği, kısa ömürlü anonim bir profile düşer ve tanımlı profile her zaman aktarılmaz. AppsFlyer'a özgü ayrıntılar için [AppsFlyer](appsflyer) sayfasına bakın.
## Doğru sıra \{#the-correct-order\}

Hangi adımları izleyeceğiniz iki şeye bağlıdır: müşteri kullanıcı kimliğini ne zaman öğrendiğiniz ve bir MMP ya da analitik SDK kullanıp kullanmadığınız.

- **2. ve 5. adımlar**: Her uygulama için zorunludur. SDK'yı etkinleştirin, ardından SDK yöntemlerini çağırın.
- **1. ve 3. adımlar**: Yalnızca bir MMP veya analitik SDK entegre ediyorsanız gereklidir (AppsFlyer, Adjust, Branch, PostHog).
- **4. adım**: Yalnızca uygulamanız kullanıcıların kimliğini doğruluyorsa ve müşteri kullanıcı kimliğini başlatma sonrasında topluyorsa gereklidir.
Uygulama başlatıldığında müşteri kullanıcı kimliğiniz elinizde varsa, bunu doğrudan `activate()` fonksiyonuna geçirin (adım 2a). Bu yöntem hiçbir zaman anonim profil oluşturmaz, dolayısıyla 4. adım gereksizdir.
| Adım | Çağrı | Ne Zaman | Notlar |
|------|---------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| 1    | MMP veya analitik SDK'nızı başlatın (AppsFlyer, Adjust, PostHog, Branch)                                     | Uygulama açılışı, ilk önce                                                              | MMP'nin UID callback'ini bekleyin, örneğin `getAppsFlyerUID`.                                |
| 2a   | `withCustomerUserId` yapılandırmada ayarlanmış şekilde `Adapty().activate(configuration: ...)`                    | Uygulama açılışı, 1. adımdan sonra, customer user ID'niz varsa                             | Önerilen. Anonim profil hiçbir zaman oluşturulmaz.                                             |
| 2b   | `withCustomerUserId` olmadan `Adapty().activate(configuration: ...)`                                          | Uygulama açılışı, 1. adımdan sonra, customer user ID'niz yoksa (veya hiç toplamıyorsanız) | Adapty anonim bir profil oluşturur.                                                           |
| 3    | Her MMP için `Adapty().setIntegrationIdentifier(key: ..., value: ...)`                                        | 2. adımdan sonra, herhangi bir kullanıcı işlemi çağrısından önce                              | MMP ID'lerinin doğru profile düşmesi için gereklidir.                                               |
| 4    | `await Adapty().identify(customerUserId)`                                                                     | 3. adımdan sonra (veya MMP yoksa 2. adımdan sonra), 5. adımdan önce — yalnızca kimlik doğrulama ile 2b yolunda | Her zaman `await` kullanın. `identify` sırasında eş zamanlı çağrılar `#3006 profileWasChanged` hatasına yol açar.          |
| 5    | `getPaywall` (SDK v4'te `getFlow`), `getPaywallProducts`, `restorePurchases`, `makePurchase`, `updateAttribution`, `updateProfile`  | `identify` çağırıyorsanız 4. adımdan sonra; aksi takdirde 3. adımdan sonra (veya MMP yoksa 2. adımdan sonra)      | Bu çağrılar kararlı bir profil gerektirir.                                                             |
:::important
Bu adımları atlamak; geri dönen kullanıcıların premium erişimini kaybetmesine, profillerde eksik `appsflyer_id` bilgisine ve yanlış kitleye karşı döndürülen paywallara yol açar.
:::
## Web2app ve web-funnel yüklemeleri \{#web2app-and-web-funnel-installs\}

Kullanıcılar web üzerinden ödeme yapıp (Stripe, Paddle) sonradan uygulamayı yüklerse, cihazda ilk çalışan `activate()` yeni bir anonim profil oluşturur. Bu profil, web profiline bağlı değildir. Uygulama açılmadan önce müşteri kullanıcı kimliğini belirleyebiliyorsanız (auth akışınızdan veya install referrer üzerinden), bunu doğrudan `activate()` içine geçirin. Aksi takdirde web satın alımı, `identify("YOUR_USER_ID")` çağrısı yapıp ardından `restorePurchases` çağırana kadar cihazda görünmez.

Her web ödemesiyle gönderilecek metadata için şu sayfalara bakabilirsiniz:

- [Stripe](stripe)
- [Paddle](paddle)