Flow'ları ve Paywall'ları Getir - Flutter

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, mobil uygulamanızda görüntüleyebilirsiniz. İlk adım, aşağıda açıklandığı gibi placement ile ilişkili flow veya paywall’ı ve görünüm yapılandırmasını almaktır.

Bu konunun, Adapty’nin builder’larında tasarlanmış flow’lar ve paywall’larla ilgili olduğunu unutmayın. Paywall’larınızı manuel olarak uyguluyorsanız lütfen Mobil uygulamanızda remote config paywall’ları için paywall’ları 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.

Başlamadan önce

İhtiyacınız olanlar:

Flow/paywall getirme

Eğer bir flow veya paywall’u builder’da tasarladıysanız, bunu kullanıcıya göstermek için mobil uygulama kodunuzda render işlemiyle uğraşmanıza gerek yok. Bu tür bir flow veya paywall, hem ne gösterileceğini hem de nasıl gösterileceğini 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 gerekmektedir.

Flow veya paywall’ı mümkün olduğunca erken — ideally sunarken değil, çok daha önce — çekin ve görünümünü oluşturun. createFlowView metodu görünüm yapılandırmasını yükler ve arka planda görselleri indirip önbelleğe almaya başlar. Bu metodu ne kadar erken çağırırsanız, indirmelerin tamamlanması için o kadar fazla zaman olur. Flow veya paywall’ı sunduğunuzda, yapılandırma ve görseller zaten önbellekte hazır olabilir.

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

try {
  final flow = await Adapty().getFlow(placementId: 'YOUR_PLACEMENT_ID');
  // istenen flow/paywall
} on AdaptyError catch (adaptyError) {
  // hatayı işle
} catch (e) {
  // hatayı işle
}

Parametreler:

ParametreZorunlulukAçıklama
placementIdzorunluİstenen Placement kimliği. Bu değer, 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. 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 verileri alması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 AdaptyFlowFetchPolicy.returnCacheDataElseLoad seçeneğini değerlendirin; bu seçenek önce önbelleği okur ve yalnızca önbellekte hiçbir şey olmadığında sunucuya gider. Kullanıcılar en son verileri alamayabilir, ancak internet bağlantısı ne kadar düzensiz 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 AdaptyFlowFetchPolicy.returnCacheDataIfNotExpiredElseLoad(maxAge), ikisi arasında yer alır: önbelleğe alınmış kopya, geçirdiğ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 kaldırılıp yeniden yüklendiğinde veya manuel temizlik yapıldığında sıfırlandığını 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’e 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 paywalllarınızın her zaman en son sürümünü almanızı sağlamak için tasarlanmıştır.

loadTimeoutvarsayılan: 5 sn

Bu yöntemin zaman aşımını sınırlayan bir Duration değeri. Zaman aşımına ulaşılırsa önbelleğe alınmış veri 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.

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.

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

Important

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

Placement Flow & Paywall Builder veya eski Paywall Builder ile tasarlandıysa, Adapty kullanıcı arayüzünü sizin için render eder — getirilen flow’un hasViewConfiguration özelliği true olur. createFlowView ile view oluşturun, ardından flow veya paywall’ı gösterin. Placement, Builder arayüzü olmayan özel bir paywall ise (hasViewConfiguration değeri false), bunun yerine remote config paywall olarak ele alın.

Warning

createFlowView metodunun sonucu yalnızca bir kez sunulabilir. Tekrar sunmanız gerekiyorsa createFlowView metodunu yeniden çağırın.


try {
  final view = await AdaptyUI().createFlowView(flow: flow);
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

Parametreler:

ParametreVarlıkAçıklama
flowzorunluİstenen flow/paywall için bir görünüm elde etmek amacıyla kullanılan 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 ya da flow’da en yoksa flow’un varsayılan yerelleştirmesiyle oluşturulur. Bkz. Yerelleştirmeler ve yerel ayar kodları.
customLayoutId

isteğe bağlı

varsayılan: null

SDK 4.1+

Flow’un layout yapılandırmasındaki bir layout’un özel kimliği. SDK’nın cihaz türü ve ekran boyutuna göre otomatik seçtiği layout yerine belirtilen layout’u oluşturmak için kullanılır. Kimlikle eşleşen bir layout bulunamazsa çağrı AdaptyError ile başarısız olur. Flow & Paywall Builder henüz özel layout kimliği atamadığından bu alanı ayarlamadan bırakın.
customTagsisteğe bağlıFlow’un özel etiketleri için uygulamanızın değerleri; her etiketin tam adıyla anahtarlanmış bir map olarak verilir. Ayrıntılar için bkz. Flow’lara veri aktarma.
preloadProductsisteğe bağlıEkrandaki ürünlerin gösterim zamanlamasını optimize etmek için etkinleştirin. true olduğunda AdaptyUI gerekli ürünleri otomatik olarak getirir. Varsayılan: false.
loadTimeoutisteğe bağlıGörünüm yapılandırması yükleme süresini sınırlayan bir Duration. Zaman aşımına ulaşılırsa önbelleğe alınmış veriler veya yerel yedek kullanılır.
Note

Birden fazla dil kullanıyorsanız, flow yerelleştirmesi eklemeyi ve yerel ayar kodlarını doğru kullanmayı buradan öğrenin.

Görünümü elde ettikten sonra, flow/paywall’ı gösterin.

Varsayılan kitle için bir flow veya paywall alın, daha hızlı getirmek için

Genellikle flow’lar ve paywall’lar 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’a sahip olduğunuz ve kullanıcılarınızın zayıf bir internet bağlantısı bulunduğu durumlarda, bir flow veya paywall getirmek istediğinizden daha uzun sürebilir. Bu gibi durumlarda, hiçbir şey göstermek yerine sorunsuz bir kullanıcı deneyimi sağlamak amacıyla varsayılan bir flow veya paywall görüntülemek isteyebilirsiniz.

Bunu çözmek için, belirtilen placement’ın Tüm Kullanıcılar kitlesi için flow veya paywall’ı getiren getFlowForDefaultAudience metodunu kullanabilirsiniz. Ancak önerilen yaklaşımın, yukarıdaki Flow/paywall getirme bölümünde ayrıntılı olarak açıklandığı üzere, getFlow metoduyla flow veya paywall getirmek olduğunu anlamak kritik önem taşır.

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 (mevcut ve gelecekteki) için farklı paywall’lar göstermeniz gerekiyorsa, bazı zorluklarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen paywall’lar tasarlamanız gerekecek ya da mevcut (eski) sürümdeki kullanıcıların render edilemeyen paywall’larla karşılaşabileceğini kabul etmek durumunda kalacaksınız.
  • Hedefleme kaybı: Tüm kullanıcılar All Users kitlesi için tasarlanmış aynı paywall’ı görecektir; bu da kişiselleştirilmiş hedeflemeyi (ülkelere, pazarlama attribution’ına veya kendi özel özelliklerinize göre) kaybetmeniz anlamına gelir.

Bu dezavantajları kabul etmeye hazırsanız ve daha hızlı flow veya paywall yüklemenin avantajlarından yararlanmak istiyorsanız, getFlowForDefaultAudience yöntemini aşağıdaki gibi kullanın. Aksi takdirde yukarıda açıklanan getFlow yöntemini kullanmaya devam edin.

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

fetchPolicy, SDK’nın önbelleği kullanıp kullanamayacağını değil, önce hangi katmanı 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 verileri almasını sağladığı için bu seçeneği öneririz.

Ancak kullanıcılarınızın dengesiz bir internet bağlantısıyla karşılaştığını düşünüyorsanız AdaptyFlowFetchPolicy.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 her zaman 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üncellendiğinden, ağ isteklerinden kaçınmak için oturum sırasında güvenle kullanılabilir.

Üçüncü bir politika olan AdaptyFlowFetchPolicy.returnCacheDataIfNotExpiredElseLoad(maxAge), ikisi arasında bir yerde konumlanır: önbelleğe alınmış kopya, ilettiğiniz Duration değerinden daha yeni olduğu sürece önbellekten 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 temizleme yapıldığında silindiğini unutmayın.

Varlıkları özelleştirme

Flow/paywall’unuzdaki görselleri ve videoları özelleştirmek için özel varlıklar uygulayabilirsiniz.

Hero görseller 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 bir ana görsel yüklenirken yerel bir önizleme görseli gösterin.
  • Video oynatılmadan önce bir önizleme görseli gösterin.
  • Uygulamayla birlikte gelen medyayı göstererek ilk ekranın indirme gerektirmeden yüklenmesini sağlayın. Bkz. Uygulama paketiyle gelen ilk ekran medyasını gösterme.

İşte özel asset’leri basit bir sözlük aracılığıyla nasıl sağlayabileceğinize dair bir örnek:


final customAssets = {
    // Show a local image using a custom ID
    'custom_image': AdaptyCustomAsset.localImageAsset(
        assetId: 'assets/images/image_name.png',
    ),

    // Show a local video with a preview image
    'hero_video': AdaptyCustomAsset.localVideoAsset(
        assetId: 'assets/videos/custom_video.mp4',
    ),
};

try {
  final view = await AdaptyUI().createFlowView(
    flow: flow,
    customAssets: customAssets,
  );
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
Note

Bir varlık bulunamazsa, flow/paywall varsayılan görünümüne geri döner.

Geliştirici tanımlı zamanlayıcıları ayarlama

Mobil uygulamanızda özel zamanlayıcılar kullanmak için createFlowView metoduna bir customTimers map’i geçirin. Her map anahtarı bir zamanlayıcı ID’si, değeri ise zamanlayıcının ne zaman sona ereceğini tanımlayan bir DateTime nesnesidir. İşte bir örnek:


try {
  final view = await AdaptyUI().createFlowView(
    flow: flow,
    customTimers: {
      'CUSTOM_TIMER_6H': DateTime.now().add(const Duration(seconds: 3600 * 6)),
      'CUSTOM_TIMER_NY': DateTime(2027, 1, 1), // New Year 2027
    },
  );
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

Bu örnekte, CUSTOM_TIMER_NY ve CUSTOM_TIMER_6H, Adapty Kontrol Paneli’nde ayarladığınız geliştirici tanımlı zamanlayıcıların Timer ID’leridir. customTimers haritası, uygulamanızın her zamanlayıcıyı doğru değerle dinamik olarak güncellemesini sağlar. Örneğin:

  • CUSTOM_TIMER_NY: Zamanlayıcının bitiş zamanına (örneğin Yılbaşı Günü) kalan süre.
  • CUSTOM_TIMER_6H: Kullanıcının flow’u açtığı andan itibaren başlayan 6 saatlik sürede kalan zaman.

Adapty Kontrol Paneli’nde eski Paywall Builder ile ödeme duvarınızın görsel kısmını tasarladıktan sonra, bunu mobil uygulamanızda gösterebilirsiniz. Bu sürecin ilk adımı, aşağıda açıklandığı gibi placement ile ilişkili paywall’ı ve görünüm yapılandırmasını almaktır.

Warning

SDK 3.x Paywall Builder ile oluşturulan paywall’lar, Flutter SDK 3.3.0 veya daha yüksek bir sürümünü gerektirir.

Lütfen bu konunun Paywall Builder ile özelleştirilmiş paywall’lara atıfta bulunduğunu unutmayın. Paywall’larınızı manuel olarak uyguluyorsanız, Mobil uygulamanızda remote config paywall’ları için paywall ve ürünleri getirin 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’ları görüntülemeye 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ı kurun.

Paywall Builder ile tasarlanan paywall’ı getirme

Paywall Builder kullanarak bir paywall tasarladıysanız, bunu kullanıcıya göstermek için mobil uygulama kodunuzda render etme konusunda endişelenmenize gerek yok. Bu tür bir paywall, paywall içinde ne gösterileceğini ve nasıl gösterileceğini içerir. Bununla birlikte, placement aracılığıyla kimliğini, görünüm konfigürasyonunu almanız ve ardından mobil uygulamanızda sunmanız gerekir.

En iyi performansı sağlamak için, paywall’ı ve görünüm konfigürasyonunu mümkün olduğunca erken almanız kritik önem taşır; böylece görseller kullanıcıya sunulmadan önce indirmek için yeterli süre kalır.

Bir paywall almak için getPaywall metodunu kullanın:

try {
  final paywall = await Adapty().getPaywall(placementId: "YOUR_PLACEMENT_ID", locale: "en");
  // the requested paywall
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
}

Parametreler:

ParametreZorunlulukAçıklama
placementIdzorunluİstenen Placement’ın tanımlayıcısı. Bu, 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 iki alt etiketten oluşan bir dil kodu olması beklenir. İlk alt etiket dil, 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: 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 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ığı için 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, sırayı tersine çeviren AdaptyPaywallFetchPolicy.returnCacheDataElseLoad seçeneğini değerlendirin — ö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 için oturum sırasında kullanmak güvenlidir.

Üçüncü bir politika olan AdaptyPaywallFetchPolicy.returnCacheDataIfNotExpiredElseLoad(maxAge), ikisi arasında yer alır: önbelleğe alınmış kopya, geçirdiğiniz Duration 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 olduğu gibi kaldığını ve yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında temizlendiğ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 kısıtlı olduğu durumlarda bile güvenilirliği sağlarken paywalllarınızın her zaman 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şıldığında ö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; zira işlem dahili olarak farklı isteklerden oluşabilir.

Android için: TimeInterval değerini uzantı işlevleriyle oluşturabilirsiniz (örneğin 5.seconds, burada .seconds şuradan gelir: import com.adapty.utils.seconds) veya TimeInterval.seconds(5) kullanabilirsiniz. Sınır 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 konfigürasyonunu 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 konfigürasyonu alınamaz.

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


try {
  final view = await AdaptyUI().createPaywallView(
        paywall: paywall,
      );
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

Görünümü aldıktan sonra paywall’ı sunun.

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

Genellikle paywall’lar neredeyse anında getirilir, bu nedenle bu süreci hızlandırma konusunda endişelenmenize gerek yoktur. Ancak çok sayıda kitle ve paywall’ınız varsa ve kullanıcılarınızın zayıf bir internet bağlantısı varsa, bir paywall’ı getirmek 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östermek isteyebilirsiniz.

Bunu çözmek için, belirtilen placement’ın All Users kitlesi için paywall’ı getiren getPaywallForDefaultAudience metodunu kullanabilirsiniz. Ancak, önerilen yaklaşımın yukarıdaki Paywall Bilgisini Getirme bölümünde ayrıntılı olarak açıklandığı gibi getPaywall metoduyla paywall’ı getirmek olduğunu anlamak çok önemlidir.

Warning

getPaywall kullanmanızı neden ö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 gerekiyorsa, zorluklarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen paywall’lar tasarlamanız gerekecek ya da mevcut (eski) sürüme sahip kullanıcıların render edilmeyen paywall’larla sorun yaşayabileceğini kabul etmeniz gerekecektir.
  • Hedeflemenin kaybı: Tüm kullanıcılar All Users kitlesi için tasarlanmış aynı paywall’ı görecek; bu, kişiselleştirilmiş hedeflemeyi (ülkelere, marketing attribution veya kendi özel niteliklerinize dayalı hedefleme dahil) kaybetmeniz anlamına gelir.

Daha hızlı paywall getirme avantajından yararlanmak için bu dezavantajları kabul etmeye hazırsanız, aşağıdaki şekilde getPaywallForDefaultAudience metodunu kullanın. Aksi takdirde yukarıda açıklanan getPaywall’a bağlı kalın.

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ştirmesi 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, pt-br ise Brezilya Portekizcesini temsil eder.

Yerel ayar kodları ve kullanım önerilerimiz 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 önbelleği kullanıp kullanamayacağını değil, hangi katmanı önce okuyacağını belirler. Varsayılan olarak SDK önce sunucuya gider ve 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 veriyi 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, 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 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üncellendiğinden, ağ isteklerini önlemek için oturum boyunca kullanmak güvenlidir.

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

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

Varlıkları özelleştirme

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

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

Diğer görseller ve videolar için Adapty kontrol panelinde özel bir kimlik ayarlamanız 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.
  • Bir video çalıştırmadan önce önizleme görseli gösterin.
Important

Bu özelliği kullanmak için Adapty Flutter SDK’yı 3.8.0 veya daha yüksek bir sürüme güncelleyin.

İşte basit bir sözlük aracılığıyla özel varlıkları nasıl sağlayabileceğinize dair bir örnek:


final customAssets = {
    // Show a local image using a custom ID
    'custom_image': AdaptyCustomAsset.localImageAsset(
        assetId: 'assets/images/image_name.png',
    ),

    // Show a local video with a preview image
    'hero_video': AdaptyCustomAsset.localVideoAsset(
        assetId: 'assets/videos/custom_video.mp4',
    ),
};

try {
  final view = await AdaptyUI().createPaywallView(
    paywall: paywall,
    customAssets: customAssets,
  );
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
Note

Bir varlık bulunamazsa, paywall varsayılan görünümüne geri döner.

Geliştirici tanımlı zamanlayıcıları ayarlama

Mobil uygulamanızda özel zamanlayıcılar kullanmak için createPaywallView metoduna bir customTimers haritası geçirin. Haritadaki her anahtar bir zamanlayıcı ID’sidir ve değeri zamanlayıcının ne zaman sona ereceğini tanımlayan bir DateTime nesnesidir. İşte bir örnek:


try {
  final view = await AdaptyUI().createPaywallView(
        paywall: paywall,
        customTimers: {
          'CUSTOM_TIMER_6H': DateTime.now().add(const Duration(seconds: 3600 * 6)),
          'CUSTOM_TIMER_NY': DateTime(2025, 1, 1), // New Year 2025
        },
      );
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

Bu örnekte, CUSTOM_TIMER_NY ve CUSTOM_TIMER_6H, Adapty Kontrol Paneli’nde ayarladığınız geliştirici tanımlı zamanlayıcıların Timer ID’leridir. customTimers haritası, uygulamanızın her zamanlayıcıyı doğru değerle dinamik olarak güncellemesini sağlar. Örneğin:

  • CUSTOM_TIMER_NY: Yeni Yıl Günü gibi zamanlayıcının bitiş anına kadar kalan süre.
  • CUSTOM_TIMER_6H: Kullanıcının paywall’ı açtığı andan itibaren başlayan 6 saatlik sürede kalan zaman.