Flow ve paywallları göster - Flutter

Bir flow veya eski Paywall Builder’da bir paywall oluşturduysanız, bunu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmeniz gerekmez. Böyle bir flow veya paywall, neyin nasıl gösterileceğini zaten içerir.

Warning

Bu kılavuz, Adapty tarafından render edilen flow’lar ve paywall’lar içindir. Remote config paywall’larını sunmak için bkz. Remote config ile tasarlanmış paywall’ı render etme.

Adapty Flutter SDK, flow’ları ve paywall’ları sunmak için iki yöntem sunar:

  • Bağımsız ekran

  • Gömülü widget

Bağımsız ekran olarak göster

Bir flow veya paywall’ı bağımsız bir ekran olarak görüntülemek için, createFlowView metodu tarafından oluşturulan view üzerinde view.present() metodunu kullanın. Her view yalnızca bir kez gösterilebilir: kapattıktan sonra, view bellekten serbest bırakılır. Flow veya paywall’ı tekrar görüntülemeniz gerekiyorsa, yeni bir view örneği oluşturmak için createFlowView’ı bir kez daha çağırın ya da SDK 4.1 ve sonrasında bellekten serbest bırakmadan kapatın.

try {
  await view.present();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
Tip

Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğini gerçek dünyadan bir örnekle görmek ister misiniz? Paywall gösterme, satın alma yapma ve diğer temel işlevler dahil olmak üzere tam kurulumu sergileyen örnek uygulamalarımıza göz atın.

Flow’u veya paywallı kapat

Flow’u veya paywallı programatik olarak kapatmanız gerektiğinde dismiss() metodunu kullanın:

try {
  await view.dismiss();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
Note

Bir view’ı kapatmak onu bellekten siler — kapatılmış bir view yeniden gösterilemez. Bunun yerine createFlowView ile yeni bir tane oluşturun.

SDK 4.1’den itibaren, view’ı bellekte tutmak için destroy: false parametresini geçebilirsiniz:

await view.dismiss(destroy: false);

Bu görünümü yeniden sunduğunuzda kullanıcı, flow’un o ana kadar oluşturduğu durumla birlikte ayrıldığı ekrana geri döner. Bu şekilde saklanan bir görünüm, destroy: true ile kapatılana kadar bellekte tutulur.

Diyalog göster

Android’de bir flow veya paywall görünümü gösterildiğinde, native uyarı diyalogları yerine bu metodu kullanın. Android’de normal uyarılar görünümün arkasında kalır ve kullanıcılar tarafından görülemez. Bu metod, diyaloğun tüm platformlarda flow veya paywall’ın üzerinde düzgün şekilde gösterilmesini sağlar.

try {
  final action = await view.showDialog(
    title: 'Close paywall?',
    content: 'You will lose access to exclusive offers.',
    primaryActionTitle: 'Stay',
    secondaryActionTitle: 'Close',
  );
  
  if (action == AdaptyUIDialogActionType.secondary) {
    // User confirmed - close the paywall
    await view.dismiss();
  }
  // If primary - do nothing, user stays
} catch (e) {
  // handle error
}

iOS sunum stilini yapılandırın

present() metoduna iosPresentationStyle parametresini geçirerek flow veya paywall’ın iOS’ta nasıl sunulacağını yapılandırın. Bu parametre AdaptyUIIOSPresentationStyle.fullScreen (varsayılan) veya AdaptyUIIOSPresentationStyle.pageSheet değerlerini kabul eder.

try {
  await view.present(iosPresentationStyle: AdaptyUIIOSPresentationStyle.pageSheet);
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

Widget hiyerarşisine gömme

Mevcut widget ağacınıza bir flow veya paywall gömmek için AdaptyUIFlowPlatformView widget’ını doğrudan Flutter widget hiyerarşinizde kullanın.

AdaptyUIFlowPlatformView(
  flow: flow, // The flow object you fetched
  locale: 'en', // The localization to render the flow with
  onDidAppear: (view) {
  },
  onDidDisappear: (view) {
  },
  onDidPerformAction: (view, action) {
  },
  onDidSelectProduct: (view, productId) {
  },
  onDidStartPurchase: (view, product) {
  },
  onDidFinishPurchase: (view, product, purchaseResult) {
  },
  onDidFailPurchase: (view, product, error) {
  },
  onDidStartRestore: (view) {
  },
  onDidFinishRestore: (view, profile) {
  },
  onDidFailRestore: (view, error) {
  },
  onDidReceiveError: (view, error) {
  },
  onDidFailLoadingProducts: (view, error) {
  },
  onDidFinishWebPaymentNavigation: (view, product, error) {
  },
)
Note

Android platform view’ın çalışması için MainActivity’nizin FlutterFragmentActivity’yi genişlettiğinden emin olun:

class MainActivity : FlutterFragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

Paywall Builder kullanarak bir paywall özelleştirdiyseniz, bunu 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.

Warning

Bu kılavuz yalnızca Adapty SDK 3.x için eski Paywall Builder’da oluşturulmuş paywallları kapsar. SDK v3.2.0 veya daha yeni bir sürüm gerektirir. SDK 2.x veya önceki sürümler için oluşturulmuş bir paywall ya da remote config paywall sunmak farklı şekilde çalışır.

Adapty Flutter SDK, paywallları sunmak için iki yol sunar:

  • Bağımsız ekran

  • Gömülü widget

Bağımsız ekran olarak sunma

Bir paywall’ı bağımsız ekran olarak görüntülemek için, createPaywallView metoduyla oluşturulan view üzerinde view.present() metodunu kullanın. Her view yalnızca bir kez kullanılabilir. Paywall’ı tekrar göstermeniz gerekiyorsa, yeni bir view örneği oluşturmak için createPaywallView’ı bir kez daha çağırın.

Warning

Aynı view’ı yeniden oluşturmadan tekrar kullanmak AdaptyUIError.viewAlreadyPresented hatasına yol açabilir.

try {
  await view.present();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
Tip

Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğini gerçek dünyadan bir örnekle görmek ister misiniz? Paywall gösterme, satın alma yapma ve diğer temel işlevler dahil olmak üzere tam kurulumu sergileyen örnek uygulamalarımıza göz atın.

Paywall’ı kapatma

Paywall’ı programatik olarak kapatmanız gerektiğinde dismiss() metodunu kullanın:

try {
  await view.dismiss();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

Diyalog gösterme

Android’de bir paywall görünümü sunulduğunda, yerel uyarı diyalogları yerine bu metodu kullanın. Android’de normal uyarılar paywall görünümünün arkasında kalır ve kullanıcılar tarafından görülemez. Bu metod, tüm platformlarda diyaloğun paywall’ın üzerinde düzgün şekilde gösterilmesini sağlar.

try {
  final action = await view.showDialog(
    title: 'Close paywall?',
    content: 'You will lose access to exclusive offers.',
    primaryActionTitle: 'Stay',
    secondaryActionTitle: 'Close',
  );
  
  if (action == AdaptyUIDialogActionType.secondary) {
    // User confirmed - close the paywall
    await view.dismiss();
  }
  // If primary - do nothing, user stays
} catch (e) {
  // handle error
}

iOS sunum stilini yapılandırın

present() metoduna iosPresentationStyle parametresini geçirerek paywallın iOS’ta nasıl sunulacağını yapılandırın. Parametre, AdaptyUIIOSPresentationStyle.fullScreen (varsayılan) veya AdaptyUIIOSPresentationStyle.pageSheet değerlerini kabul eder.

try {
  await view.present(iosPresentationStyle: AdaptyUIIOSPresentationStyle.pageSheet);
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

Widget hiyerarşisine gömme

Bir paywall’ı mevcut widget ağacınıza gömmek için AdaptyUIPaywallPlatformView widget’ını doğrudan Flutter widget hiyerarşinizde kullanın.

AdaptyUIPaywallPlatformView(
  paywall: paywall, // The paywall object you fetched
  onDidAppear: (view) {
  },
  onDidDisappear: (view) {
  },
  onDidPerformAction: (view, action) {
  },
  onDidSelectProduct: (view, productId) {
  },
  onDidStartPurchase: (view, product) {
  },
  onDidFinishPurchase: (view, product, purchaseResult) {
  },
  onDidFailPurchase: (view, product, error) {
  },
  onDidStartRestore: (view) {
  },
  onDidFinishRestore: (view, profile) {
  },
  onDidFailRestore: (view, error) {
  },
  onDidFailRendering: (view, error) {
  },
  onDidFailLoadingProducts: (view, error) {
  },
  onDidFinishWebPaymentNavigation: (view, product, error) {
  },
)
Note

Android platform view’un çalışması için MainActivity sınıfınızın FlutterFragmentActivity’yi extend ettiğinden emin olun:

class MainActivity : FlutterFragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}