Flutter SDK'da paywall kullanarak satın almaları etkinleştirme
Uygulama içi satın almaları etkinleştirmek için üç temel kavramı anlamanız gerekir:
- Ürünler – kullanıcıların satın alabileceği her şey (abonelikler, consumable’lar, süresiz erişim)
- Paywall’lar, hangi ürünlerin sunulacağını tanımlayan yapılandırmalardır. Adapty’de ürünleri almanın tek yolu paywall’lardır; ancak bu tasarım sayesinde uygulama kodunuza dokunmadan teklifleri, fiyatlandırmayı ve ürün kombinasyonlarını değiştirebilirsiniz.
- Placement’lar – uygulamanızda paywall’ların nerede ve ne zaman gösterileceği (
main,onboarding,settingsgibi). Kontrol panelinde placement’lar için paywall’lar ayarlarsınız, ardından kodunuzda placement ID’si ile bunları talep edersiniz. Bu yapı, A/B testleri yürütmeyi ve farklı kullanıcılara farklı paywall’lar göstermeyi kolaylaştırır.
Adapty, uygulamanızda satın almaları etkinleştirmek için üç farklı yöntem sunar. Uygulama gereksinimlerinize göre birini seçin:
| Uygulama | Karmaşıklık | Ne zaman kullanılır |
|---|---|---|
| Adapty Paywall Builder | ✅ Kolay | No-code builder’da eksiksiz, satın almaya hazır bir paywall oluşturursunuz. Adapty bunu otomatik olarak render eder; karmaşık satın alma akışını, makbuz doğrulamasını ve abonelik yönetimini arka planda halleder. |
| Elle oluşturulan paywall’lar | 🟡 Orta | Paywall arayüzünü uygulama kodunuzda siz oluşturursunuz; ancak ürün tekliflerinde esnekliği korumak için paywall nesnesini yine Adapty’den alırsınız. Kılavuza bakın. |
| Observer modu | 🔴 Zor | Mevcut satın alma altyapınız var ve bunu kullanmaya devam etmek istiyorsunuz. Observer modunun Adapty’de bazı kısıtlamaları olduğunu unutmayın. Makaleye bakın. |
Aşağıdaki adımlar, Adapty paywall builder’da oluşturulan bir paywall’ın nasıl uygulanacağını göstermektedir.
Paywall builder kullanmak istemiyorsanız elle oluşturulan paywall’larda satın alma işlemlerini yönetme kılavuzuna bakın.
Adapty paywall builder’da oluşturulan bir paywall’ı görüntülemek için uygulama kodunuzda yalnızca şunları yapmanız gerekir:
- Paywall’ı alın: Paywall’ı Adapty’den alın.
- Paywall’ı görüntüleyin, satın almaları Adapty yönetsin: Aldığınız paywall container’ını uygulamanızda gösterin.
- Buton eylemlerini yönetin: Kullanıcıların paywall’daki etkileşimlerini uygulamanızın yanıtlarıyla ilişkilendirin. Örneğin, kullanıcılar butona tıkladığında bağlantıları açın veya paywall’ı kapatın.
Başlamadan önce
Başlamadan önce şu adımları tamamlayın:
- Adapty Kontrol Paneli’nde uygulamanızı App Store ve/veya Google Play’e bağlayın.
- Adapty’de ürünlerinizi oluşturun.
- Bir paywall oluşturun ve ürünleri ekleyin.
- Bir placement oluşturun ve paywall’ınızı ekleyin.
- Uygulama kodunuzda Adapty SDK’yı yükleyin ve etkinleştirin.
Bu adımları tamamlamanın en hızlı yolu hızlı başlangıç kılavuzunu takip etmek veya Developer CLI kullanarak paywall ve placement oluşturmaktır.
1. Paywall’ı alın
Paywall’larınız, kontrol panelinde yapılandırılmış placement’larla ilişkilendirilir. Placement’lar, farklı kitleler için farklı paywall’lar göstermenizi veya A/B testleri çalıştırmanızı sağlar.
Adapty paywall builder’da oluşturulan bir paywall’ı almak için şunları yapmanız gerekir:
-
getPaywallmetodunu kullanarak placement ID’sine görepaywallnesnesini alın vehasViewConfigurationözelliğini kullanarak bunun builder’da oluşturulmuş bir paywall olup olmadığını kontrol edin. -
createPaywallViewmetodunu kullanarak paywall görünümünü oluşturun. Görünüm, paywall’ı görüntülemek için gereken arayüz öğelerini ve stil bilgilerini içerir.
Görünüm yapılandırmasını alabilmek için Paywall Builder’da Show on device geçişini açık konuma getirmeniz gerekir. Aksi takdirde boş bir görünüm yapılandırması alırsınız ve paywall görüntülenmez.
try {
final paywall = await Adapty().getPaywall(placementId: "YOUR_PLACEMENT_ID", locale: "en");
// the requested paywall
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
}
try {
final view = await AdaptyUI().createPaywallView(
paywall: paywall,
);
} on AdaptyError catch (e) {
// handle the error
} catch (e) {
// handle the error
}
2. Paywall’ı görüntüleyin
Paywall yapılandırmasını aldıktan sonra paywall’ınızı görüntülemek için birkaç satır kod eklemeniz yeterlidir.
Paywall’ı 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örüntülemeniz gerekiyorsa yeni bir view örneği oluşturmak için createPaywallView’i bir kez daha çağırın.
try {
await view.present();
} on AdaptyError catch (e) {
// handle the error
} catch (e) {
// handle the error
}
Paywall görüntüleme hakkında daha fazla ayrıntı için kılavuzumuza bakın.
3. Buton eylemlerini yönetin
Kullanıcılar paywall’daki butona tıkladığında Flutter SDK, satın alma ve geri yükleme işlemlerini otomatik olarak yönetir. Ancak diğer butonların özel veya önceden tanımlı ID’leri vardır ve bu eylemler kodunuzda ele alınmalıdır.
Paywall ekranındaki süreçleri kontrol etmek veya izlemek için AdaptyUIPaywallsEventsObserver metodlarını uygulayın ve herhangi bir ekran sunulmadan önce observer’ı ayarlayın. Bir kullanıcı bir eylem gerçekleştirdiğinde paywallViewDidPerformAction çağrılır ve uygulamanızın eylem ID’sine göre yanıt vermesi gerekir.
Örneğin, paywall’ınızda büyük olasılıkla bir kapat butonu ve açılacak URL’ler (kullanım koşulları ve gizlilik politikası gibi) bulunur. Dolayısıyla Close ve OpenUrl ID’lerine sahip eylemlere yanıt vermeniz gerekir.
Buton eylemlerini ve olayları yönetme konusundaki kılavuzlarımızı okuyun.
class _PaywallScreenState extends State<PaywallScreen> implements AdaptyUIPaywallsEventsObserver {
@override
void initState() {
super.initState();
// Register this class as the paywalls event observer
AdaptyUI().setPaywallsEventsObserver(this);
}
// This method is called when user performs an action on the paywall UI
@override
void paywallViewDidPerformAction(AdaptyUIPaywallView view, AdaptyUIAction action) {
switch (action) {
case const CloseAction():
case const AndroidSystemBackAction():
view.dismiss();
break;
case OpenUrlAction(url: final url):
// Open the URL using url_launcher package
_launchUrl(url);
break;
}
}
// Helper method to launch URLs
Future<void> _launchUrl(String url) async {
try {
final Uri uri = Uri.parse(url);
if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
} else {
// Handle case where URL cannot be launched
print('Could not launch $url');
}
} catch (e) {
// Handle any errors
print('Error launching URL: $e');
}
}
}
Sonraki adımlar
Sorularınız mı var ya da sorunlarla mı karşılaşıyorsunuz? Sık sorulan soruların yanıtlarını bulabileceğiniz veya kendi sorularınızı sorabileceğiniz destek forumumuza göz atın. Ekibimiz ve topluluğumuz yardımcı olmak için burada!
Paywall’ınız uygulamada görüntülenmeye hazır. Paywall üzerinden test satın alma işlemini tamamlayabildiğinizden emin olmak için satın almalarınızı App Store sandbox ortamında veya Google Play Store’da test edin.
Şimdi, doğru kullanıcılara paywall gösterdiğinizden veya ücretli özelliklere erişim verdiğinizden emin olmak için kullanıcıların access level’ını kontrol etmeniz gerekiyor.
Tam örnek
Tüm bu adımların uygulamanızda nasıl bir arada kullanılabileceği aşağıda gösterilmiştir.
void main() async {
runApp(MaterialApp(home: PaywallScreen()));
}
class PaywallScreen extends StatefulWidget {
@override
State<PaywallScreen> createState() => _PaywallScreenState();
}
class _PaywallScreenState extends State<PaywallScreen> implements AdaptyUIPaywallsEventsObserver {
@override
void initState() {
super.initState();
// Register this class as the paywalls event observer
AdaptyUI().setPaywallsEventsObserver(this);
_showPaywallIfNeeded();
}
Future<void> _showPaywallIfNeeded() async {
try {
final paywall = await Adapty().getPaywall(
placementId: 'YOUR_PLACEMENT_ID',
);
if (!paywall.hasViewConfiguration) return;
final view = await AdaptyUI().createPaywallView(paywall: paywall);
await view.present();
} catch (_) {
// Handle any errors (network, SDK issues, etc.)
}
}
// This method is called when user performs an action on the paywall UI
@override
void paywallViewDidPerformAction(AdaptyUIPaywallView view, AdaptyUIAction action) {
switch (action) {
case const CloseAction():
case const AndroidSystemBackAction():
view.dismiss();
break;
case OpenUrlAction(url: final url):
// Open the URL using url_launcher package
_launchUrl(url);
break;
}
}
// Helper method to launch URLs
Future<void> _launchUrl(String url) async {
try {
final Uri uri = Uri.parse(url);
if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
} else {
// Handle case where URL cannot be launched
print('Could not launch $url');
}
} catch (e) {
// Handle any errors
print('Error launching URL: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Adapty Paywall Example')),
body: Center(
// Add a button to re-trigger the paywall for testing purposes
child: ElevatedButton(
onPressed: _showPaywallIfNeeded,
child: Text('Show Paywall'),
),
),
);
}
}