Flow ve paywall'ları alma - Kotlin Multiplatform

getFlow ile alınanlar
✦
Flow'lar Flow & Paywall Builder ile oluşturulur — cihazda natif olarak render edilir, WebView gerekmez
✦
Eski Paywall Builder paywall'ları Eski Paywall Builder ile oluşturulmuş tüm içerik

Flow’unuzu tasarladıktan sonra onu mobil uygulamanızda görüntüleyebilirsiniz. İlk adım, placement ile ilişkili flow veya paywall’ı ve görünüm yapılandırmasını aşağıda açıklandığı şekilde almaktır.

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.

Başlamadan önce

İhtiyacınız olanlar:

Flow/paywall getirme

Eğer builder’da bir flow veya paywall tasarladıysanız, bunu kullanıcıya göstermek için mobil uygulama kodunuzda render etme konusunda endişelenmenize gerek yok. Böyle bir flow veya paywall, içinde neyin gösterileceğini ve nasıl gösterileceğini zaten içerir. Bununla birlikte, placement aracılığıyla ID’sini, görünüm yapılandırmasını almanız ve ardından mobil uygulamanızda sunmanız gerekir.

En iyi performansı sağlamak için, flow veya paywall’ı ve bunların görünüm yapılandırmasını mümkün olduğunca erken almanız kritik öneme sahiptir; böylece görseller kullanıcıya sunulmadan önce indirmek için yeterli süre tanınmış olur.

Bir flow veya paywall almak için getFlow metodunu kullanın:


Adapty.getFlow(
    placementId = "YOUR_PLACEMENT_ID",
    fetchPolicy = AdaptyPaywallFetchPolicy.Default,
    loadTimeout = 5.seconds
).onSuccess { flow ->
    // istenen flow/paywall
}.onError { error ->
    // hatayı işle
}

Parametreler:

ParametreZorunlulukAçıklama
placementIdzorunluİstenen Placement’ın tanımlayıcısı. Bu, Adapty Kontrol Paneli’nde placement oluştururken belirttiğiniz değerdir.
fetchPolicyvarsayılan: AdaptyPaywallFetchPolicy.Default

fetchPolicy, SDK’nın önce hangi katmanı okuyacağını belirler; önbelleği kullanıp kullanamayacağını değil. Varsayılan olarak SDK önce sunucuya gider ve bu istek başarısız olursa önbelleğe alınan verileri döndürür. Kullanıcılarınızın her zaman en güncel verilere ulaşmasını sağladığı için bu varyantı öneririz.

Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla karşılaştığını düşünüyorsanız AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad seçeneğini değerlendirin; bu seçenek sırayı tersine çevirir — önce önbelleği okur ve yalnızca önbellekte hiçbir şey yoksa sunucuya gider. Kullanıcılar mutlak olarak en son verilere ulaşamayabilir, ancak internet bağlantıları ne kadar kesintili olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, dolayısıyla ağ isteklerini önlemek amacıyla oturum sırasında kullanmak güvenlidir.

Üçüncü bir politika olan AdaptyPaywallFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAgeMillis), ikisi arasında bir yerde konumlanır: önbelleğe alınan kopya maxAgeMillis değerinden daha yeni olduğu sürece önce önbelleği okur, daha eski olduğunda ise sunucuya gider.

Önbelleğin uygulama yeniden başlatıldığında silinmediğini, yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında temizlendiğini unutmayın.

Adapty SDK, flow’ları ve paywall’ları yerel olarak iki katmanda depolar: yukarıda açıklanan düzenli olarak güncellenen önbellek ve yedek paywall’lar. Bunları daha hızlı getirmek için CDN, CDN’e ulaşılamadığı durumlarda ise bağımsız bir yedek sunucu kullanırız. Bu sistem, internet bağlantısının zayıf olduğu durumlarda bile güvenilirliği sağlarken her zaman en son sürümü almanızı garantilemek amacıyla tasarlanmıştır.

loadTimeoutvarsayılan: 5 sn

Bu değer, metodun zaman aşımını sınırlandırır. Zaman aşımına ulaşılırsa önbelleğe alınan veriler veya yerel yedek döndürülür.

Nadir durumlarda bu metodun loadTimeout içinde belirtilenden biraz daha geç zaman aşımına uğrayabileceğini unutmayın; çünkü işlem arka planda farklı isteklerden oluşuyor olabilir.

Kotlin Multiplatform için: Duration oluşturmak amacıyla 5.seconds gibi extension function’lar kullanabilirsiniz; burada .seconds, kotlin.time.Duration.Companion.seconds’dan gelir.

Yanıt parametreleri:

ParametreAçıklama
FlowPlacement’ı, tanımlayıcıları (instanceIdentity, variationId), adı, paywall varyasyonlarını (paywalls — AdaptyFlowPaywall listesi) ve remote config’leri (remoteConfigs — her locale için bir girdi içeren liste) barındıran AdaptyFlow nesnesi. Ön yükleme, özel arayüz veya programatik kontroller için gerçek ürünleri getirmek istiyorsanız getPaywallProducts(flow) metodunu çağırın.

Görünüm yapılandırmasını getir

Flow veya paywall’ı getirdikten sonra, görünüm yapılandırmasını yükleyin ve createFlowView metoduyla görünümü tek adımda oluşturun. Kontrol etmeniz gereken ayrı bir bayrak yoktur: placement Flow & Paywall Builder (flow) veya old Paywall Builder (paywall) ile tasarlanmışsa, createFlowView görünümü sunuma hazır şekilde döndürür. Placement, Builder arayüzü olmayan özel bir paywall ise createFlowView bir AdaptyResult.Error döndürür — bunu bir remote config paywall olarak ele alın.

Important

Flow’u yayınladığınızdan emin olun. Yayınlanmamış düzenlemeleri olan bir flow Dirty statüsünde görünür ve ilgili placement en son yayınlanan sürümü sunmaya devam eder.


AdaptyUI.createFlowView(
    flow = flow,
    loadTimeout = 5.seconds,
    preloadProducts = true
).onSuccess { view ->
    // use view
}.onError { error ->
    // the flow has no view configured, or view creation failed
}
ParametreZorunlulukAçıklama
flowzorunluAdapty.getFlow aracılığıyla elde edilen bir AdaptyFlow nesnesi.
localeisteğe bağlıGörünümü oluşturmak için kullanılacak flow yerelleştirmesinin tanımlayıcısı — örneğin en veya pt-br. Belirtilmezse görünüm en dilinde oluşturulur; flow’da en yoksa flow’un varsayılan yerelleştirmesi kullanılır. Bkz. Yerelleştirmeler ve yerel ayar kodları.
customLayoutId

isteğe bağlı

varsayılan: null

SDK 4.1+

Flow Builder’da tanımlanmış bir düzene ait özel kimlik. SDK’nın cihaz türü ve ekran boyutuna göre otomatik seçtiği düzen yerine belirli bir düzeni oluşturmak için bu değeri iletin. Kimlikle eşleşen bir düzen bulunamazsa flow, görünüm yapılandırması olmadan yüklenir.
loadTimeoutisteğe bağlıBu değer, metodun zaman aşımı süresini sınırlandırır. Zaman aşımına ulaşılırsa önbelleğe alınmış veriler veya yerel yedek döndürülür. Arka planda farklı isteklerden oluşabileceğinden, bu metod belirtilen loadTimeout değerinden biraz daha geç zaman aşımına uğrayabilir. kotlin.time.Duration.Companion içindeki 5.seconds gibi genişletme fonksiyonlarını kullanabilirsiniz.
preloadProductsisteğe bağlıDaha iyi performans için ürünleri önceden yüklemek amacıyla true olarak ayarlayın. Etkinleştirildiğinde ürünler önceden yüklenir ve flow veya paywall’ın gösterilmesi için gereken süre kısalır.
productPurchaseParamsisteğe bağlıAdaptyProductIdentifier ile AdaptyPurchaseParameters eşlemesi. Flow veya paywall’daki her ürün için kişiselleştirilmiş teklifler veya abonelik güncelleme parametreleri gibi satın alma özgü parametreleri yapılandırmak için kullanın.
Note

Birden fazla dil kullanıyorsanız, flow yerelleştirmesi eklemeyi öğrenin.

Yüklendikten sonra, flow veya paywall’ı gösterin.

Varsayılan kitle için flow veya paywall alarak daha hızlı yükleme sağlayın

Genellikle flow’lar ve paywall’lar neredeyse anında yüklenir, bu yüzden bu süreci hızlandırmak için endişelenmenize gerek yoktur. Ancak çok sayıda kitle ve placement’ınız varsa ve kullanıcılarınızın internet bağlantısı zayıfsa, bir flow veya paywall’ı yüklemek istediğinizden daha uzun sürebilir. Bu gibi durumlarda, hiçbir şey göstermek yerine sorunsuz bir kullanıcı deneyimi sağlamak için varsayılan bir flow veya paywall görüntülemek isteyebilirsiniz.

Bunu gidermek için, belirtilen placement’ın All Users kitlesi için flow veya paywall’ını çeken getFlowForDefaultAudience metodunu kullanabilirsiniz. Ancak şunu anlamak kritik önem taşır: önerilen yaklaşım, flow veya paywall’ı yukarıdaki Flow/paywall’ı getir bölümünde ayrıntılı olarak açıklandığı şekilde getFlow metoduyla çekmektir.

Warning

Neden getFlow kullanmanızı öneriyoruz

getFlowForDefaultAudience metodunun birkaç önemli dezavantajı vardır:

  • Potansiyel geriye dönük uyumluluk sorunları: Farklı uygulama sürümleri için (mevcut ve gelecekteki) farklı flow’lar göstermeniz gerekirse zorluklarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen flow’lar tasarlamanız ya da mevcut (eski) sürüme sahip kullanıcıların render edilemeyen flow’larla sorun yaşayabileceğini kabul etmeniz gerekecektir.
  • Hedefleme kaybı: Tüm kullanıcılar All Users kitlesine yönelik tasarlanmış aynı flow’u görecektir; bu da kişiselleştirilmiş hedeflemeyi (ülkelere, pazarlama attribution’ına veya kendi özel özelliklerinize göre hedefleme dahil) kaybettiğiniz anlamına gelir.

Bu dezavantajları göze alarak daha hızlı flow veya paywall getirme işleminden yararlanmak istiyorsanız, getFlowForDefaultAudience metodunu aşağıdaki gibi kullanın. Aksi takdirde yukarıda açıklanan getFlow metodunu kullanmaya devam edin.


Adapty.getFlowForDefaultAudience(
    placementId = "YOUR_PLACEMENT_ID",
    fetchPolicy = AdaptyPaywallFetchPolicy.Default,
).onSuccess { flow ->
    // the requested flow
}.onError { error ->
    // handle the error
}
ParametreZorunlulukAçıklama
placementIdzorunluPlacement kimliği. Bu değeri Adapty Kontrol Paneli’nde bir placement oluştururken belirtirsiniz.
fetchPolicyvarsayılan: AdaptyPaywallFetchPolicy.Default

fetchPolicy, SDK’nın önbelleği kullanıp kullanamayacağını değil, hangi katmanı önce okuyacağını belirler. Varsayılan olarak SDK önce sunucuya gider ve bu istek başarısız olursa önbelleğe alınmış veriyi döndürür. Bu yaklaşımı öneriyoruz çünkü kullanıcılarınızın her zaman en güncel verileri almasını sağlar.

Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla baş ettiğini düşünüyorsanız AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad seçeneğini değerlendirin. Bu seçenek öncelik sırasını tersine çevirir: önce önbelleği okur, yalnızca önbellekte hiçbir şey yoksa sunucuya gider. Kullanıcılar en güncel verilere ulaşamayabilir; ancak internet bağlantısı ne kadar kesintili olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir; bu nedenle ağ isteklerinden kaçınmak için oturum sırasında güvenle kullanılabilir.

Üçüncü bir politika olan AdaptyPaywallFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAgeMillis) iki seçenek arasında bir yerde durur: önbelleğe alınan kopya maxAgeMillis değerinden daha yeniyken önbelleği okur, daha eski olduğunda ise sunucuya gider.

Önbelleğin uygulama yeniden başlatmalarında korunduğunu; yalnızca uygulama yeniden yüklendiğinde veya manuel temizleme yapıldığında silindiğini unutmayın.

Varlıkları özelleştirme

Flow veya paywallınızdaki görselleri ve videoları özelleştirmek için özel varlıkları uygulayın.

Hero görseller ve videolar önceden tanımlanmış ID’lere sahiptir: hero_image ve hero_video. Özel bir varlık paketinde, bu öğeleri ID’leriyle hedefler ve davranışlarını özelleştirirsiniz.

Diğer görseller ve videolar için Adapty kontrol panelinde özel bir ID belirlemeniz gerekir.

Örneğin şunları yapabilirsiniz:

  • Bazı kullanıcılara farklı bir görsel veya video gösterme.
  • Uzak ana görsel yüklenirken yerel bir önizleme görseli gösterme.
  • Video başlamadan önce bir önizleme görseli gösterme.

İşte özel varlıkları bir map aracılığıyla nasıl sağlayabileceğinize dair bir örnek:

Info

Kotlin Multiplatform SDK yalnızca yerel varlıkları destekler. Uzak içerikler için, bunları özel varlıklarda kullanmadan önce indirip yerel olarak önbelleğe almanız gerekir.

// Import generated Res class for accessing resources

viewModelScope.launch {
    // Get URIs for bundled resources using Res.getUri()
    val heroImagePath = Res.getUri("files/images/hero_image.png")
    val demoVideoPath = Res.getUri("files/videos/demo_video.mp4")

    // Or read image as byte data
    val imageByteData = Res.readBytes("files/images/avatar.png")

    // Create custom assets map
    val customAssets: Map<String, AdaptyCustomAsset> = mapOf(
        // Load image from app resources (bundled with the app)
        // Files should be placed in commonMain/composeResources/files/
        "hero_image" to AdaptyCustomAsset.localImageResource(
            path = heroImagePath
        ),

        // Or use image byte data
        "avatar" to AdaptyCustomAsset.localImageData(
            data = imageByteData
        ),

        // Load video from app resources
        "demo_video" to AdaptyCustomAsset.localVideoResource(
            path = demoVideoPath
        ),

        // Or use a video file from device storage
        "intro_video" to AdaptyCustomAsset.localVideoFile(
            path = "/path/to/local/video.mp4"
        )
    )

    // Use custom assets when creating the flow view
    AdaptyUI.createFlowView(
        flow = flow,
        customAssets = customAssets
    ).onSuccess { view ->
        // Present the flow with custom assets
        view.present()
    }.onError { error ->
        // Handle the error - the flow will fall back to default appearance
    }
}
Note

Bir varlık bulunamazsa veya yüklenemezse, flow veya paywall Builder’da yapılandırılan varsayılan görünümüne geri döner.

Adapty Kontrol Paneli’nde eski Paywall Builder ile paywall’unuzun görsel kısmını tasarladıktan sonra, bunu mobil uygulamanızda görüntüleyebilirsiniz. Bu süreçteki ilk adım, aşağıda açıklandığı şekilde placement ile ilişkili paywall’u ve görünüm yapılandırmasını almaktır.

Paywall Builder ile özelleştirilmiş paywalllar için bu konuya başvurduğunuzu unutmayın. Paywalllarınızı manuel olarak uyguluyorsanız, lütfen Mobil uygulamanızda remote config paywalllar için paywallları ve ürünleri getirme konusuna bakın.

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.

Mobil uygulamanızda paywall göstermeye başlamadan önce (genişletmek için tıklayın)
  1. Adapty Kontrol Paneli’nde ürünlerinizi oluşturun.
  2. Adapty Kontrol Paneli’nde bir paywall oluşturun ve ürünleri ekleyin.
  3. Adapty Kontrol Paneli’nde placement’lar oluşturun ve paywallınızı ekleyin.
  4. Mobil uygulamanıza Adapty SDK yükleyin.

Paywall Builder ile tasarlanan paywall’ı getirme

Paywall Builder ile bir paywall tasarladıysanız, bunu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmenize gerek yoktur. Böyle bir paywall; paywall içinde ne gösterileceğini ve bunların nasıl gösterileceğini zaten içerir. Yine de placement üzerinden paywall ID’sini, görünüm yapılandırmasını almanız ve ardından bunu mobil uygulamanızda sunmanız gerekir.

En iyi performansı sağlamak için, görsellerin kullanıcıya sunulmadan önce indirilmesine yeterli zaman tanımak amacıyla paywall’ı ve görünüm yapılandırmasını mümkün olduğunca erken almanız kritik önem taşır.

Paywall almak için getPaywall metodunu kullanın:


Adapty.getPaywall(
    placementId = "YOUR_PLACEMENT_ID",
    locale = "en",
    fetchPolicy = AdaptyPaywallFetchPolicy.Default,
    loadTimeout = 5.seconds
).onSuccess { paywall ->
    // the requested paywall
}.onError { error ->
    // handle the error
}

Parametreler:

ParametreZorunlulukAçıklama
placementIdzorunluİstenen Placement tanımlayıcısı. Adapty Kontrol Paneli’nde bir placement oluştururken belirttiğiniz değerdir.
locale

isteğe bağlı

varsayılan: en

Paywall yerelleştirmesinin tanımlayıcısı. Bu parametre, eksi (-) karakteriyle ayrılmış bir veya iki alt etiketten oluşan bir dil kodu olmalıdır. İlk alt etiket dil, ikincisi bölge içindir.

Örnek: en İngilizce anlamına gelir, pt-br Brezilya Portekizcesini temsil eder.

Yerel ayar kodları ve bunların nasıl kullanılması gerektiği hakkında daha fazla bilgi için Yerelleştirmeler ve yerel ayar kodları bölümüne bakın.

fetchPolicyvarsayılan: AdaptyPaywallFetchPolicy.Default

fetchPolicy, SDK’nın önbelleği kullanıp kullanamayacağını değil, hangi katmanı önce okuyacağını belirler. SDK varsayılan olarak önce sunucuya gider ve bu istek başarısız olursa önbelleğe alınmış verileri döndürür. Kullanıcılarınızın her zaman en güncel verileri almasını sağladığından bu seçeneği öneririz.

Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla uğraştığını düşünüyorsanız AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad seçeneğini göz önünde bulundurun; bu seçenek sırayı tersine çevirir — önce önbelleği okur ve yalnızca önbellekte hiçbir şey yoksa sunucuya gider. Kullanıcılar en son verileri alamayabilir, ancak internet bağlantıları ne kadar kesintili olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, bu nedenle ağ isteklerinden kaçınmak için oturum süresince kullanmak güvenlidir.

Üçüncü bir politika olan AdaptyPaywallFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAgeMillis), ikisi arasında yer alır: önbelleğe alınan kopya maxAgeMillis değerinden daha yeni olduğu sürece önbelleği okur, daha eski olduğunda ise sunucuya gider.

Önbelleğin uygulama yeniden başlatıldığında sağlam kaldığını ve yalnızca uygulama yeniden yüklendiğinde veya manuel temizleme yoluyla silindiğini unutmayın.

Adapty SDK, paywallları yerel olarak iki katmanda depolar: yukarıda açıklanan düzenli olarak güncellenen önbellek ve yedek paywalllar. Paywallları daha hızlı getirmek için CDN ve CDN’ye ulaşılamadığı durumlarda bağımsız bir yedek sunucu da kullanıyoruz. Bu sistem, internet bağlantısının yetersiz olduğu durumlarda bile güvenilirliği sağlarken her zaman paywalllarınızın en son sürümünü almanızı garantilemek için tasarlanmıştır.

loadTimeoutvarsayılan: 5 sn

Bu değer, bu yöntem için zaman aşımını sınırlar. Zaman aşımına ulaşılırsa önbelleğe alınmış veriler veya yerel yedek döndürülür.

Nadir durumlarda bu yöntemin loadTimeout içinde belirtilenden biraz daha geç zaman aşımına uğrayabileceğini unutmayın; çünkü işlem arka planda farklı isteklerden oluşabilir.

Kotlin Multiplatform için: TimeInterval’ı uzantı fonksiyonlarıyla (örneğin 5.seconds, burada .seconds, import com.adapty.utils.seconds ifadesinden gelir) veya TimeInterval.seconds(5) ile oluşturabilirsiniz. Sınırlama koymamak için TimeInterval.INFINITE kullanın.

Yanıt parametreleri:

ParametreAçıklama
PaywallÜrün ID’lerinin listesini, paywall tanımlayıcısını, remote config’i ve diğer çeşitli özellikleri içeren bir AdaptyPaywall nesnesi.

Paywall Builder ile tasarlanan paywallın görünüm yapılandırmasını getirme

Important

Paywall Builder’da Show on device geçişinin etkin olduğundan emin olun. Bu seçenek açık değilse görünüm yapılandırması alınamaz.

Paywall’ı aldıktan sonra, Paywall Builder kullanılarak oluşturulduğunu gösteren ViewConfiguration öğesini içerip içermediğini kontrol edin. Bu, paywall’ı nasıl göstereceğiniz konusunda size rehberlik eder. ViewConfiguration mevcutsa Paywall Builder paywall’ı olarak değerlendirin; yoksa remote config paywall olarak ele alın.

Görünüm yapılandırmasını yüklemek için createPaywallView metodunu kullanın.


if (paywall.hasViewConfiguration) {
    AdaptyUI.createPaywallView(
        paywall = paywall,
        loadTimeout = 5.seconds,
        preloadProducts = true
    ).onSuccess { paywallView ->
        // use paywallView
    }.onError { error ->
        // handle the error
    }
} else {
    // use your custom logic
}
ParametreZorunlulukAçıklama
paywallzorunluİstenen paywall için bir controller almak üzere kullanılan AdaptyPaywall nesnesi.
loadTimeoutisteğe bağlıBu değer, metodun zaman aşımı süresini sınırlar. Zaman aşımına ulaşılırsa önbellekteki veri veya yerel yedek döndürülür. Nadir durumlarda bu metodun zaman aşımı, loadTimeout içinde belirtilenden biraz daha geç gerçekleşebilir; çünkü işlem arka planda farklı isteklerden oluşabilir. kotlin.time.Duration.Companion kaynaklı 5.seconds gibi uzantı fonksiyonlarını kullanabilirsiniz.
preloadProductsisteğe bağlıDaha iyi performans için ürünleri önceden yüklemek üzere true olarak ayarlayın. Etkinleştirildiğinde ürünler önceden yüklenir ve paywall’ın gösterilmesi için gereken süre azalır.
productPurchaseParamsisteğe bağlıAdaptyProductIdentifier ile AdaptyPurchaseParameters arasındaki bir eşleme. Paywalldaki her bir ürün için kişiselleştirilmiş teklifler veya abonelik güncelleme parametreleri gibi satın alma’ya özgü parametreleri yapılandırmak için kullanın.
Note

Birden fazla dili destekliyorsanız, paywallınıza bir yerelleştirme ekleyin. Kullanılacak kodlar için Yerelleştirmeler ve yerel ayar kodları bölümüne bakın.

Yüklendikten sonra paywall’ı gösterin.

Daha hızlı getirmek için varsayılan kitle paywallını alma

Paywalllar genellikle neredeyse anında getirilir, bu yüzden bu süreci hızlandırmak için endişelenmenize gerek yoktur. Ancak çok sayıda kitle ve paywalla sahip olduğunuzda ve kullanıcılarınızın internet bağlantısı zayıf olduğunda, paywall getirme işlemi istediğinizden daha uzun sürebilir. Bu gibi durumlarda, hiç paywall göstermemek yerine sorunsuz bir kullanıcı deneyimi sağlamak amacıyla varsayılan bir paywall görüntülemek isteyebilirsiniz.

Bu sorunu çözmek için, belirtilen placement’ın All Users kitlesine ait paywallını getiren getPaywallForDefaultAudience metodunu kullanabilirsiniz. Ancak önerilen yaklaşımın, yukarıdaki Paywall Bilgilerini Getirme bölümünde ayrıntılı olarak açıklanan getPaywall metodu olduğunu unutmayın.

Warning

Neden getPaywall kullanmanızı öneriyoruz

getPaywallForDefaultAudience metodunun bazı önemli dezavantajları vardır:

  • Olası geriye dönük uyumluluk sorunları: Farklı uygulama sürümleri (mevcut ve gelecekteki) için farklı paywalllar göstermeniz gerekiyorsa zorluklarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen paywalllar tasarlamak zorunda kalacaksınız ya da mevcut (eski) sürümdeki kullanıcıların render edilemeyen paywalllarla karşılaşmasını kabul edeceksiniz.
  • Hedefleme kaybı: Tüm kullanıcılar All Users kitlesi için tasarlanmış aynı paywall’ı görür; bu da kişiselleştirilmiş hedeflemeyi (ülkelere, pazarlama attribution’ına veya kendi özel niteliklerinize göre) ortadan kaldırır.

Daha hızlı paywall getirme avantajından yararlanmak için bu dezavantajları kabul etmeye hazırsanız, getPaywallForDefaultAudience metodunu aşağıdaki gibi kullanın. Aksi takdirde yukarıda açıklanan getPaywall metodunu kullanmaya devam edin.


Adapty.getPaywallForDefaultAudience(
    placementId = "YOUR_PLACEMENT_ID",
    locale = "en",
    fetchPolicy = AdaptyPaywallFetchPolicy.Default,
).onSuccess { paywall ->
    // the requested paywall
}.onError { error ->
    // handle the error
}
ParametreZorunlulukAçıklama
placementIdzorunluPlacement tanımlayıcısı. Adapty Kontrol Paneli’nde bir placement oluştururken belirttiğiniz değerdir.
locale

isteğe bağlı

varsayılan: en

Paywall yerelleştirmesinin tanımlayıcısı. Bu parametre, eksi (-) karakteriyle ayrılmış bir veya daha fazla alt etiket içeren bir dil kodu olmalıdır. İlk alt etiket dili, ikincisi ise bölgeyi belirtir.

Örnek: en İngilizce anlamına gelir, pt-br ise Brezilya Portekizcesini temsil eder.

Yerel ayar kodları ve bunların nasıl kullanılmasını önerdiğimiz hakkında daha fazla bilgi için Yerelleştirmeler ve yerel ayar kodları sayfasına bakın.

fetchPolicyvarsayılan: AdaptyPaywallFetchPolicy.Default

fetchPolicy, SDK’nın önbelleği kullanıp kullanamayacağını değil, hangi katmanı önce okuyacağını belirler. SDK varsayılan olarak önce sunucuya gider ve bu istek başarısız olursa önbelleğe alınmış veriyi döner. Kullanıcılarınızın her zaman en güncel verileri almasını sağladığından bu seçeneği öneriyoruz.

Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla karşılaştığını düşünüyorsanız AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad seçeneğini değerlendirin; bu seçenek sırayı tersine çevirir — önce önbelleği okur, hiçbir şey önbellekte yoksa sunucuya gider. Kullanıcılar en son verileri alamayabilir, ancak internet bağlantıları ne kadar kesintili olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, bu nedenle ağ isteklerini önlemek için oturum sırasında kullanmak güvenlidir.

Üçüncü bir politika olan AdaptyPaywallFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAgeMillis), ikisi arasında bir yerde durur: önbelleğe alınan kopya maxAgeMillis değerinden daha yeni olduğu sürece önbelleği okur, daha eski olduğunda ise sunucuya gider.

Önbelleğin uygulama yeniden başlatıldığında sağlam kaldığını ve yalnızca uygulama yeniden yüklendiğinde veya manuel temizleme yoluyla silindiğini unutmayın.

Varlıkları özelleştirme

Paywallinızdaki görselleri ve videoları özelleştirmek için özel varlıkları uygulayın.

Kahraman görselleri ve videoları önceden tanımlanmış ID’lere sahiptir: hero_image ve hero_video. Özel bir varlık paketinde bu öğeleri ID’leri aracılığıyla hedefler ve davranışlarını özelleştirirsiniz.

Diğer görseller ve videolar için Adapty kontrol panelinde özel bir ID belirlemeniz gerekir.

Örneğin şunları yapabilirsiniz:

  • Bazı kullanıcılara farklı bir görsel veya video gösterin.
  • Uzak ana görsel yüklenirken yerel bir önizleme görseli gösterin.
  • Video çalışmadan önce bir önizleme görseli gösterin.
Important

Bu özelliği kullanmak için Adapty SDK’yı 3.7.0 veya üzeri sürüme güncelleyin.

Özel varlıkları bir map aracılığıyla nasıl sağlayabileceğinize dair bir örnek:

Info

Kotlin Multiplatform SDK yalnızca yerel varlıkları destekler. Uzak içerikler için, özel varlıklarda kullanmadan önce varlıkları indirip yerel olarak önbelleğe almanız gerekir.

// Import generated Res class for accessing resources

viewModelScope.launch {
    // Get URIs for bundled resources using Res.getUri()
    val heroImagePath = Res.getUri("files/images/hero_image.png")
    val demoVideoPath = Res.getUri("files/videos/demo_video.mp4")

    // Or read image as byte data
    val imageByteData = Res.readBytes("files/images/avatar.png")

    // Create custom assets map
    val customAssets: Map<String, AdaptyCustomAsset> = mapOf(
        // Load image from app resources (bundled with the app)
        // Files should be placed in commonMain/composeResources/files/
        "hero_image" to AdaptyCustomAsset.localImageResource(
            path = heroImagePath
        ),

        // Or use image byte data
        "avatar" to AdaptyCustomAsset.localImageData(
            data = imageByteData
        ),

        // Load video from app resources
        "demo_video" to AdaptyCustomAsset.localVideoResource(
            path = demoVideoPath
        ),

        // Or use a video file from device storage
        "intro_video" to AdaptyCustomAsset.localVideoFile(
            path = "/path/to/local/video.mp4"
        ),

        // Apply custom brand colors
        "brand_primary" to AdaptyCustomAsset.color(
            colorHex = "#FF6B35"
        ),

        // Create gradient background
        "card_gradient" to AdaptyCustomAsset.linearGradient(
            colors = listOf("#1E3A8A", "#3B82F6", "#60A5FA"),
            stops = listOf(0.0f, 0.5f, 1.0f)
        )
    )

    // Use custom assets when creating paywall view
    AdaptyUI.createPaywallView(
        paywall = paywall,
        customAssets = customAssets
    ).onSuccess { paywallView ->
        // Present the paywall with custom assets
        paywallView.present()
    }.onError { error ->
        // Handle the error - paywall will fall back to default appearance
    }
}
Note

Bir asset bulunamaz veya yüklenemezse, paywall Paywall Builder’da yapılandırılmış varsayılan görünümüne geri döner.