Android SDK'da Observer Modunda Paywall Builder paywall'larını gösterme
Paywall Builder ile özelleştirilmiş bir paywall oluşturduysanız, bunu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render işlemi yapmanıza gerek yoktur. Böyle bir paywall, hem paywall içinde neyin gösterileceğini hem de nasıl gösterileceğini içerir.
Bu bölüm yalnızca Observer modu için geçerlidir. Observer modunda çalışmıyorsanız bunun yerine Android - Paywall Builder paywall’larını gösterme konusuna bakın.
Paywall’ları göstermeye başlamadan önce (Genişletmek için tıklayın)
- Adapty’nin Google Play ve App Store ile başlangıç entegrasyonunu ayarlayın.
- Adapty SDK’yı yükleyin ve yapılandırın.
observerModeparametresinitrueolarak ayarladığınızdan emin olun. Framework’e özgü talimatlarımıza Android için bakın. - Adapty Kontrol Paneli’nde ürünler oluşturun.
- Paywall’ları yapılandırın, ürünleri atayın ve Adapty Kontrol Paneli’ndeki Paywall Builder ile özelleştirin.
- Adapty Kontrol Paneli’nde placement’lar oluşturun ve paywall’larınızı bunlara atayın.
- Mobil uygulama kodunuzda Paywall Builder paywall’larını ve yapılandırmalarını çekin.
AdaptyUiObserverModeHandler’ı uygulayın.
onPurchaseInitiated eventi, kullanıcının bir satın alma işlemi başlattığını size bildirir. Bu callback’e yanıt olarak kendi satın alma akışınızı tetikleyebilirsiniz:
val observerModeHandler =
AdaptyUiObserverModeHandler { product, paywall, paywallView, onStartPurchase, onFinishPurchase ->
onStartPurchase()
yourBillingClient.makePurchase(
product,
onSuccess = { purchase ->
onFinishPurchase()
//handle success
},
onError = {
onFinishPurchase()
//handle error
},
onCancel = {
onFinishPurchase()
//handle cancel
}
)
} AdaptyUiObserverModeHandler observerModeHandler = (product, paywall, paywallView, onStartPurchase, onFinishPurchase) -> {
onStartPurchase.invoke();
yourBillingClient.makePurchase(
product,
purchase -> {
onFinishPurchase.invoke();
//handle success
},
error -> {
onFinishPurchase.invoke();
//handle error
},
() -> { //cancellation
onFinishPurchase.invoke();
//handle cancel
}
);
}; Observer modunda restore işlemlerini yönetmek için getRestoreHandler()’ı override edin. Varsayılan olarak null döndürür; bu durumda Adapty’nin yerleşik Adapty.restorePurchases() akışı kullanılır. Kendi restore implementasyonunuzu sağlamak için:
val observerModeHandler = object : AdaptyUiObserverModeHandler {
// onPurchaseInitiated implementation (see above)
override fun getRestoreHandler() =
AdaptyUiObserverModeHandler.RestoreHandler { onStartRestore, onFinishRestore ->
onStartRestore()
yourBillingClient.restorePurchases(
onSuccess = { restoredPurchases ->
onFinishRestore()
//handle successful restore
},
onError = {
onFinishRestore()
//handle error
}
)
}
} AdaptyUiObserverModeHandler observerModeHandler = new AdaptyUiObserverModeHandler() {
// onPurchaseInitiated implementation (see above)
@Override
public RestoreHandler getRestoreHandler() {
return (onStartRestore, onFinishRestore) -> {
onStartRestore.invoke();
yourBillingClient.restorePurchases(
restoredPurchases -> {
onFinishRestore.invoke();
//handle successful restore
},
error -> {
onFinishRestore.invoke();
//handle error
}
);
};
}
}; Satın alma veya restore sürecini AdaptyUI’ya bildirmek için aşağıdaki callback’leri çağırmayı unutmayın. Bu, yükleyici gösterme gibi paywall davranışlarının düzgün çalışması için gereklidir:
| Callback | Açıklama |
|---|---|
| onStartPurchase() | Satın alma işleminin başladığını AdaptyUI’ya bildirmek için çağrılmalıdır. |
| onFinishPurchase() | Satın alma işleminin tamamlandığını AdaptyUI’ya bildirmek için çağrılmalıdır. |
| onStartRestore() | İsteğe bağlı. Restore işleminin başladığını AdaptyUI’ya bildirmek için çağrılabilir. |
| onFinishRestore() | İsteğe bağlı. Restore işleminin tamamlandığını AdaptyUI’ya bildirmek için çağrılabilir. |
- Görsel paywall’ı cihaz ekranında göstermek için önce yapılandırmanız gerekir.
Bunun için AdaptyUI.getPaywallView() metodunu çağırın veya AdaptyPaywallView’ı doğrudan oluşturun:
val paywallView = AdaptyUI.getPaywallView(
activity,
viewConfiguration,
products,
eventListener,
personalizedOfferResolver,
tagResolver,
timerResolver,
observerModeHandler,
) val paywallView =
AdaptyPaywallView(activity) // or retrieve it from xml
...
with(paywallView) {
showPaywall(
viewConfiguration,
products,
eventListener,
personalizedOfferResolver,
tagResolver,
timerResolver,
observerModeHandler,
)
} AdaptyPaywallView paywallView = AdaptyUI.getPaywallView(
activity,
viewConfiguration,
products,
eventListener,
personalizedOfferResolver,
tagResolver,
timerResolver,
observerModeHandler
); AdaptyPaywallView paywallView =
new AdaptyPaywallView(activity); //add to the view hierarchy if needed, or you receive it from xml
...
paywallView.showPaywall(viewConfiguration, products, eventListener, personalizedOfferResolver, tagResolver, timerResolver, observerModeHandler); <com.adapty.ui.AdaptyPaywallView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" /> View başarıyla oluşturulduktan sonra view hiyerarşisine ekleyebilir ve görüntüleyebilirsiniz.
Bunun için şu composable fonksiyonu kullanın:
AdaptyPaywallScreen(
viewConfiguration,
products,
eventListener,
personalizedOfferResolver,
tagResolver,
timerResolver,
) İstek parametreleri:
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| Products | isteğe bağlı | Ekranda ürünlerin görüntülenme zamanlamasını optimize etmek için AdaptyPaywallProduct dizisi sağlayın. null geçilirse AdaptyUI gerekli ürünleri otomatik olarak çeker. |
| ViewConfiguration | zorunlu | Paywall’ın görsel ayrıntılarını içeren AdaptyViewConfiguration nesnesini sağlayın. Yüklemek için Adapty.getViewConfiguration(paywall) metodunu kullanın. Daha fazla ayrıntı için Paywall’ın görsel yapılandırmasını çekme konusuna bakın. |
| EventListener | isteğe bağlı | Paywall eventlerini gözlemlemek için AdaptyUiEventListener sağlayın. Kullanım kolaylığı açısından AdaptyUiDefaultEventListener’ı genişletmeniz önerilir. Daha fazla ayrıntı için Paywall eventlerini yönetme konusuna bakın. |
| PersonalizedOfferResolver | isteğe bağlı | Kişiselleştirilmiş fiyatlandırmayı (daha fazla bilgi) belirtmek için AdaptyUiPersonalizedOfferResolver’ı uygulayın ve AdaptyPaywallProduct’ı ürün fiyatı kişiselleştirilmişse true, değilse false ile eşleştiren kendi mantığınızı geçirin. |
| TagResolver | isteğe bağlı | Paywall metnindeki özel etiketleri çözümlemek için AdaptyUiTagResolver kullanın. Bu resolver bir etiket parametresi alır ve bunu karşılık gelen bir string’e çözer. Daha fazla ayrıntı için Paywall Builder’da Özel Etiketler konusuna bakın. |
| ObserverModeHandler | Observer modu için zorunlu | Önceki adımda uyguladığınız AdaptyUiObserverModeHandler. |
| variationId | zorunlu | Varyasyonun string tanımlayıcısı. AdaptyPaywall nesnesinin variationId özelliğini kullanarak alabilirsiniz. |
| transaction | zorunlu | iOS, StoreKit1 için: iOS, StoreKit 2 için: Transaction nesnesi. Android için: Satın almanın string tanımlayıcısı ( |
Paywall’ları göstermeye başlamadan önce (Genişletmek için tıklayın)
- Adapty’nin Google Play ve App Store ile başlangıç entegrasyonunu ayarlayın.
- Adapty SDK’yı yükleyin ve yapılandırın.
observerModeparametresinitrueolarak ayarladığınızdan emin olun. Framework’e özgü talimatlarımıza Android, React Native, Flutter ve Unity için bakın. - Adapty Kontrol Paneli’nde ürünler oluşturun.
- Paywall’ları yapılandırın, ürünleri atayın ve Adapty Kontrol Paneli’ndeki Paywall Builder ile özelleştirin.
- Adapty Kontrol Paneli’nde placement’lar oluşturun ve paywall’larınızı bunlara atayın.
- Mobil uygulama kodunuzda Paywall Builder paywall’larını ve yapılandırmalarını çekin.
AdaptyUiObserverModeHandler’ı uygulayın.AdaptyUiObserverModeHandler’ın callback’i (onPurchaseInitiated), kullanıcı bir satın alma başlattığında sizi bilgilendirir. Bu callback’e yanıt olarak kendi satın alma akışınızı şu şekilde tetikleyebilirsiniz:
val observerModeHandler =
AdaptyUiObserverModeHandler { product, paywall, paywallView, onStartPurchase, onFinishPurchase ->
onStartPurchase()
yourBillingClient.makePurchase(
product,
onSuccess = { purchase ->
onFinishPurchase()
//handle success
},
onError = {
onFinishPurchase()
//handle error
},
onCancel = {
onFinishPurchase()
//handle cancel
}
)
} AdaptyUiObserverModeHandler observerModeHandler = (product, paywall, paywallView, onStartPurchase, onFinishPurchase) -> {
onStartPurchase.invoke();
yourBillingClient.makePurchase(
product,
purchase -> {
onFinishPurchase.invoke();
//handle success
},
error -> {
onFinishPurchase.invoke();
//handle error
},
() -> { //cancellation
onFinishPurchase.invoke();
//handle cancel
}
);
}; Ayrıca bu callback’leri AdaptyUI’ya çağırmayı unutmayın. Bu, yükleyici gösterme gibi paywall davranışlarının düzgün çalışması için gereklidir:
| Kotlin’de Callback | Java’da Callback | Açıklama |
|---|---|---|
| onStartPurchase() | onStartPurchase.invoke() | Satın alma işleminin başladığını AdaptyUI’ya bildirmek için çağrılmalıdır. |
| onFinishPurchase() | onFinishPurchase.invoke() | Satın alma işleminin başarıyla tamamlandığını, tamamlanamadığını veya iptal edildiğini AdaptyUI’ya bildirmek için çağrılmalıdır. |
- Görsel paywall’ı görüntülemek için önce başlatmanız gerekir. Bunun için
AdaptyUI.getPaywallView()metodunu çağırın veyaAdaptyPaywallView’ı doğrudan oluşturun:
val paywallView = AdaptyUI.getPaywallView(
activity,
viewConfiguration,
products,
AdaptyPaywallInsets.of(topInset, bottomInset),
eventListener,
personalizedOfferResolver,
tagResolver,
observerModeHandler,
)
//======= OR =======
val paywallView =
AdaptyPaywallView(activity) // or retrieve it from xml
...
with(paywallView) {
setEventListener(eventListener)
setObserverModeHandler(observerModeHandler)
showPaywall(
viewConfiguration,
products,
AdaptyPaywallInsets.of(topInset, bottomInset),
personalizedOfferResolver,
tagResolver,
)
} AdaptyPaywallView paywallView = AdaptyUI.getPaywallView(
activity,
viewConfiguration,
products,
AdaptyPaywallInsets.of(topInset, bottomInset),
eventListener,
personalizedOfferResolver,
tagResolver,
observerModeHandler
);
//======= OR =======
AdaptyPaywallView paywallView =
new AdaptyPaywallView(activity); //add to the view hierarchy if needed, or you receive it from xml
...
paywallView.setEventListener(eventListener);
paywallView.setObserverModeHandler(observerModeHandler);
paywallView.showPaywall(viewConfiguration, products, AdaptyPaywallInsets.of(topInset, bottomInset), personalizedOfferResolver); <com.adapty.ui.AdaptyPaywallView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" /> View başarıyla oluşturulduktan sonra view hiyerarşisine ekleyebilir ve görüntüleyebilirsiniz.
İstek parametreleri:
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| Products | isteğe bağlı | Ekranda ürünlerin görüntülenme zamanlamasını optimize etmek için AdaptyPaywallProduct dizisi sağlayın. null geçilirse AdaptyUI gerekli ürünleri otomatik olarak çeker. |
| ViewConfiguration | zorunlu | Paywall’ın görsel ayrıntılarını içeren AdaptyViewConfiguration nesnesini sağlayın. Yüklemek için Adapty.getViewConfiguration(paywall) metodunu kullanın. Daha fazla ayrıntı için Paywall’ın görsel yapılandırmasını çekme konusuna bakın. |
| Insets | zorunlu | Sistem çubukları tarafından örtülen alanı tanımlayan, içerik için dikey boşluklar oluşturan AdaptyPaywallInsets nesnesini tanımlayın. Durum çubuğu veya gezinme çubuğu AdaptyPaywallView’ı örtmüyorsa AdaptyPaywallInsets.NONE geçin. Sistem çubuklarının UI’ınızın bir kısmını örttüğü tam ekran modunda, inset’leri aşağıdaki tablonun altında gösterildiği şekilde alın. |
| EventListener | isteğe bağlı | Paywall eventlerini gözlemlemek için AdaptyUiEventListener sağlayın. Kullanım kolaylığı açısından AdaptyUiDefaultEventListener’ı genişletmeniz önerilir. Daha fazla ayrıntı için Paywall eventlerini yönetme konusuna bakın. |
| PersonalizedOfferResolver | isteğe bağlı | Kişiselleştirilmiş fiyatlandırmayı (daha fazla bilgi) belirtmek için AdaptyUiPersonalizedOfferResolver’ı uygulayın ve AdaptyPaywallProduct’ı ürün fiyatı kişiselleştirilmişse true, değilse false ile eşleştiren kendi mantığınızı geçirin. |
| TagResolver | isteğe bağlı | Paywall metnindeki özel etiketleri çözümlemek için AdaptyUiTagResolver kullanın. Bu resolver bir etiket parametresi alır ve bunu karşılık gelen bir string’e çözer. Daha fazla ayrıntı için Paywall Builder’da Özel Etiketler konusuna bakın. |
| ObserverModeHandler | Observer modu için zorunlu | Önceki adımda uyguladığınız AdaptyUiObserverModeHandler. |
| variationId | zorunlu | Varyasyonun string tanımlayıcısı. AdaptyPaywall nesnesinin variationId özelliğini kullanarak alabilirsiniz. |
| transaction | zorunlu | iOS, StoreKit1 için: iOS, StoreKit 2 için: Transaction nesnesi. Android için: Satın almanın string tanımlayıcısı ( |
Sistem çubuklarının UI’ınızın bir kısmını örttüğü tam ekran modunda, inset’leri şu şekilde alın:
import androidx.core.graphics.Insets
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
//create extension function
fun View.onReceiveSystemBarsInsets(action: (insets: Insets) -> Unit) {
ViewCompat.setOnApplyWindowInsetsListener(this) { _, insets ->
val systemBarInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())
ViewCompat.setOnApplyWindowInsetsListener(this, null)
action(systemBarInsets)
insets
}
}
//and then use it with the view
paywallView.onReceiveSystemBarsInsets { insets ->
val paywallInsets = AdaptyPaywallInsets.of(insets.top, insets.bottom)
paywallView.setEventListener(eventListener)
paywallView.setObserverModeHandler(observerModeHandler)
paywallView.showPaywall(viewConfig, products, paywallInsets, personalizedOfferResolver, tagResolver)
} import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
...
ViewCompat.setOnApplyWindowInsetsListener(paywallView, (view, insets) -> {
Insets systemBarInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars());
ViewCompat.setOnApplyWindowInsetsListener(paywallView, null);
AdaptyPaywallInsets paywallInsets =
AdaptyPaywallInsets.of(systemBarInsets.top, systemBarInsets.bottom);
paywallView.setEventListener(eventListener);
paywallView.setObserverModeHandler(observerModeHandler);
paywallView.showPaywall(viewConfiguration, products, paywallInsets, personalizedOfferResolver, tagResolver);
return insets;
}); Döndürülen değerler:
| Nesne | Açıklama |
|---|---|
AdaptyPaywallView | İstenen paywall ekranını temsil eden nesne. |
Satın alma işlemlerini paywall’larla ilişkilendirmeyi unutmayın. Aksi takdirde Adapty, satın almanın hangi paywall’dan geldiğini belirleyemez.