Flow ve paywallları görüntüleme - Flutter
Flow Builder veya Paywall Builder kullanarak bir flow ya da paywall tasarladıysanız, bunu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmeniz gerekmez. Böyle bir flow veya paywall, hem neyin gösterileceğini hem de nasıl gösterileceğini içerir.
Bu kılavuz, flow’lar ve Paywall Builder 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 yol 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östermek için, createFlowView metoduyla oluşturulan view üzerinde view.present() metodunu kullanın. Her view yalnızca bir kez gösterilebilir: kapatıldıktan sonra view bellekten serbest bırakılır. Flow veya paywall’ı tekrar göstermeniz gerekirse, yeni bir view örneği oluşturmak için createFlowView metodunu bir kez daha çağırın.
try {
await view.present();
} on AdaptyError catch (e) {
// handle the error
} catch (e) {
// handle the error
}Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Tam kurulumu, paywall’ların gösterimini, satın alma işlemlerini ve diğer temel işlevleri içeren örnek uygulamalarımıza göz atın.
Flow veya paywall’ı kapat
Flow 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
}Bir view kapatıldığında bellekten silinir — kapatılmış bir view artık yeniden gösterilemez. Bunun yerine createFlowView ile yeni bir tane oluşturun.
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
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) {
},
)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.
Bu kılavuz yalnızca SDK v3.2.0 veya sonrasını gerektiren yeni Paywall Builder paywall’ları içindir. Paywall’ları sunma süreci, farklı Paywall Builder sürümleriyle tasarlanan paywall’lar ve remote config paywall’lar için farklılık gösterir.
- Remote config paywall’larını sunmak için bkz. Remote config ile tasarlanan paywall’ı render etme.
Adapty Flutter SDK, paywall’ları sunmak için iki yöntem 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.
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
}Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Tam kurulumu, paywall’ların gösterimini, satın alma işlemlerini ve diğer temel işlevleri içeren ö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) {
},
)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)
}
}