Kotlin Multiplatform SDK'da remote config paywallları için paywall ve ürün getirme

Remote config ve özel paywallları göstermeden önce, bunlara ilişkin bilgileri getirmeniz gerekir. Bu konunun remote config ve özel paywalllarla ilgili olduğunu unutmayın. Paywall Builder ile özelleştirilmiş paywalllar için getirme rehberine ulaşmak üzere bkz. Paywall Builder paywalllarını ve yapılandırmalarını getirme.

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.

Mobil uygulamanızda paywall ve ürün getirmeye 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ünlerinizi paywall’a ekleyin.

  3. Adapty Kontrol Paneli’nde placement oluşturun ve paywall’ınızı placement’a ekleyin.

  4. Mobil uygulamanıza Adapty SDK’yı yükleyin.

Paywall bilgilerini getirme

Adapty’de bir ürün, App Store ve Google Play’deki ürünlerin birleşiminden oluşur. Bu platformlar arası ürünler paywall’lara entegre edilerek belirli mobil uygulama placement’larında görüntülenmelerine olanak tanır.

Ürünleri görüntülemek için getPaywall metoduyla placement’larınızdan birinden bir Paywall almanız gerekir.

Ürün ID’lerini kodunuza sabit olarak yazmayın. Sabit olarak yazmanız gereken tek ID, placement ID’sidir. Paywalllar uzaktan yapılandırıldığından ürün sayısı ve mevcut teklifler her an değişebilir. Uygulamanızın bu değişiklikleri dinamik olarak ele alması gerekir — bir paywall bugün iki ürün döndürüyorsa yarın üç döndürebilir; kod değişikliği yapmadan hepsini görüntüleyin.

import com.adapty.kmp.Adapty
import com.adapty.kmp.models.AdaptyPaywallFetchPolicy

Adapty.getPaywall(
    placementId = "YOUR_PLACEMENT_ID", 
    locale = "en",
    fetchPolicy = AdaptyPaywallFetchPolicy.Default,
    loadTimeout = 5.seconds
).onSuccess { paywall ->
    // the requested paywall
}.onError { error ->
    // handle the error
}
ParametreZorunlulukAçıklama
placementIdzorunluPlacement tanımlayıcısı. Adapty Kontrol Paneli’nde 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 etiketten oluşan bir dil kodu olarak beklenir. İlk alt etiket dil, ikincisi bölge içindir.

Örnek: en İngilizce, pt-br Brezilya Portekizcesini temsil eder.

fetchPolicyvarsayılan: AdaptyPaywallFetchPolicy.Default

SDK varsayılan olarak sunucudan veri yüklemeye çalışır; başarısız olursa önbelleğe alınmış veriyi döndürür. Kullanıcılarınızın her zaman en güncel verilere erişmesini sağladığı için bu seçeneği öneririz.

Ancak kullanıcılarınızın istikrarsız bir internet bağlantısına sahip olduğunu düşünüyorsanız, mevcut önbellek verisini döndürmek için AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad kullanmayı değerlendirin. Bu senaryoda kullanıcılar en güncel veriyi göremeyebilir; ancak internet bağlantıları ne kadar zayıf olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, bu nedenle ağ isteklerinden kaçınmak amacıyla oturum boyunca kullanmak güvenlidir.

Ö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, paywallları iki katmanda saklar: yukarıda açıklanan düzenli olarak güncellenen önbellek ve yedek paywalllar. Paywallları daha hızlı getirmek için CDN, CDN’ye ulaşılamadığında ise bağımsız bir yedek sunucu kullanırız. Bu sistem, internet bağlantısının zayıf olduğu durumlarda bile her zaman en güncel paywall sürümünü almanızı ve güvenilirliği sağlamak amacıyla tasarlanmıştır.

loadTimeoutvarsayılan: 5 sn

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

Nadir durumlarda bu metodun, arka planda farklı isteklerden oluşabileceğinden loadTimeout’ta belirtilenden biraz daha geç zaman aşımına uğrayabileceğini unutmayın.

Ürün ID’lerini kodunuza sabit olarak yazmayın! Paywalllar uzaktan yapılandırıldığından mevcut ürünler, ürün sayısı ve özel teklifler (ücretsiz deneme gibi) zaman içinde değişebilir. Kodunuzun bu senaryoları ele aldığından emin olun.
Örneğin, başlangıçta 2 ürün getiriyorsanız uygulamanız o 2 ürünü göstermelidir. Ancak daha sonra 3 ürün getirirseniz uygulamanız kod değişikliği gerektirmeden 3 ürünü de görüntülemelidir. Sabit olarak yazmanız gereken tek şey placement ID’sidir.

Yanıt parametreleri:

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

Ürün getirme

Paywall’ı aldıktan sonra buna karşılık gelen ürün dizisini sorgulayabilirsiniz:

Adapty.getPaywallProducts(paywall).onSuccess { products ->
    // the requested products
}.onError { error ->
    // handle the error
}

Yanıt parametreleri:

ParametreAçıklama
ProductsÜrün tanımlayıcısı, ürün adı, fiyat, para birimi, abonelik süresi ve diğer çeşitli özellikleri içeren AdaptyPaywallProduct nesnelerinin listesi.

Kendi paywall tasarımınızı uygularken AdaptyPaywallProduct nesnesindeki bu özelliklere erişmeniz gerekebilir. Aşağıda en sık kullanılan özellikler gösterilmekte olup mevcut tüm özellikler için bağlantılı belgeye bakabilirsiniz.

ÖzellikAçıklama
BaşlıkÜrün başlığını görüntülemek için product.localizedTitle kullanın. Yerelleştirmenin cihazın dil ayarına değil, kullanıcının seçtiği mağaza ülkesine göre yapıldığını unutmayın.
FiyatFiyatın yerelleştirilmiş halini görüntülemek için product.price.localizedString kullanın. Bu yerelleştirme cihazın yerel ayar bilgisine dayanır. Fiyata sayı olarak product.price.amount üzerinden de erişebilirsiniz; değer yerel para birimi cinsinden verilir. İlgili para birimi sembolünü almak için product.price.currencySymbol kullanın.
Abonelik DönemiDönemi (ör. hafta, ay, yıl vb.) görüntülemek için product.subscriptionDetails?.localizedSubscriptionPeriod kullanın. Bu yerelleştirme cihazın yerel ayarına dayanır. Abonelik dönemini programatik olarak almak için product.subscriptionDetails?.subscriptionPeriod kullanın. Buradan süreyi (DAY, WEEK, MONTH, YEAR veya UNKNOWN) almak üzere unit enum’una erişebilirsiniz. numberOfUnits değeri dönem birimi sayısını verir. Örneğin üç aylık bir abonelikte unit özelliğinde MONTH, numberOfUnits özelliğinde ise 3 görürsünüz.
Başlangıç TeklifiBir aboneliğin başlangıç teklifi içerip içermediğini göstermek için product.subscriptionDetails?.introductoryOfferPhases özelliğine bakın. Bu liste, ücretsiz deneme aşaması ve başlangıç fiyatı aşaması olmak üzere en fazla iki indirim aşaması içerebilir. Her aşama nesnesinde şu kullanışlı özellikler bulunur:
paymentMode: FREE_TRIAL, PAY_AS_YOU_GO, PAY_UPFRONT ve UNKNOWN değerlerine sahip bir enum. Ücretsiz denemeler FREE_TRIAL türünde olur.
price: İndirimli fiyat, sayı olarak. Ücretsiz denemeler için 0 değerine bakın.
localizedNumberOfPeriods: Teklifin süresini cihazın yerel ayarıyla biçimlendirilmiş olarak açıklayan bir dize. Örneğin üç günlük bir deneme teklifi bu alanda 3 days gösterir.
subscriptionPeriod: Teklif döneminin ayrıntılarını almak için bu özelliği kullanabilirsiniz. Teklifler için de önceki bölümde açıklandığı şekilde çalışır.
localizedSubscriptionPeriod: İndirimin abonelik döneminin kullanıcının yerel ayarına göre biçimlendirilmiş hali.

Varsayılan kitle paywallıyla getirme hızını artırma

Paywalllar genellikle neredeyse anında getirilir, bu yüzden bu süreci hızlandırmayı düşünmenize gerek yoktur. Ancak çok sayıda kite ve paywalla sahipseniz ve kullanıcılarınızın internet bağlantısı zayıfsa bir paywall getirmek 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.

Bunu çözmek için getPaywallForDefaultAudience metodunu kullanabilirsiniz; bu metot belirtilen placement’ın All Users kitesi için paywallını getirir. Ancak önerilen yaklaşımın yukarıdaki Paywall Bilgilerini Getirme bölümünde ayrıntılı olarak açıklandığı üzere getPaywall metoduyla paywall getirmek olduğunu bilmek önemlidir.

Neden getPaywall kullanmanızı öneriyoruz

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

  • Geriye dönük uyumluluk sorunları: Farklı uygulama sürümleri için (mevcut ve gelecek) farklı paywalllar göstermeniz gerekiyorsa güçlüklerle karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen paywalllar tasarlamak zorunda kalırsınız ya da mevcut (eski) sürümdeki kullanıcıların render edilemeyen paywalllarla karşılaşmasını göze alırsınız.
  • Hedefleme kaybı: Tüm kullanıcılar All Users kitesi için tasarlanmış aynı paywall’ı görür; bu da ülkelere, pazarlama attribution verilerine veya kendi özel özelliklerinize dayalı kişiselleştirilmiş hedeflemeyi kaybettiğiniz anlamına gelir.

Bu dezavantajları kabul ederek daha hızlı paywall getirme avantajından yararlanmak istiyorsanız getPaywallForDefaultAudience metodunu aşağıdaki gibi kullanın. Aksi takdirde yukarıda açıklanan getPaywall metodunu kullanmaya devam edin.

import com.adapty.kmp.Adapty
import com.adapty.kmp.models.AdaptyPaywall
import com.adapty.kmp.models.AdaptyPaywallFetchPolicy
import com.adapty.kmp.models.onError
import com.adapty.kmp.models.onSuccess

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 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 etiketten oluşan bir dil kodu olarak beklenir. İlk alt etiket dil, ikincisi bölge içindir.

Örnek: en İngilizce, pt-br Brezilya Portekizcesini temsil eder.

fetchPolicyvarsayılan: AdaptyPaywallFetchPolicy.Default

SDK varsayılan olarak sunucudan veri yüklemeye çalışır; başarısız olursa önbelleğe alınmış veriyi döndürür. Kullanıcılarınızın her zaman en güncel verilere erişmesini sağladığı için bu seçeneği öneririz.

Ancak kullanıcılarınızın istikrarsız bir internet bağlantısına sahip olduğunu düşünüyorsanız, mevcut önbellek verisini döndürmek için AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad kullanmayı değerlendirin. Bu senaryoda kullanıcılar en güncel veriyi göremeyebilir; ancak internet bağlantıları ne kadar zayıf olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, bu nedenle ağ isteklerinden kaçınmak amacıyla oturum boyunca kullanmak güvenlidir.

Ö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.