Android SDK'da remote config paywalllar için paywallları ve ürünleri getirme

Remote config ve özel paywall’lar hakkındaki bilgileri göstermeden önce, bunlara ilişkin bilgileri çekmeniz gerekir. Bu konunun remote config ve özel paywall’larla ilgili olduğunu unutmayın. Flow & Paywall Builder veya old Paywall Builder ile özelleştirilmiş flow’ları veya paywall’ları çekme konusunda rehberlik için lütfen Flow ve paywall’ları alın sayfasına 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 flow’ları ve ürünleri çekmeye 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 flow veya paywall oluşturun ve ürünleri buna ekleyin.

  3. Adapty Kontrol Paneli’nde placement’lar oluşturun ve flow’unuzu veya paywall’unuzu placement’a ekleyin.

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

Flow bilgilerini getirme

Adapty’de bir ürün, hem App Store hem de Google Play’den gelen ürünlerin bir kombinasyonudur. Bu platformlar arası ürünler, flow’lara ve paywall’lara entegre edilerek belirli mobil uygulama placement’larında sergilenebilir.

Ürünleri göstermek için getFlow metoduyla placement’larınızdan birinden bir AdaptyFlow almanız gerekir.

Important

Ürün ID’lerini hardcode etmeyin. Hardcode etmeniz gereken tek ID, placement ID’sidir. Flow’lar uzaktan yapılandırıldığından, ürün sayısı ve mevcut teklifler her an değişebilir. Uygulamanız bu değişiklikleri dinamik olarak ele almalıdır; bir flow bugün iki ürün döndürüyorsa ve yarın üç ürün döndürüyorsa, kod değişikliği yapmadan hepsini gösterin.

ParametreVarlıkAçıklama
placementIdzorunluPlacement’ın tanımlayıcısı. Adapty Kontrol Paneli’nde bir placement oluştururken belirttiğiniz değerdir.
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ış veriler veya yerel yedek döndürülür.

Nadir durumlarda bu metodun loadTimeout içinde belirtilen süreden biraz daha geç zaman aşımına uğrayabileceğini unutmayın; zira işlem arka planda farklı isteklerden oluşabilir.

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

Yanıt parametreleri:

ParametreAçıklama
FlowPlacement, tanımlayıcılar (id, variationId), varyant adı (variationName, isteğe bağlı, SDK 4.2+), ad, paywall varyantları (paywalls), yapılandırılmış her locale için bir giriş içeren remoteConfigs dizisi ve hasViewConfiguration bayrağını barındıran AdaptyFlow nesnesi. Flow için ürünleri almak üzere getPaywallProducts(flow) çağrısını kullanın.
Note

v4’te locale parametresi getFlow metodundan çıkarılmış ve getFlowConfiguration metoduna taşınmıştır (yalnızca AdaptyUI ile render ederken kullanılır). Özel paywalllar için mevcut tüm locale’ler flow.remoteConfigs içinde birlikte döner — kullanıcının cihazına veya uygulamanızın ayarına uyan locale’i seçin.

Tip

Kullanıcı flow’a ihtiyaç duymadan önce önbelleği doldurmak için birden fazla placement için aynı anda preloadFlows metodunu (Android SDK 4.1+) çağırın. Önceden yüklenmiş kopyayı ağ isteğinden önce okumak için AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad değerini kullanın.

Ürünleri getir

Flow’a sahip olduktan sonra, o flow’a karşılık gelen ürün dizisini sorgulayabilirsiniz:

Yanıt parametreleri:

ParametreAçıklama
ProductsAdaptyPaywallProduct nesnelerinin listesi: ürün tanımlayıcısı, ürün adı, fiyat, para birimi, abonelik süresi ve diğer çeşitli özellikler.

Kendi flow tasarımınızı uygularken, AdaptyPaywallProduct nesnesindeki bu özelliklere erişmeniz muhtemelen gerekecektir. Aşağıda en sık kullanılan özellikler gösterilmektedir; mevcut tüm özellikler hakkında ayrıntılı bilgi için bağlantılı dokümana bakın.

ÖzellikAçıklama
BaşlıkÜrünün başlığını göstermek için product.localizedTitle kullanın. Yerelleştirmenin cihazın yerel ayarına değil, kullanıcının mağazada seçtiği ülkeye göre yapıldığını unutmayın.
FiyatFiyatın yerelleştirilmiş halini göstermek için product.price.localizedString kullanın. Bu yerelleştirme cihazın yerel ayarına göre yapılır. Fiyata sayı olarak erişmek için product.price.amount özelliğini kullanabilirsiniz; değer yerel para biriminde döner. İlgili para birimi sembolünü almak için product.price.currencySymbol kullanın.
Abonelik DönemiDönemi (hafta, ay, yıl vb.) göstermek için product.subscriptionDetails?.localizedSubscriptionPeriod kullanın. Bu yerelleştirme cihazın yerel ayarına göre yapılır. Abonelik dönemine programatik olarak erişmek için product.subscriptionDetails?.subscriptionPeriod kullanın. Buradan unit enum değerine ulaşarak dönem uzunluğunu alabilirsiniz (DAY, WEEK, MONTH, YEAR veya UNKNOWN). numberOfUnits değeri ise dönem birimi sayısını verir. Örneğin üç aylık bir abonelik için unit özelliğinde MONTH, numberOfUnits özelliğinde 3 görürsünüz.
Başlangıç TeklifiBir aboneliğin başlangıç teklifi içerip içermediğini rozet veya başka bir gösterge ile belirtmek 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 yer alır:
• 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 verir. Ücretsiz denemeler için bu değer 0 olur.
• localizedNumberOfPeriods: Teklifin uzunluğunu cihazın yerel ayarına göre biçimlendirilmiş bir string olarak gösterir. Örneğin üç günlük bir deneme teklifi bu alanda 3 days şeklinde görünür.
• subscriptionPeriod: Teklif döneminin ayrıntılarına tek tek erişmek için bu özelliği kullanabilirsiniz. Abonelikler için açıklanan önceki bölümle aynı şekilde çalışır.
• localizedSubscriptionPeriod: İndirimin abonelik dönemini kullanıcının yerel ayarına göre biçimlendirilmiş olarak döndürür.

Varsayılan kitle flow’u ile flow getirmeyi hızlandırın

Genellikle flow’lar neredeyse anında getirilir, bu yüzden bu süreci hızlandırma konusunda endişelenmenize gerek yoktur. Ancak çok sayıda kitle ve placement’ınız olduğunda ve kullanıcılarınızın internet bağlantısı zayıf olduğunda, bir flow’un getirilmesi istediğinizden daha uzun sürebilir. Böyle durumlarda, hiçbir şey göstermemek yerine sorunsuz bir kullanıcı deneyimi sağlamak için varsayılan bir flow görüntülemek isteyebilirsiniz.

Bunu çözmek için, belirtilen placement’ın All Users kitlesi için flow’unu getiren getFlowForDefaultAudience metodunu kullanabilirsiniz. Ancak şunu anlamak kritik önem taşır: önerilen yaklaşım, yukarıdaki Flow bilgisini getirme bölümünde ayrıntılandırıldığı gibi getFlow metoduyla flow’u getirmektir.

Warning

getFlow kullanımını neden öneriyoruz

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

  • Olası geriye dönük uyumluluk sorunları: Farklı uygulama sürümleri için (mevcut ve gelecek) farklı flow’lar göstermeniz gerekiyorsa, zorluklarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen flow’lar tasarlamak ya da mevcut (eski) sürüme sahip kullanıcıların render edilemeyen flow’larla sorun yaşabileceğini kabul etmek zorunda kalırsınız.
  • Hedefleme kaybı: Tüm kullanıcılar All Users kitlesi için tasarlanmış aynı flow’u görecektir; bu da kişiselleştirilmiş hedeflemeyi (ülkelere, marketing attribution’a veya kendi özel niteliklerinize göre hedefleme dahil) kaybetmeniz anlamına gelir.

Bu dezavantajları kabul ederek daha hızlı flow getirme işleminden yararlanmak istiyorsanız, getFlowForDefaultAudience metodunu aşağıdaki şekilde kullanın. Aksi takdirde, yukarıda açıklanan getFlow metodunu kullanmaya devam edin.

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

Remote config ve özel paywallları tanıtmadan önce, bunlarla ilgili bilgileri almanız gerekir. Bu konunun remote config ve özel paywalllarla ilgili olduğunu lütfen unutmayın. Paywall Builder ile özelleştirilmiş paywallların getirilmesi için rehber olarak Paywall Builder paywalllarını ve yapılandırmalarını getirme konusuna bakabilirsiniz.

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 ve ürünleri getirmeye başlamadan önce (genişletmek için tıklayın)
  1. Adapty Kontrol Paneli’nde ürünlerinizi oluşturun.

  2. Bir paywall oluşturun ve ürünlerinizi paywall’unuza ekleyin Adapty Kontrol Paneli’nde.

  3. Placement’lar oluşturun ve paywall’unuzu placement’a ekleyin Adapty Kontrol Paneli’nde.

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

Paywall bilgilerini getirme

Adapty’de bir ürün, hem App Store hem de Google Play’den gelen ürünlerin bir kombinasyonunu temsil eder. Bu platformlar arası ürünler, belirli mobil uygulama placement’larında sergilenebilmesi için paywall’lara entegre edilir.

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

Important

Ürün ID’lerini doğrudan koda yazmayın. Doğrudan yazmanız gereken tek ID, placement ID’sidir. Paywall’lar uzaktan yapılandırıldığından, ürün sayısı ve mevcut teklifler her an değişebilir. Uygulamanız bu değişiklikleri dinamik olarak ele almalıdır; bir paywall bugün iki ürün döndürüyorsa ve yarın üç ürün döndürüyorsa, kod değişikliği yapmadan hepsini gösterin.

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 parametrenin, eksi (-) karakteriyle ayrılmış bir veya daha fazla alt etiketten oluşan bir dil kodu olması beklenir. İlk alt etiket dil için, ikincisi ise 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ını önerdiğimiz hakkında daha fazla bilgi için Yerelleştirmeler ve yerel ayar kodları bölümüne bakın.

fetchPolicyvarsayılan: AdaptyPlacementFetchPolicy.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ış verileri döndürür. Kullanıcılarınızın her zaman en güncel verilere ulaşmasını sağladığından bu seçeneği öneriyoruz.

Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla uğraştığını düşünüyorsanız AdaptyPlacementFetchPolicy.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 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, bu nedenle ağ isteklerini önlemek amacıyla oturum sırasında kullanmak güvenlidir.

Üçüncü bir politika olan AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAgeMillis), ikisi arasında bir denge kurar: önbelleğe alınan kopya maxAgeMillis’den daha yeni olduğu sürece önbelleği okur, daha eski olduğunda ise sunucuya gider.

Önbelleğin uygulama yeniden başlatıldığında bozulmadan kaldığını; yalnızca uygulama yeniden yüklendiğinde veya manuel temizleme yapıldığında silindiğ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’e ulaşılamadığı durumlarda ise bağımsız bir yedek sunucu kullanırız. 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 güncel sürümünü almanızı garanti edecek şekilde 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ış 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; zira işlem arka planda farklı isteklerden oluşabilir.

Ürün ID’lerini hardcode etmeyin! Paywall’lar uzaktan yapılandırıldığından, mevcut ürünler, ürün sayısı ve özel teklifler (ücretsiz deneme gibi) zamanla değişebilir. Kodunuzun bu senaryoları ele aldığından emin olun.

Örneğin, başlangıçta 2 ürün alıyorsanız uygulamanız o 2 ürünü göstermelidir. Ancak daha sonra 3 ürün alırsanız, herhangi bir kod değişikliği gerektirmeden uygulamanız 3 ürünü de göstermelidir. Hardcode etmeniz gereken tek şey placement ID’sidir.

Yanıt parametreleri:

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

Ürünleri getir

Paywall’a sahip olduktan sonra, buna karşılık gelen ürün dizisini sorgulayabilirsiniz:

Yanıt parametreleri:

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

Kendi paywall tasarımınızı uygularken, büyük ihtimalle AdaptyPaywallProduct nesnesindeki bu özelliklere ihtiyaç duyacaksınız. Aşağıda en sık kullanılan özellikler gösterilmektedir; mevcut tüm özellikler hakkında ayrıntılı bilgi için bağlantılı belgeye bakın.

ÖzellikAçıklama
BaşlıkÜrünün başlığını göstermek 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östermek için product.price.localizedString kullanın. Bu yerelleştirme cihazın dil bilgisine göre yapılır. Fiyata sayısal olarak erişmek için product.price.amount kullanabilirsiniz; değer yerel para birimi cinsinden döner. İlgili para birimi sembolünü almak için product.price.currencySymbol kullanın.
Abonelik DönemiDönemi (hafta, ay, yıl vb.) göstermek için product.subscriptionDetails?.localizedSubscriptionPeriod kullanın. Bu yerelleştirme cihazın dil ayarına göre yapılır. Abonelik dönemine programatik olarak erişmek için product.subscriptionDetails?.subscriptionPeriod kullanın. Buradan unit enum’una erişerek süreyi (DAY, WEEK, MONTH, YEAR veya UNKNOWN) alabilirsiniz. numberOfUnits değeri ise dönem birimlerinin 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 yararlı özellikler yer alır:
• 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ın sayısal değeri. Ücretsiz denemelerde bu değer 0 olur.
• localizedNumberOfPeriods: Cihazın dil ayarına göre yerelleştirilmiş, teklifin süresini açıklayan bir metin. Örneğin üç günlük bir deneme teklifi bu alanda 3 days olarak gösterilir.
• subscriptionPeriod: Teklif döneminin ayrıntılı bilgisini almak için bu özelliği kullanabilirsiniz; önceki bölümde abonelikler için açıklanan şekilde çalışır.
• localizedSubscriptionPeriod: Kullanıcının dil ayarına göre biçimlendirilmiş, indirim için abonelik dönemi metni.

Varsayılan kitle paywallı ile paywall getirmeyi hızlandırın

Genellikle paywalllar 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 paywalliniz varsa ve kullanıcılarınızın internet bağlantısı zayıfsa, 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 için varsayılan bir paywall görüntülemek isteyebilirsiniz.

Bunu çözmek için, belirtilen placement’ın All Users kitlesi için paywall’ı çeken getPaywallForDefaultAudience metodunu kullanabilirsiniz. Ancak, önerilen yaklaşımın yukarıdaki Paywall Bilgisini Çekme bölümünde açıklandığı gibi getPaywall metoduyla paywall’ı çekmek olduğunu anlamanız kritik önem taşır.

Warning

Neden getPaywall kullanmanızı öneriyoruz

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

  • Olası geriye dönük uyumluluk sorunları: Farklı uygulama sürümleri (mevcut ve gelecekteki) için farklı paywall’lar göstermeniz gerekirse zorluklarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen paywall’lar tasarlamanız ya da mevcut (eski) sürüme sahip kullanıcıların render edilemeyen paywall’larla sorun yaşamasını kabul etmeniz gerekecektir.
  • Hedefleme kaybı: Tüm kullanıcılar All Users kitlesi için tasarlanmış aynı paywall’ı görür; bu da ülkelere, pazarlama attribution’ına veya kendi özel özelliklerinize dayalı kişiselleştirilmiş hedeflemeyi kaybetmeniz anlamına gelir.

Bu dezavantajları kabul edip daha hızlı paywall yükleme avantajından faydalanmak istiyorsanız, getPaywallForDefaultAudience yöntemini aşağıdaki şekilde kullanın. Aksi takdirde, yukarıda açıklanan getPaywall yöntemini kullanmaya devam edin.

Note

getPaywallForDefaultAudience metodu Android SDK 2.11.3 sürümünden itibaren kullanılabilir.

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 parametrenin, eksi (-) karakteriyle ayrılmış bir veya daha fazla alt etiket içeren bir dil kodu olması beklenir. İ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ı bölümüne bakın.

fetchPolicyvarsayılan: AdaptyPlacementFetchPolicy.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. Kullanıcılarınızın her zaman en güncel verilere ulaşması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 AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad seçeneğini değerlendirebilirsiniz; bu seçenek sırayı 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ı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ğ isteklerinden kaçınmak için oturum süresince güvenle kullanılabilir.

Üçüncü bir politika olan AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAgeMillis), ikisi arasında bir yerde durur: önbelleğe alınan kopya maxAgeMillis’ten daha yeniyken önce önbelleği okur, daha eski olduğunda ise sunucuya gider.

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