Flutter - Yeni Paywall Builder paywalllarını sunma

Paywall Builder ile bir paywall özelleştirdiyseniz, onu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmenize gerek yoktur. Bu tür 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 üzerini gerektiren yeni Paywall Builder paywallları içindir. Paywall sunma süreci, farklı Paywall Builder sürümleriyle tasarlanan paywalllar ve remote config paywalllar için farklılık gösterir.

Adapty Flutter SDK, paywallları 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ırma

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 görünümünü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)
    }
}