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

Remote config ve özel paywall’ları göstermeden önce bunlarla ilgili bilgileri çekmeniz gerekir. Bu konunun remote config ve özel paywall’lara atıfta bulunduğunu lütfen göz önünde bulundurun. Flow’ları ve Paywall Builder ile özelleştirilmiş paywall’ları çekme konusunda rehberlik için Flow’ları ve paywall’ları edinin 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 paywall 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 paywall oluşturun ve ürünleri paywalla ekleyin.

  3. Adapty Kontrol Paneli’nde placement’lar oluşturun ve paywallınızı 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 kombinasyonu olarak işlev görür. Bu çapraz platform ürünler, paywall’lara entegre edilerek belirli mobil uygulama placement’larında gösterilmesini sağlar.

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

Important

Ürün ID’lerini doğrudan koda yazmayın. Doğrudan koda yazmanız gereken tek ID, placement ID’dir. Paywalllar 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, yarın üç ürün döndürüyorsa, kod değişikliği yapmadan hepsini gösterin.

try {
  final flow = await Adapty().getFlow(placementId: 'YOUR_PLACEMENT_ID');
  // the requested flow
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
  // handle the error
}
ParametreZorunlulukAçıklama
placementIdzorunluPlacement tanımlayıcısı. Adapty Kontrol Paneli’nde placement oluştururken belirlediğiniz değerdir.
fetchPolicyvarsayılan: AdaptyFlowFetchPolicy.reloadRevalidatingCacheData

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; istek başarısız olursa önbellekteki veriyi döndürür. Kullanıcılarınızın her zaman en güncel veriye 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 çalıştığını düşünüyorsanız AdaptyFlowFetchPolicy.returnCacheDataElseLoad seçeneğini değerlendirebilirsiniz. Bu seçenek sırayı tersine çevirir: önce önbelleği okur, önbellekte hiçbir şey yoksa sunucuya gider. Kullanıcılar en güncel veriye her zaman 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 oturum sırasında ağ isteklerini azaltmak amacıyla önbellekten yararlanmak güvenlidir.

Üçüncü bir politika olan AdaptyFlowFetchPolicy.returnCacheDataIfNotExpiredElseLoad(maxAge), ikisi arasında bir yerde durur: önbelleğe alınmış kopya, ilettiğiniz Duration değerinden daha yeniyse önce önbelleği okur; daha eskiyse 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, paywall’ları iki katmanda depolar: yukarıda açıklanan düzenli olarak güncellenen önbellek ve yedek paywall’lar. Paywall’ları 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 paywall’larınızın her zaman en güncel sürümüne ulaşmanı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 önbellekteki veri 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şabilir.

Note

v4’te getFlow, locale parametresi almaz. Özel paywalllar için tüm mevcut yerelleştirmeler flow’un remote config’lerinde (flow.remoteConfigs) döner — kullanıcının cihaz veya uygulama ayarıyla eşleşeni seçin. Bkz. Yerelleştirmeler ve locale kodları.

Yanıt parametreleri:

ParametreAçıklama
FlowFlow’un tanımlayıcılarını (instanceIdentity, variationId), adını, placement’ını, paywall varyasyonlarını (paywalls) ve remote config’leri (remoteConfigs) içeren bir AdaptyFlow nesnesi.

Ürünleri getir

Flow’u aldıktan sonra, ona karşılık gelen ürün dizisini sorgulayabilirsiniz:

try {
  final products = await Adapty().getPaywallProducts(flow: flow);
  // the requested products array
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
  // handle the error
}

Yanıt parametreleri:

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

Kendi paywall tasarımınızı uygularken AdaptyPaywallProduct nesnesindeki bu özelliklere ihtiyaç duyacaksınız. Aşağıda en sık kullanılan özellikler gösterilmektedir; tüm mevcut özellikler için bağlantılı belgeye başvurun.

ÖzellikAçıklama
BaşlıkÜrünün başlığını görüntülemek için product.localizedTitle kullanın. Yerelleştirmenin, cihazın yerel 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 göre yapılır. Fiyata sayısal olarak erişmek için product.price.amount kullanabilirsiniz. Değer yerel para biriminde sağlanır. İlgili para birimi sembolünü almak için product.price.currencySymbol kullanın.
Abonelik DönemiDönemi (örn. hafta, ay, yıl vb.) görüntülemek için product.subscription?.localizedPeriod 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.subscription?.period kullanın. Buradan unit enum’una erişerek uzunluğu (gün, hafta, ay, yıl veya bilinmeyen) alabilirsiniz. numberOfUnits değeri ise dönem birimi sayısını verir. Örneğin, üç aylık bir abonelik için unit özelliğinde AdaptyPeriodUnit.month, numberOfUnits özelliğinde ise 3 görürsünüz.
Başlangıç TeklifiAboneliğin başlangıç teklifi içerdiğini gösteren bir rozet veya başka bir gösterge eklemek için product.subscription?.offer?.phases özelliğine bakın. Bu liste, ücretsiz deneme aşaması ve başlangıç fiyatı aşaması olmak üzere iki adede kadar indirim aşaması içerebilir. Her aşama nesnesi şu yararlı özellikleri içerir:
• paymentMode: AdaptyPaymentMode.freeTrial, AdaptyPaymentMode.payAsYouGo, AdaptyPaymentMode.payUpFront ve AdaptyPaymentMode.unknown değerlerine sahip bir enum. Ücretsiz denemeler AdaptyPaymentMode.freeTrial türünde olur.
• price: İndirimli fiyatın sayısal değeri. Ücretsiz denemeler için burada 0 değerini arayın.
• localizedNumberOfPeriods: Teklifin süresini cihazın yerel ayarına göre yerelleştirilmiş olarak açıklayan bir dize. Örneğin, üç günlük bir deneme teklifi bu alanda 3 days olarak gösterilir.
• subscriptionPeriod: Alternatif olarak, bu özellikle teklif döneminin ayrıntılarını tek tek alabilirsiniz. Teklifler için önceki bölümde açıklanan şekilde çalışır.
• localizedSubscriptionPeriod: Kullanıcının yerel ayarına göre biçimlendirilmiş indirim abonelik dönemi.

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

Flow’lar 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 placement’ınız varsa ve kullanıcılarınızın internet bağlantısı zayıfsa, bir flow’un getirilmesi istediğinizden daha uzun sürebilir. Bu gibi 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 gidermek için, belirtilen placement’ın All Users kitlesi için flow’unu getiren getFlowForDefaultAudience metodunu kullanabilirsiniz. Ancak, önerilen yaklaşımın yukarıdaki Flow bilgisini getirme bölümünde ayrıntılı olarak açıklandığı gibi getFlow metoduyla flow’u getirmek olduğunu anlamak kritik öneme sahiptir.

Warning

Neden getFlow kullanmanızı öneriyoruz

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

  • Olası geriye dönük uyumluluk sorunları: Farklı uygulama sürümleri için (mevcut ve gelecekteki) farklı paywalllar göstermeniz gerekiyorsa, çeşitli zorluklarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen paywalllar tasarlamanız ya da mevcut (eski) sürümdeki kullanıcıların render edilemeyen paywalllarla sorun yaşayabileceğini kabul etmeniz gerekir.
  • 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 özelliklerinize dayalı hedefleme dahil) kaybettiğiniz anlamına gelir.

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

try {
  final flow = await Adapty().getFlowForDefaultAudience(placementId: 'YOUR_PLACEMENT_ID');
  // the requested flow
} on AdaptyError catch (adaptyError) {
  // handle error
} catch (e) {
  // handle unknown error
}
ParametreZorunlulukAçıklama
placementIdzorunluPlacement tanımlayıcısı. Adapty Kontrol Paneli’nde bir placement oluştururken belirttiğiniz değerdir.
fetchPolicyvarsayılan: AdaptyFlowFetchPolicy.reloadRevalidatingCacheData

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

Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla karşılaştığını düşünüyorsanız AdaptyFlowFetchPolicy.returnCacheDataElseLoad seçeneğini değerlendirebilirsiniz. Bu seçenek sırayı tersine çevirir: önce önbelleği okur, önbellekte 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, bu nedenle ağ isteklerini azaltmak amacıyla oturum süresince güvenle kullanılabilir.

Üçüncü bir politika olan AdaptyFlowFetchPolicy.returnCacheDataIfNotExpiredElseLoad(maxAge) ikisi arasında bir denge kurar: önbelleğe alınmış kopya ilettiğiniz Duration değerinden daha yeniyse önbelleği okur, daha eskiyse sunucuya gider.

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

Remote config ve özel paywallları göstermeden önce, bunlara ait bilgileri çekmeniz gerekir. Bu konunun remote config ve özel paywalllarla ilgili olduğunu unutmayın. Paywall Builder ile özelleştirilmiş paywallları çekme konusunda rehberlik için Paywall Builder paywalllarını ve yapılandırmalarını çekme 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 paywallları ve ürünleri çekmeye 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ünleri 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 çekme

Adapty’de bir ürün, App Store ve Google Play’deki ürünlerin bir kombinasyonudur. Bu platformlar arası ürünler, belirli mobil uygulama placement’larında gösterilebilmesi için paywalllarla entegre edilir.

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

Important

Ürün ID’lerini koda gömmayın. Koda gömmeniz 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 bu değişiklikleri dinamik olarak ele almalıdır; bugün bir paywall iki ürün döndürüyorsa ve yarın üç ürün döndürüyorsa, kod değişikliği yapmadan hepsini göstermeniz gerekir.

try {
  final paywall = await Adapty().getPaywall(placementId: "YOUR_PLACEMENT_ID", locale: "en");
  // the requested paywall
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
}
ParametreZorunlulukAçıklama
placementIdzorunluPlacement’ın 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, pt-br ise Brezilya Portekizcesini temsil eder.

Locale kodları ve bunların nasıl kullanılmasını önerdiğimiz hakkında daha fazla bilgi için Yerelleştirmeler ve locale kodları bölümüne bakın.

fetchPolicyvarsayılan: AdaptyPaywallFetchPolicy.reloadRevalidatingCacheData

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 istek başarısız olursa önbelleğe alınmış verileri döndürür. Bu varyantı öneririz çünkü kullanıcılarınızın her zaman en güncel verilere ulaşmasını sağlar.

Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla karşılaştığını düşünüyorsanız, sırayı tersine çeviren AdaptyPaywallFetchPolicy.returnCacheDataElseLoad seçeneğini değerlendirebilirsiniz; bu seçenek önce önbelleği okur ve 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üresince kullanmak güvenlidir.

Üçüncü bir politika olan AdaptyPaywallFetchPolicy.returnCacheDataIfNotExpiredElseLoad(maxAge), ikisi arasında bir yerde durur: önbelleğe alınan kopya, ilettiğiniz Duration 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 bozulmadan kaldığını ve yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında silindiğini unutmayın.

Adapty SDK, paywall’ları iki katmanda saklar: yukarıda açıklanan düzenli olarak güncellenen önbellek ve yedek paywall’lar. Ayrıca paywall’ları daha hızlı getirmek için CDN, CDN’ye ulaşılamadığı durumlarda ise bağımsız bir yedek sunucu kullanırız. Bu sistem, internet bağlantısının kısıtlı olduğu durumlarda bile güvenilirliği sağlarken her zaman paywall’larınızın en güncel sürümünü almanızı sağlamak için tasarlanmıştır.

loadTimeoutvarsayılan: 5 sn

Bu değer, bu yöntemin zaman aşımını 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.

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

Ürün ID’lerini koda gömmeyIn! Paywalllar uzaktan yapılandırıldığından, mevcut ürünler, ürün sayısı ve özel teklifler (ücretsiz denemeler 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, kod değişikliği gerektirmeden uygulamanız 3 ürünü de göstermelidir. Koda gömmeniz gereken tek şey placement ID’sidir.

Yanıt parametreleri:

ParametreAçıklama
PaywallŞu özelliklere sahip bir AdaptyPaywall nesnesi: ürün kimliklerinin listesi, paywall tanımlayıcısı, remote config ve diğer çeşitli özellikler.

Ürünleri çekme

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

try {
  final products = await Adapty().getPaywallProducts(paywall: paywall);
  // the requested products array
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
}

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 özelliklerle birlikte AdaptyPaywallProduct nesnelerinin listesi.

Kendi paywall tasarımınızı uygularken, 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ştirme, cihazın dilini değil, kullanıcının seçtiği mağaza ülkesini baz alır.
FiyatFiyatın yerelleştirilmiş halini göstermek için product.price.localizedString kullanın. Bu yerelleştirme cihazın dil ayarlarına 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 PeriyoduPeriyodu (ör. hafta, ay, yıl vb.) göstermek için product.subscription?.localizedPeriod kullanın. Bu yerelleştirme cihazın diline göre yapılır. Abonelik periyodunu programatik olarak almak için product.subscription?.period kullanın. Buradan unit enum’una erişerek uzunluğu (yani gün, hafta, ay, yıl veya bilinmiyor) öğrenebilirsiniz. numberOfUnits değeri ise dönem birimi sayısını verir. Örneğin üç aylık bir abonelik için unit özelliğinde AdaptyPeriodUnit.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 amacıyla rozet veya başka bir gösterge eklemek için product.subscription?.offer?.phases ö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: AdaptyPaymentMode.freeTrial, AdaptyPaymentMode.payAsYouGo, AdaptyPaymentMode.payUpFront ve AdaptyPaymentMode.unknown değerlerine sahip bir enum. Ücretsiz denemeler AdaptyPaymentMode.freeTrial türünde olur.
• price: İndirimli fiyatın sayısal değeri. Ücretsiz denemeler için burada 0 arayın.
• localizedNumberOfPeriods: Teklifin süresini cihazın diline göre yerelleştirilmiş biçimde açıklayan bir string. Örneğin üç günlük bir deneme teklifi bu alanda 3 days olarak görünür.
• subscriptionPeriod: Alternatif olarak, teklif periyodunun ayrıntılarını bu özellikle alabilirsiniz. Teklifler için bir önceki bölümde açıklanan yöntemle aynı şekilde çalışır.
• localizedSubscriptionPeriod: Kullanıcının diline göre biçimlendirilmiş indirim abonelik periyodu.

Varsayılan kitle paywallıyla veri çekmeyi hızlandırma

Genellikle paywalllar neredeyse anında çekilir, bu nedenle bu işlemi hızlandırma konusunda endişelenmenize gerek yoktur. Ancak çok sayıda kitleniz ve paywallınız varsa ve kullanıcılarınızın internet bağlantısı zayıfsa, paywall çekme işlemi istediğinizden daha uzun sürebilir. Bu durumlarda, hiç paywall göstermemek yerine kullanıcı deneyimini sorunsuz kılmak için varsayılan bir paywall görüntülemek isteyebilirsiniz.

Bunu çözmek için, belirtilen placement’ın Tüm Kullanıcılar kitlesine ait paywallını getiren getPaywallForDefaultAudience metodunu kullanabilirsiniz. Ancak önerilen yaklaşımın, yukarıdaki Paywall Bilgilerini Çekme bölümünde açıklandığı gibi getPaywall metoduyla paywallı çekmek olduğunu göz önünde bulundurun.

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 tasarlamanız ya da mevcut (eski) sürümdeki kullanıcıların render edilemeyen paywalllarla sorun yaşamasını kabul etmeniz gerekecektir.
  • Hedefleme kaybı: Tüm kullanıcılar, Tüm Kullanıcılar kitlesi için tasarlanmış aynı paywallı görecektir; bu da kişiselleştirilmiş hedeflemeyi (ülkelere, marketing attribution’a veya kendi özel niteliklerinize dayalı hedefleme dahil) kaybetmeniz anlamına gelir.

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

try {
    final paywall = await Adapty().getPaywallForDefaultAudience(placementId: 'YOUR_PLACEMENT_ID');
} on AdaptyError catch (adaptyError) {
    // handle error
} catch (e) {
    // handle unknown error
}
Note

getPaywallForDefaultAudience metodu Flutter SDK 3.2.0 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 etiketten oluşan 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: AdaptyPaywallFetchPolicy.reloadRevalidatingCacheData

fetchPolicy, SDK’nın önce hangi katmanı okuyacağını belirler; önbelleğin kullanılıp kullanılamayacağını değil. 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 varyantı öneriyoruz çünkü kullanıcılarınızın her zaman en güncel veriyi almasını sağlar.

Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla uğraştığını düşünüyorsanız, bu sırayı tersine çeviren AdaptyPaywallFetchPolicy.returnCacheDataElseLoad seçeneğini değerlendirin; bu seçenek önce önbelleği okur ve yalnızca önbellekte hiçbir şey yoksa sunucuya gider. Kullanıcılar en son veriyi 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 amacıyla oturum sırasında güvenle kullanılabilir.

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

Önbelleğin uygulamayı yeniden başlatmada bozulmadan kaldığını ve yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında silindiğini unutmayın.