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)
-
Adapty Kontrol Paneli’nde ürünlerinizi oluşturun.
-
Adapty Kontrol Paneli’nde bir paywall oluşturun ve ürünlerinizi paywall’a ekleyin.
-
Adapty Kontrol Paneli’nde placement oluşturun ve paywall’ınızı placement’a ekleyin.
-
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
}
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| placementId | zorunlu | Placement tanımlayıcısı. Adapty Kontrol Paneli’nde placement oluştururken belirttiğiniz değerdir. |
| locale | isteğe bağlı varsayılan: | 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: |
| fetchPolicy | varsayı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 Ö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. |
| loadTimeout | varsayı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 |
Ü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:
| Parametre | Açı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:
| Parametre | Açı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.
| Özellik | Açı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. |
| Fiyat | Fiyatı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önemi | Dö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ıç Teklifi | Bir 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
}
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| placementId | zorunlu | Placement tanımlayıcısı. Adapty Kontrol Paneli’nde placement oluştururken belirttiğiniz değerdir. |
| locale | isteğe bağlı varsayılan: | 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: |
| fetchPolicy | varsayı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 Ö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. |