---
title: "Flow ve paywallları görüntüleme - iOS"
description: "iOS uygulamanızda kullanıcılara flow ve paywallları sunun."
---

<MethodPromo method="getFlow" label="Flow ve paywallları görüntüle" />

Bir flow veya paywall oluştturduysanız, bunu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmenize gerek yok. Söz konusu flow veya paywall, içinde neyin gösterileceğini ve nasıl gösterileceğini zaten içeriyor.

Aşağıda kullanılan `AdaptyUI.FlowConfiguration` nesnesini edinmek için [Flow ve paywallları getir](get-pb-paywalls) sayfasına bakın.

## SwiftUI'da flow ve paywallları sunma \{#present-flows-and-paywalls-in-swiftui\}

### Ekranda modal görünüm olarak göster \{#present-as-a-modal-view\}

Bir flow veya paywall'ı cihaz ekranında modal görünüm olarak göstermek için SwiftUI'da `.flow` modifier'ını kullanın. En temel çağrı; `isPresented`, `flowConfiguration` ve beş zorunlu callback'i gerektirir:
```swift showLineNumbers title="SwiftUI"
.flow(
    isPresented: $flowPresented,
    flowConfiguration: <AdaptyUI.FlowConfiguration>,
    didFinishPurchase: { _, _ in /* dismiss, or do nothing to let the flow continue */ },
    didFailPurchase: { _, _ in /* handle the error */ },
    didFinishRestore: { _ in /* check access level and dismiss */ },
    didFailRestore: { _ in /* handle the error */ },
    didReceiveError: { _ in flowPresented = false }
)
```

Daha fazla kontrol için, buton tıklamalarını yönetmek amacıyla `didPerformAction` gibi isteğe bağlı callback'ler ekleyin:
```swift showLineNumbers title="SwiftUI"
@State var flowPresented = false // ensure that you manage this variable state and set it to `true` at the moment you want to show the flow or paywall

var body: some View {
  Text("Hello, AdaptyUI!")
      .flow(
          isPresented: $flowPresented,
          flowConfiguration: <AdaptyUI.FlowConfiguration>,
          didPerformAction: { action in
              switch action {
                  case .close:
                      flowPresented = false
                  default:
                      // Handle other actions
                      break
              }
          },
          didFinishPurchase: { product, purchaseResult in /* dismiss, or do nothing to let the flow continue */ },
          didFailPurchase: { product, error in /* handle the error */ },
          didFinishRestore: { profile in /* check access level and dismiss */ },
          didFailRestore: { error in /* handle the error */ },
          didReceiveError: { error in flowPresented = false }
      )
}
```

(empty input — nothing to translate)
| Parametre              | Zorunlu  | Açıklama                                                                                                                                                                                                                                                                |
|:-----------------------|:---------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **isPresented**        | zorunlu | Flow veya paywall ekranının görüntülenip görüntülenmediğini yöneten bir binding.                                                                                                                                                                                                    |
| **flowConfiguration**  | zorunlu | Flow veya paywallın görsel ayrıntılarını içeren bir `AdaptyUI.FlowConfiguration` nesnesi. `AdaptyUI.getFlowConfiguration(forFlow:)` metodunu kullanın. Daha fazla bilgi için [Flow ve paywall'ları alma](get-pb-paywalls) bölümüne bakın.                                                    |
| **didFinishPurchase**  | zorunlu | `Adapty.makePurchase()` başarıyla tamamlandığında çağrılır. Flow otomatik olarak kapanmaz — burada sunum binding'inizi `false` olarak ayarlayabilir ya da hiçbir şey yapmayarak flow'un satın alma sonrasında devam etmesine izin verebilirsiniz.                                                            |
| **didFailPurchase**    | zorunlu | `Adapty.makePurchase()` başarısız olduğunda çağrılır.                                                                                                                                                                                                                                |
| **didFinishRestore**   | zorunlu | `Adapty.restorePurchases()` başarıyla tamamlandığında çağrılır.                                                                                                                                                                                                                           |
| **didFailRestore**     | zorunlu | `Adapty.restorePurchases()` başarısız olduğunda çağrılır.                                                                                                                                                                                                                            |
| **didReceiveError**    | zorunlu | Bir render hatası veya flow scriptinden kaynaklanan bir çalışma zamanı hatası için çağrılır (örneğin, bir JavaScript istisnası, `AdaptyUIError` kodu `4105`). Render hataları için [Adapty Destek](mailto:support@adapty.io) ile iletişime geçin.                                                       |
| **fullScreen**         | isteğe bağlı | Flow veya paywallın tam ekran modunda mı yoksa sayfa olarak mı görüneceğini belirler. Varsayılan değer `true`'dur.                                                                                                                                                                           |
| **didAppear**          | isteğe bağlı | Flow veya paywall görünümü sunulduğunda çağrılır.                                                                                                                                                                                                                       |
| **didDisappear**       | isteğe bağlı | Flow veya paywall görünümü kapatıldığında çağrılır.                                                                                                                                                                                                                    |
| **didPerformAction**   | isteğe bağlı | Kullanıcı bir butona tıkladığında çağrılır. `close` ve `openURL` olmak üzere iki action ID önceden tanımlanmıştır; diğerleri özelleştirilebilir ve builder'da ayarlanabilir.                                                                                                                               |
| **didSelectProduct**   | isteğe bağlı | Kullanıcı veya sistem tarafından satın almak üzere bir ürün seçildiğinde çağrılır.                                                                                                                                                                                              |
| **didStartPurchase**   | isteğe bağlı | Kullanıcı satın alma sürecini başlattığında çağrılır.                                                                                                                                                                                                                         |
| **didFinishWebPaymentNavigation** | isteğe bağlı | Web ödeme navigasyonu tamamlandığında çağrılır.                                                                                                                                                                                                                    |
| **didStartRestore**    | isteğe bağlı | Kullanıcı geri yükleme sürecini başlattığında çağrılır.                                                                                                                                                                                                                          |
| **didFailLoadingProducts** | isteğe bağlı | Ürün yükleme sırasında hata oluştuğunda çağrılır. Yeniden yüklemeyi denemek için `true` döndürün.                                                                                                                                                                                      |
| **didPartiallyLoadProducts** | isteğe bağlı | Ürünler kısmen yüklendiğinde çağrılır.                                                                                                                                                                                                                          |
| **showAlertItem**      | isteğe bağlı | Flow veya paywallın üzerinde uyarı öğelerinin görüntülenmesini yöneten bir binding.                                                                                                                                                                                               |
| **showAlertBuilder**   | isteğe bağlı | Uyarı görünümünü render etmek için kullanılan bir fonksiyon.                                                                                                                                                                                                                                   |
| **placeholderBuilder** | isteğe bağlı | Flow veya paywall yüklenirken placeholder görünümünü render etmek için kullanılan bir fonksiyon. Varsayılan olarak `ProgressView` kullanılır.                                                                                                                                          |
iOS olaylarını işleme konusundaki parametreler hakkında daha fazla bilgi için [iOS - Olayları İşleme](ios-handling-events) konusuna bakın.
### Modal olmayan görünüm olarak sunma \{#present-as-a-non-modal-view\}

Flow'ları ve paywall'ları uygulamanızın navigasyon akışında navigasyon hedefleri veya satır içi görünümler olarak da sunabilirsiniz. SwiftUI görünümlerinizde doğrudan `AdaptyFlowView` kullanın:
```swift showLineNumbers title="SwiftUI"
AdaptyFlowView(
    flowConfiguration: <AdaptyUI.FlowConfiguration>,
    didFinishPurchase: { product, purchaseResult in
        // Dismiss the view, or do nothing to let the flow continue
    },
    didFailPurchase: { product, error in
        // Handle purchase failure
    },
    didFinishRestore: { profile in
        // Handle successful restore
    },
    didFailRestore: { error in
        // Handle restore failure
    },
    didReceiveError: { error in
        // Handle the error (rendering or JS exception from the flow script).
    }
)
```

## Flow'ları ve paywallları UIKit'te sunma \{#present-flows-and-paywalls-in-uikit\}

Flow'u veya paywall'ı cihaz ekranında görüntülemek için şu adımları izleyin:

1. Görüntülemek istediğiniz görsel flow'u `AdaptyUI.flowController(with:delegate:)` metodunu kullanarak başlatın:

     ```swift showLineNumbers title="Swift"
     import AdaptyUI

     let visualFlow = try AdaptyUI.flowController(
         with: <AdaptyUI.FlowConfiguration>,
         delegate: <AdaptyFlowControllerDelegate>
     )
     ```

    İstek parametreleri:
| Parametre | Zorunluluk | Açıklama |
   | :----------------------- | :------- | :---------- |
   | **flowConfiguration**    | zorunlu | Akış veya paywallın görsel detaylarını içeren bir `AdaptyUI.FlowConfiguration` nesnesi. `AdaptyUI.getFlowConfiguration(forFlow:)` metodunu kullanın. Daha fazla bilgi için [Flow ve paywallları alma](get-pb-paywalls) konusuna bakın. |
   | **delegate**             | zorunlu | Flow ve paywall olaylarını dinlemek için kullanılan `AdaptyFlowControllerDelegate`. Daha fazla bilgi için [Flow & paywall olaylarını yönetme](ios-handling-events) konusuna bakın. |

    Döndürür:
| Nesne | Açıklama |
   | :---------------------- | :------------------------------------------------------- |
   | **AdaptyFlowController** | İstenen flow veya paywall ekranını temsil eden bir nesne. |

2. Nesne başarıyla oluşturulduktan sonra cihazın ekranında görüntüleyebilirsiniz:

   ```swift showLineNumbers title="Swift"
   present(visualFlow, animated: true)
   ```

:::tip
Adapty SDK'nın bir mobil uygulamaya nasıl entegre edildiğine dair gerçek bir örnek görmek ister misiniz? Tam kurulumu, paywall görüntüleme, satın alma yapma ve diğer temel işlevleri içeren [örnek uygulamalarımıza](sample-apps) göz atın.

:::

---

> [!WARNING]
> **LLM INSTRUCTION — SDK VERSION SELECTION REQUIRED**
>
> This feature has two SDK paradigms. Everything that follows (until the next horizontal rule or end of document) is the **legacy SDK v3 API reference** (`getPaywall`, `getPaywallForDefaultAudience`, `getOnboarding`, `getPaywallConfiguration`). The **SDK v4+ `getFlow` method is documented above.** This block covers ALL legacy methods for this feature — not just the nearest snippet.
>
> **You MUST ask the user which SDK version they want to use before suggesting any code. Do not assume or default to a version.** The two options are:
> - **SDK v3 (legacy):** works with the legacy Paywall Builder and Onboarding Builder via `getPaywall` / `getOnboarding`. Use the legacy code in this section.
> - **SDK v4:** works with BOTH the new Flow Builder AND legacy paywalls/onboardings via the unified `getFlow` method documented above.
>
> Apply the legacy v3 code in this section ONLY when:
> 1. The user explicitly chose **SDK v3**, or
> 2. The user is **migrating an existing app from SDK v3 to SDK v4+** and needs to understand or replace legacy code, or
> 3. The user is **troubleshooting an already-deployed v3 integration**.
>
> **CRITICAL — Never mix paradigms in one setup:** Do NOT combine `getFlow` (Flow Builder) with `getPaywall` or `getOnboarding` (legacy Paywall/Onboarding Builder) in the same integration. These are incompatible patterns. Mixing them will produce inconsistent behavior and is unsupported.

Paywall Builder ile bir paywall özelleştirdiyseniz, onu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmeniz gerekmez. Böyle bir paywall, hem ne gösterileceğini hem de nasıl gösterileceğini içerir.
`AdaptyUI.PaywallConfiguration` nesnesini almak için bkz. [Paywall Builder paywalllarını ve yapılandırmalarını getirme](get-pb-paywalls).
## SwiftUI'da paywallları sunma \{#present-paywalls-in-swiftui\}

### Cihaz ekranında modal görünüm olarak sunma \{#present-as-a-modal-view\}

Görsel paywallı cihaz ekranında modal görünüm olarak göstermek için SwiftUI'da `.paywall` modifier'ını kullanın:
```swift showLineNumbers title="SwiftUI"
@State var paywallPresented = false // ensure that you manage this variable state and set it to `true` at the moment you want to show the paywall

var body: some View {
  Text("Hello, AdaptyUI!")
      .paywall(
          isPresented: $paywallPresented,
          paywallConfiguration: <AdaptyUI.PaywallConfiguration>,
          didPerformAction: { action in
              switch action {
                  case .close:
                      paywallPresented = false
                  default:
                      // Handle other actions
                      break
              }
          },
          didFinishPurchase: { product, profile in paywallPresented = false },
          didFailPurchase: { product, error in /* handle the error */ },
          didFinishRestore: { profile in /* check access level and dismiss */  },
          didFailRestore: { error in /* handle the error */ },
          didFailRendering: { error in paywallPresented = false }
      )
}
```

Parameters:
| Parametre                         | Zorunlu  | Açıklama                                                                                                                                                                                                                                                                                                                    |
|:----------------------------------|:---------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **isPresented**                   | zorunlu  | Paywall ekranının görüntülenip görüntülenmeyeceğini yöneten bir binding.                                                                                                                                                                                                                                                    |
| **paywallConfiguration**          | zorunlu  | Paywallın görsel ayrıntılarını içeren bir `AdaptyUI.PaywallConfiguration` nesnesi. `AdaptyUI.paywallConfiguration(for:products:viewConfiguration:observerModeResolver:tagResolver:timerResolver:)` metodunu kullanın. Daha fazla bilgi için [Paywall Builder paywalllarını ve yapılandırmalarını getirme](get-pb-paywalls) konusuna bakın. |
| **didFailPurchase**               | zorunlu  | `Adapty.makePurchase()` başarısız olduğunda çağrılır.                                                                                                                                                                                                                                                                       |
| **didFinishRestore**              | zorunlu  | `Adapty.restorePurchases()` başarıyla tamamlandığında çağrılır.                                                                                                                                                                                                                                                             |
| **didFailRestore**                | zorunlu  | `Adapty.restorePurchases()` başarısız olduğunda çağrılır.                                                                                                                                                                                                                                                                   |
| **didFailRendering**              | zorunlu  | Arayüz oluşturulurken bir hata meydana gelirse çağrılır. Bu durumda [Adapty Destek](mailto:support@adapty.io) ile iletişime geçin.                                                                                                                                                                                          |
| **fullScreen**                    | isteğe bağlı | Paywallın tam ekran modunda mı yoksa modal olarak mı görüneceğini belirler. Varsayılan değer `true`'dur.                                                                                                                                                                                                                    |
| **didAppear**                     | isteğe bağlı | Paywall görünümü sunulduğunda çağrılır.                                                                                                                                                                                                                                                                                     |
| **didDisappear**                  | isteğe bağlı | Paywall görünümü kapatıldığında çağrılır.                                                                                                                                                                                                                                                                                   |
| **didPerformAction**              | isteğe bağlı | Kullanıcı bir düğmeye tıkladığında çağrılır. Farklı düğmelerin farklı aksiyon ID'leri vardır. `close` ve `openURL` olmak üzere iki aksiyon ID'si önceden tanımlıdır; diğerleri özeldir ve builder'da ayarlanabilir.                                                                                                         |
| **didSelectProduct**              | isteğe bağlı | Bir ürün satın almak üzere seçildiyse (kullanıcı veya sistem tarafından) bu callback çağrılır.                                                                                                                                                                                                                              |
| **didStartPurchase**              | isteğe bağlı | Kullanıcı satın alma işlemine başladığında çağrılır.                                                                                                                                                                                                                                                                        |
| **didFinishPurchase**             | isteğe bağlı | `Adapty.makePurchase()` başarıyla tamamlandığında çağrılır.                                                                                                                                                                                                                                                                 |
| **didFinishWebPaymentNavigation** | isteğe bağlı | Web ödeme navigasyonu tamamlandığında çağrılır.                                                                                                                                                                                                                                                                             |
| **didStartRestore**               | isteğe bağlı | Kullanıcı geri yükleme işlemine başladığında çağrılır.                                                                                                                                                                                                                                                                      |
| **didFailLoadingProducts**        | isteğe bağlı | Ürün yükleme sırasında hata oluştuğunda çağrılır. Yüklemeyi yeniden denemek için `true` döndürün.                                                                                                                                                                                                                           |
| **didPartiallyLoadProducts**      | isteğe bağlı | Ürünler kısmen yüklendiğinde çağrılır.                                                                                                                                                                                                                                                                                      |
| **showAlertItem**                 | isteğe bağlı | Paywallın üzerindeki uyarı öğelerinin görüntülenmesini yöneten bir binding.                                                                                                                                                                                                                                                 |
| **showAlertBuilder**              | isteğe bağlı | Uyarı görünümünü oluşturmaya yarayan bir fonksiyon.                                                                                                                                                                                                                                                                         |
| **placeholderBuilder**            | isteğe bağlı | Paywall yüklenirken yer tutucu görünümünü oluşturmaya yarayan bir fonksiyon.                                                                                                                                                                                                                                                |
iOS olaylarını işleme hakkında parametreler için [iOS - Olayları işleme](ios-handling-events) konusuna bakın.
### Kalıcı olmayan görünüm olarak sunma \{#present-as-a-non-modal-view\}

Paywall'ları uygulamanızın navigasyon akışında bir navigasyon hedefi veya satır içi görünüm olarak da sunabilirsiniz. SwiftUI görünümlerinizde doğrudan `AdaptyPaywallView` kullanın:
```swift showLineNumbers title="SwiftUI"
AdaptyPaywallView(
    paywallConfiguration: <AdaptyUI.PaywallConfiguration>,
    didFailPurchase: { product, error in
        // Handle purchase failure
    },
    didFinishRestore: { profile in
        // Handle successful restore
    },
    didFailRestore: { error in
        // Handle restore failure
    },
    didFailRendering: { error in
        // Handle rendering error
    }
)
```

## UIKit'te paywall'ları sunma \{#present-paywalls-in-uikit\}

Paywall'ı cihaz ekranında görüntülemek için şunları yapın:

1. Görüntülemek istediğiniz paywall'ı `.paywallController(for:products:viewConfiguration:delegate:)` metodunu kullanarak başlatın:

     ```swift showLineNumbers title="Swift"
     import AdaptyUI

     let visualPaywall = AdaptyUI.paywallController(
         with: <paywall configuration object>,
         delegate: <AdaptyPaywallControllerDelegate>
     )
     ```

    İstek parametreleri:
| Parametre                | Zorunluluk | Açıklama |
   | :----------------------- | :------- | :---------- |
   | **paywall configuration**         | zorunlu | Paywallın görsel ayrıntılarını içeren bir `AdaptyUI.PaywallConfiguration` nesnesi. `AdaptyUI.getPaywallConfiguration(forPaywall:locale:)` metodunu kullanın. Daha fazla bilgi için [Paywall Builder paywalllarını ve yapılandırmalarını getirme](get-pb-paywalls) konusuna bakın. |
   | **delegate**            | zorunlu | Paywall olaylarını dinlemek için bir `AdaptyPaywallControllerDelegate`. Daha fazla bilgi için [Paywall olaylarını yönetme](ios-handling-events) konusuna bakın. |
Döner:

   | Nesne                   | Açıklama                                             |
   | :---------------------- | :--------------------------------------------------- |
   | **AdaptyPaywallController** | İstenen paywall ekranını temsil eden bir nesne |

2. Nesne başarıyla oluşturulduktan sonra cihaz ekranında gösterebilirsiniz:

   ```swift showLineNumbers title="Swift"
   present(visualPaywall, animated: true)
   ```

:::tip
Adapty SDK'nın bir mobil uygulamaya nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Kurulumun tamamını, paywall gösterimi, satın alma işlemleri ve diğer temel işlevler dahil olmak üzere ele alan [örnek uygulamalarımıza](sample-apps) göz atın.

:::

---