iOS SDK'da paywall getirme işlemini optimize etme
iOS’ta güvenilir bir paywall getirme işlemi üç şeyi başarır: hızlı render eder, kitleyeye hedeflenmiş paywall’ı döndürür ve ağ yavaş olduğunda sorunsuz yedek sunar. Aşağıdaki kurallar bunu sağlamak için zamanlama, önbellekleme ve yedek desenlerini kapsar.
Bu kurallar, Adapty.activate() ve Adapty.identify() işlemlerinin tamamlandığını varsayar. Bkz. iOS SDK’da çağrı sırası.
Kurallar ve tuzaklar
| Bunu yapın | Bunu yapmayın | Neden |
|---|---|---|
Göstermek üzere olduğunuz placement’ı getirin ya da önbelleği preloadFlows ile ısıtın (SDK 4.1+). | Başlatmada kendi eş zamanlı getFlow çağrılarınızı yayın. | Elle hazırlanmış bir prefetch patlaması ana iş parçacığını bloke eder ve siyah ekrana yol açar. preloadFlows bunun için tasarlanmıştır ve toplu işlem boyunca tek bir zaman aşımı bütçesini paylaşır. |
getPaywall’ı, attribution’ın çözüme kavuşmasına fırsat tanındıktan sonra çağırın — örneğin activate’ten 1–2 saniye sonra ya da onProfileUpdate tetiklendikten sonra. | getPaywall’ı App.init()’te çağırın. | Attribution henüz gelmemiştir. Paywall, varsayılan kitleye göre çözümlenir ve sessizce segment ile ASA kişiselleştirmesini atlar. |
Her placement için bir loadTimeout belirleyin ve bir yedek paywall yapılandırın. | getPaywall’ı süresiz olarak bekleyin. | Zaman aşımı olmadan, bağlantısı zayıf kullanıcılar ağ çözümlenene kadar boş bir ekran görür — ya da uygulamayı kapatır. |
fetchPolicy ve loadTimeout parametre referansı için Paywall ve ürünleri getirme sayfasına, doğru placement’ı seçmek için ise Placement’lar sayfasına bakın.
Placement’ları önceden yükleyin
Bu yöntemler SDK 4.1 sürümünden itibaren kullanılabilir.
preloadFlows ve preloadOnboardings, placement’ları önceden SDK önbelleğine çeker. Aynı placement için sonraki bir getFlow veya getOnboarding çağrısı, ağ yerine önbellekten çözümlenir; böylece paywall görünür bir bekleme olmadan gösterilir.
Bu yöntemleri, oturumun hangi placement’lara ihtiyaç duyacağını bildiğinizde ancak henüz göstermek istemediğinizde kullanın — örneğin, activate ve identify çözümlendikten hemen sonra, kullanıcının henüz dokunmadığı bir düğmenin arkasındaki paywall için.
Parametreler:
placementIds(zorunlu): Önceden yüklenecek placement’lar. Boş ve tekrarlanan kimlikler göz ardı edilir.locale(isteğe bağlı, yalnızcapreloadOnboardings): Önbelleğe alınacak onboarding dili.loadTimeout(isteğe bağlı): Her placement için değil, tüm toplu işlem için saniye cinsinden zaman aşımı. Varsayılan değer 5 saniyedir; 1 saniyenin altındaki değerler 1 saniyeye yükseltilir.
Bilinmesi gereken davranışlar:
- Metodlar yalnızca tüm placement’lar denendikten sonra hata fırlatır ve hata, placement başına yaşanan başarısızlıkları bir araya getirir. Bir placement’taki hata diğerlerini durdurmaz.
- Bir placement zaman aşımına uğrarsa veya ağ hatasıyla başarısız olursa, SDK o placement için varsayılan kitle varyasyonuna geri döner. Diğer hatalar olduğu gibi raporlanır.
- Zaman aşımı, kitleye yönelik fetch tamamlanmadan önce devreye girerse, SDK kalan süre içinde varsayılan kitle varyasyonunu almayı yine de dener.
- Önbellekleme yalnızca cache’i ısıtır. İçerik döndürmez — içeriği görüntülemek için yine de
getFlowveyagetOnboardingçağırmanız gerekir.
Hangi placement’ın başarısız olduğunu öğrenin
Fırlatılan hata, networkFailed (2002) koduyla tüm batch’i kapsayan tek bir AdaptyError’dır. Bireysel hataları görmek için preloadErrors özelliğini okuyun — placement ID’sine göre anahtarlanmış bir sözlük:
do {
try await Adapty.preloadFlows(placementIds: ["onboarding", "main_paywall"])
} catch {
for (placementId, placementError) in error.preloadErrors ?? [:] {
// bireysel placement'ı logla veya yeniden dene
}
}
preloadErrors, herhangi bir preload çağrısından kaynaklanmayan hatalar için nil değerini alır; bu nedenle nil değerini “preload hatası yok” olarak değil, “preload başarısızlığı değil” olarak değerlendirin.
Kitle segmentasyonunu hiç beklemeden önbelleği ısıtmak için varsayılan kitle varyantlarını kullanın:
try await Adapty.preloadFlowsForDefaultAudience(placementIds: ["main_paywall"])
try await Adapty.preloadOnboardingsForDefaultAudience(placementIds: ["intro"])
Bağlantı sorunları için ayarlar
Sürekli zayıf bağlantının yaşandığı pazarlar için (kırsal alanlar, toplu taşıma, yönlendirme sorunlarından etkilenen bölgeler):
- İlk fetch dışında her fetch işleminde
fetchPolicy: .returnCacheDataElseLoadkullanın. - Adapty Kontrol Paneli’ndeki her placement için bir yedek paywall yapılandırın.
loadTimeoutdeğerini 3–5 saniye olarak ayarlayın ve zaman aşımı gerçekleştiğinde yedek paywalla geçin.- Paywall gösterimini
getProfile()sonucuna bağlamayın.getPaywallişlemini bağımsız olarak çağırın; böylece yavaş bir profil yüklemesi arayüzü bloke etmez.