Flow ve paywall'ları getirme - iOS
getFlow ile alınanlar Flow’unuzu tasarladıktan sonra bunu mobil uygulamanızda gösterebilirsiniz. İ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ı getirmektir.
Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğine dair gerçek bir örnek görmek ister misiniz? Örnek uygulamalarımıza göz atın; paywall’ların gösterilmesi, satın alma yapılması ve diğer temel işlevler dahil olmak üzere tam kurulumu sergilemektedir.
Başlamadan önce
İhtiyacınız olanlar:
- Adapty Kontrol Paneli’nde ürünler: Ürünlerinizi oluşturun.
- Ürünler içeren bir flow: Flow & Paywall Builder’da oluşturun ve ürünleri ona atayın.
- Bir placement: Placement oluşturun ve flow’unuzu buna atayın.
- Adapty SDK kurulu: iOS SDK kurulum kılavuzuna bakın.
Flow/paywall getirme
Eğer builder’da bir flow veya 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 flow veya paywall, içinde ne gösterileceğini ve nasıl gösterileceğini zaten kapsar. Bununla birlikte, placement aracılığıyla ID’sini, görünüm yapılandırmasını almanız ve ardından mobil uygulamanızda göstermeniz gerekir.
Flow veya paywall’ı ve görünüm yapılandırmasını mümkün olduğunca erken — ideal olarak göstermeden çok önce — getirin. Görünüm yapılandırmasını getirir getirmez, SDK arka planda görsellerini indirip önbelleğe almaya başlar. Ne kadar erken getirirseniz, bu indirmelerin tamamlanması için o kadar fazla zaman olur. Flow veya paywall’ı gösterdiğinizde, yapılandırması ve görselleri zaten önbelleğe alınmış ve görüntülenmeye hazır olabilir.
Aynı anda birden fazla placement’ı ön belleğe almak için preloadFlows metodunu çağırın (iOS SDK 4.1+). Bu yalnızca placement JSON’ını önbelleğe alır, bu nedenle düzeni ve görselleri almak için view yapılandırmasını yine de fetch etmeniz gerekir.
Bir flow veya paywall almak için getFlow metodunu kullanın:
Parametreler:
| Parametre | Varlık | Açıklama |
|---|---|---|
| placementId | zorunlu | İstenen Placement’ın tanımlayıcısı. Bu, Adapty Kontrol Paneli’nde bir placement oluştururken belirttiğiniz değerdir. |
| fetchPolicy | varsayılan: .reloadRevalidatingCacheData |
Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla uğraştığını düşünüyorsanız, sırayı tersine çeviren Üçüncü bir politika olan Önbelleğin uygulama yeniden başlatıldığında bozulmadan kaldığını ve yalnızca uygulama yeniden yüklendiğinde veya manuel temizleme yoluyla silindiğini unutmayın. Adapty SDK, paywallları yerel olarak iki katmanda saklar: yukarıda açıklanan düzenli olarak güncellenen önbellek ve yedek paywalllar. Paywallları daha hızlı almak için CDN ve CDN’e ulaşılamadığında bağımsız bir yedek sunucu kullanıyoruz. 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 son sürümünü almanızı sağlamak için tasarlanmıştır. |
| loadTimeout | varsayılan: 5 sn | Bu değer, bu yöntemin zaman aşımını sınırlar. Zaman aşımına ulaşılırsa, önbelleğe alınan veriler veya yerel yedek döndürülür. Nadir durumlarda bu yöntemin, |
Yanıt parametreleri:
| Parametre | Açıklama |
|---|---|
| Flow | Placement, tanımlayıcılar (id, variationId), varyasyon adı (variationName, isteğe bağlı, SDK 4.2+), adı, paywall varyasyonları (paywalls), remote config’ler ve flow’un bir görünüm yapılandırması içerip içermediğini belirten hasViewConfiguration bayrağını içeren bir AdaptyFlow nesnesi. Ürünleri ön yükleme, özel UI veya programatik kontroller için getirmek istiyorsanız getPaywallProducts(flow:) çağrısını kullanın. |
Görünüm yapılandırmasını getirme
Flow veya paywall’ı getirdikten sonra, flow.hasViewConfiguration aracılığıyla bir görünüm yapılandırması içerip içermediğini kontrol edin. Bu işaret, placement’ın Adapty Kontrol Paneli’nde nasıl tasarlandığını ayırt eder:
true— placement, Flow & Paywall Builder (bir flow) veya eski Paywall Builder (bir paywall) kullanılarak tasarlanmış. Adapty, kullanıcı arayüzünü sizin için oluşturur. Görünüm yapılandırmasını getirmek ve flow veya paywall’ı sunmak için aşağıdaki adımlarla devam edin.false— placement, Builder arayüzü olmayan özel bir paywall’dır.
getFlowConfiguration yöntemini kullanarak görünüm yapılandırmasını yükleyin.
guard flow.hasViewConfiguration else {
// handle as remote config paywall
return
}
let flowConfiguration = try await AdaptyUI.getFlowConfiguration(forFlow: flow)Parametreler:
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| forFlow | zorunlu | Adapty.getFlow aracılığıyla elde edilen bir AdaptyFlow nesnesi. |
| locale | isteğe bağlı varsayılan: | Paywall yerelleştirmesinin tanımlayıcısı. - ile ayrılmış bir veya iki alt etiketli dil kodu olarak beklenir (örn. en, pt-br). Bkz. Yerelleştirmeler ve yerel ayar kodları. |
| customLayoutId | isteğe bağlı varsayılan: 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 olarak seçtiği layout yerine belirli bir layout’u render etmek için kullanın. Kimlikle eşleşen bir layout bulunamazsa çağrı, no-view-configuration hatasıyla başarısız olur. Flow & Paywall Builder henüz özel layout kimliği atamadığından bu alanı boş bırakın. |
| loadTimeout | varsayılan: 5 sn | Bu değer, metodun zaman aşımını 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 metot, arka planda farklı isteklerden oluşabileceğinden loadTimeout içinde belirtilenden biraz daha geç zaman aşımına uğrayabilir. |
| products | isteğe bağlı | Ekrandaki ürünlerin görüntülenme zamanlamasını optimize etmek için bir AdaptyPaywallProduct nesneleri dizisi sağlayın. nil geçilirse AdaptyUI gerekli ürünleri otomatik olarak getirir. |
| systemRequestsHandler | isteğe bağlı | Flow aksiyonları tarafından tetiklenen sistem izni ve inceleme isteklerini yöneten, AdaptySystemRequestsHandler protokolüne uyan bir nesne. Yalnızca flow’unuz bu tür aksiyonlar içeriyorsa gereklidir. |
| assetsResolver | isteğe bağlı | Flow/paywall’daki görüntü ve videoları geçersiz kılan bir [String: AdaptyCustomAsset] sözlüğü. Bkz. Varlıkları özelleştirme. |
| timerResolver | isteğe bağlı | Geliştirici tanımlı zamanlayıcılar için bitiş tarihleri sağlayan, AdaptyTimerResolver protokolüne uyan bir nesne. Bkz. Geliştirici tanımlı zamanlayıcıları ayarlama. |
Yüklendikten sonra, flow/paywall’ı gösterin.
Varsayılan kitle için bir flow veya paywall alarak daha hızlı yükleme sağlayın
Genellikle flow’lar ve paywall’lar neredeyse anında yüklenir, dolayısıyla bu süreci hızlandırmak için özel bir şey yapmanız gerekmez. 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 veya paywall’ın yüklenmesi istediğinizden daha uzun sürebilir. Böyle durumlarda, hiçbir şey göstermek yerine pürüzsüz bir kullanıcı deneyimi sunmak amacıyla varsayılan bir flow veya paywall görüntülemek isteyebilirsiniz.
Bunu çözmek için, belirtilen placement’ın All Users kitlesi için flow ya da paywall’ı getiren getFlowForDefaultAudience metodunu kullanabilirsiniz. Ancak, önerilen yaklaşımın flow veya paywall’ı getFlow metoduyla getirmek olduğunu anlamak önemlidir; bu konunun ayrıntıları yukarıdaki Paywall Bilgisini Getirme bölümünde ele alınmıştır.
Neden getFlow kullanımını öneriyoruz
getFlowForDefaultAudience metodunun birkaç önemli dezavantajı bulunmaktadı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 ya da mevcut (eski) sürüme sahip kullanıcıların render edilemeyen paywall’larla sorun yaşayabileceğini kabul etmeniz gerekecektir.
- Hedeflemenin kaybı: Tüm kullanıcılar All Users kitlesi için tasarlanmış aynı paywall’u görecektir; bu da ülkelere, pazarlama attribution’ına veya kendi özel özniteliklerinize dayalı kişiselleştirilmiş hedeflemeyi kaybetmeniz anlamına gelir.
Bu dezavantajları kabul edip daha hızlı flow veya paywall çekme işleminden yararlanmak istiyorsanız, getFlowForDefaultAudience metodunu aşağıdaki gibi kullanın. Aksi takdirde yukarıda açıklanan getFlow metodunu kullanmaya devam edin.
Adapty.getFlowForDefaultAudience(placementId: "YOUR_PLACEMENT_ID") { result in
switch result {
case let .success(flow):
// the requested flow
case let .failure(error):
// handle the error
}
}
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| placementId | zorunlu | Placement tanımlayıcısı. Adapty Kontrol Paneli’nde bir placement oluştururken belirttiğiniz değerdir. |
| fetchPolicy | varsayılan: .reloadRevalidatingCacheData |
Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla uğraştığını düşünüyorsanız Üçüncü bir politika olan Önbelleğin uygulama yeniden başlatıldığında bozulmadan kaldığını ve yalnızca uygulama yeniden yüklendiğinde ya da manuel temizleme yapıldığında silindiğini unutmayın. |
Varlıkları özelleştirme
Paywall/flow’unuzdaki görsel ve videoları özelleştirmek için özel varlıkları uygulayın.
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 hedefleyerek davranışlarını özelleştirebilirsiniz.
Diğer görseller ve videolar için Adapty kontrol panelinde özel bir ID ayarlamanız gerekir.
Örneğin şunları yapabilirsiniz:
- Bazı kullanıcılara farklı bir görsel veya video gösterin.
- Uzaktan yüklenen 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österin; böylece ilk ekran herhangi bir indirme yapılmadan yüklenir. Bkz. Uygulama paketinden ilk ekran medyasını gösterme.
- Oynatıcının video yüklenmeden önce düzende yer ayırabilmesi için videonun piksel çözünürlüğünü belirtin (en boy oranı =
width / height). Atlamak içinnilgeçin.
İşte özel varlıkları basit bir sözlük aracılığıyla nasıl sağlayabileceğinize dair bir örnek:
let customAssets: [String: AdaptyCustomAsset] = [
// Show a local image using a custom ID
"custom_image": .image(
.uiImage(value: UIImage(named: "image_name")!)
),
// Show a local preview image while a remote main image is loading
"hero_image": .image(
.remote(
url: URL(string: "https://example.com/image.jpg")!,
preview: UIImage(named: "preview_image")
)
),
// Show a local video with a preview image and a known resolution
"hero_video": .video(
.file(
url: Bundle.main.url(forResource: "custom_video", withExtension: "mp4")!,
preview: .uiImage(value: UIImage(named: "video_preview")!),
resolution: CGSize(width: 1080, height: 1920)
)
),
]
let flowConfig = try await AdaptyUI.getFlowConfiguration(
forFlow: flow,
assetsResolver: customAssets
)Bir öğe bulunamazsa, paywall/flow 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 AdaptyTimerResolver protokolünü uygulayan bir nesne oluşturun. Bu nesne, her özel zamanlayıcının nasıl render edileceğini tanımlar. İsterseniz bu protokole zaten uyan bir [String: Date] sözlüğünü doğrudan kullanabilirsiniz. İşte bir örnek:
@MainActor
struct AdaptyTimerResolverImpl: AdaptyTimerResolver {
func timerEndAtDate(for timerId: String) -> Date {
switch timerId {
case "CUSTOM_TIMER_6H":
Date(timeIntervalSinceNow: 3600.0 * 6.0) // 6 hours
case "CUSTOM_TIMER_NY":
Calendar.current.date(from: DateComponents(year: 2025, month: 1, day: 1)) ?? Date(timeIntervalSinceNow: 3600.0)
default:
Date(timeIntervalSinceNow: 3600.0) // 1 hour
}
}
}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. timerResolver, 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ş anına, örneğin Yılbaşı’na kadar kalan süre.CUSTOM_TIMER_6H: Kullanıcı paywall’ı açtığında başlayan 6 saatlik sürede kalan zaman.
Adapty Kontrol Paneli’nde Paywall Builder ile paywallınızın görsel kısmını tasarladıktan sonra, bunu mobil uygulamanızda gösterebilirsiniz. İlk adım, aşağıda açıklandığı gibi placement ile ilişkilendirilmiş paywall’ı ve görünüm yapılandırmasını almaktır.
Bu konunun Paywall Builder ile özelleştirilmiş paywalllar için geçerli olduğunu unutmayın. Paywalllarınızı manuel olarak uyguluyorsanız, Remote config paywalllar için paywallları ve ürünleri getirme bölümüne bakın.
Mobil uygulamanızda Adapty SDK’nın gerçek bir entegrasyonunu görmek ister misiniz? Tam kurulumu, paywall gösterimi, satın alma işlemleri ve diğer temel işlevleri gösteren örnek uygulamalarımıza göz atın.
Mobil uygulamanızda paywall göstermeye başlamadan önce
- Adapty Kontrol Paneli’nde ürünlerinizi oluşturun.
- Adapty Kontrol Paneli’nde bir paywall oluşturun ve ürünlerinizi buna ekleyin.
- Adapty Kontrol Paneli’nde placement’lar oluşturun ve paywall’ınızı bunlara ekleyin.
- Mobil uygulamanıza Adapty SDK’yı yükleyin.
Paywall Builder ile tasarlanan paywallı getirme
Paywall Builder kullanarak bir paywall tasarladıysanız, onu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmenize gerek yoktur. Böyle bir paywall, hem paywallda neyin gösterileceğini hem de nasıl gösterileceğini içerir. Bununla birlikte, ID’sini placement aracılığıyla, görünüm yapılandırmasını ise ayrıca almanız ve ardından uygulamanızda sunmanız gerekir.
En iyi performansı sağlamak için, kullanıcıya sunmadan önce görsellerin indirilmesine yeterince zaman tanımak amacıyla paywallı ve görünüm yapılandırmasını mümkün olduğunca erken almanız önemlidir.
Paywall almak için getPaywall metodunu kullanın:
Parametreler:
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| placementId | zorunlu | İ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: | Paywall yerelleştirmesinin tanımlayıcısı. Bu parametrenin, eksi (-) karakteriyle ayrılmış bir veya iki alt etiket içeren bir dil kodu olması beklenir. İlk alt etiket dili, ikincisi ise bölgeyi belirtir. Örnek: 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. |
| fetchPolicy | varsayılan: .reloadRevalidatingCacheData |
Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla karşılaştığını düşünüyorsanız Üçüncü bir politika olan Ö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ı yerel olarak 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 ve CDN’e erişilemediğinde devreye giren 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 paywall’larınızın her zaman en güncel sürümünü almanızı garanti edecek şekilde tasarlanmıştır. |
| loadTimeout | varsayılan: 5 sn | Bu değer, yöntem için 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. İşlem arka planda farklı isteklerden oluşabileceğinden, nadir durumlarda bu yöntemin |
Yanıt parametreleri:
| Parametre | Açıklama |
|---|---|
| Paywall | Ürün kimliklerinin listesini, paywall tanımlayıcısını, remote config’i ve diğer çeşitli özellikleri içeren bir AdaptyPaywall nesnesi. |
Paywall Builder ile tasarlanmış paywallın görünüm yapılandırmasını çekme
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 yapılandırması çekilemez.
Paywall’ı çektikten sonra, Paywall Builder kullanılarak oluşturulduğunu gösteren bir görünüm yapılandırması içerip içermediğini kontrol edin. Bu, paywall’ı nasıl göstereceğiniz konusunda size rehberlik eder. Görünüm yapılandırması mevcutsa Paywall Builder paywall’ı olarak ele alın; değilse remote config paywall’ı olarak işleyin.
Görünüm yapılandırmasını yüklemek için getPaywallConfiguration metodunu kullanın.
guard paywall.hasViewConfiguration else {
// use your custom logic
return
}
do {
let paywallConfiguration = try await AdaptyUI.getPaywallConfiguration(
forPaywall: paywall,
products: products
)
// use loaded configuration
} catch {
// handle the error
}Parametreler:
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| paywall | zorunlu | İstenen paywall için controller almak üzere kullanılan AdaptyPaywall nesnesi. |
| loadTimeout | varsayılan: 5 sn | Bu metot için zaman aşımı sınırını belirler. Zaman aşımına ulaşıldığında önbelleğe alınmış veri veya yerel yedek döndürülür. İşlem arka planda birden fazla istekten oluşabileceğinden, bu metot nadir durumlarda loadTimeout içinde belirtilenden biraz daha geç zaman aşımına uğrayabilir. |
| products | isteğe bağlı | Ekranda ürünlerin görüntülenme süresini optimize etmek için AdaptyPaywallProduct nesnelerinden oluşan bir dizi sağlayın. nil geçilirse AdaptyUI gerekli ürünleri otomatik olarak getirir. |
Birden fazla dili destekliyorsanız, paywall’ınıza bir yerelleştirme ekleyin. Kullanılacak kodlar için bkz. Yerelleştirmeler ve yerel ayar kodları.
Yüklendikten sonra, paywall’ı gösterin.
Daha hızlı getirmek için varsayılan kitle paywallını alma
Paywalllar genellikle neredeyse anında getirilir, bu nedenle bu süreci hızlandırmak konusunda 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 kitlesine ait paywall’unu 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 bilmek önemlidir.
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ı paywalllar göstermeniz gerekiyorsa zorluklarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen paywalllar tasarlamak zorunda kalırsınız ya da mevcut (eski) sürüme sahip kullanıcıların render edilmemiş paywalllarla sorun yaşamasını kabul etmek durumunda kalırsınız.
- Hedefleme kaybı: Tüm kullanıcılar Tüm Kullanıcılar kitlesi için tasarlanmış aynı paywallı görür; bu da kişiselleştirilmiş hedeflemeyi (ülkelere, pazarlama attribution’ına veya kendi özel niteliklerinize göre) kaybetmeniz anlamına gelir.
Daha hızlı paywall getirme avantajından yararlanmak için bu dezavantajları kabul etmeye hazırsanız, aşağıdaki gibi getPaywallForDefaultAudience metodunu kullanın. Aksi takdirde yukarıda açıklanan getPaywall metodunu tercih edin.
Adapty.getPaywallForDefaultAudience(placementId: "YOUR_PLACEMENT_ID", locale: "en") { result in
switch result {
case let .success(paywall):
// the requested paywall
case let .failure(error):
// handle the error
}
}getPaywallForDefaultAudience metodu iOS SDK 2.11.2 sürümünden itibaren kullanılabilir.
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| placementId | zorunlu | Placement tanımlayıcısı. Bu değeri Adapty Kontrol Paneli’nde placement oluştururken belirtirsiniz. |
| 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 etiket içeren bir dil kodu olmalıdır. İlk alt etiket dili, ikincisi ise bölgeyi belirtir. Örnek: Yerel ayar kodları ve bunların nasıl kullanılması gerektiği hakkında daha fazla bilgi için Yerelleştirmeler ve yerel ayar kodları sayfasına bakın. |
| fetchPolicy | varsayılan: .reloadRevalidatingCacheData |
Ancak kullanıcılarınızın kararsız internet bağlantısıyla karşılaştığını düşünüyorsanız Üçüncü bir politika olan Önbelleğin uygulama yeniden başlatıldığında sıfırlanmadığını, yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında temizlendiğ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ış ID’lere sahiptir: hero_image ve hero_video. Özel bir varlık paketinde, bu öğeleri ID’leriyle 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östermek.
- Uzak ana görsel yüklenirken yerel bir önizleme görseli göstermek.
- Bir video başlamadan önce önizleme görseli göstermek.
Bu özelliği kullanmak için Adapty iOS SDK’yı 3.7.0 veya daha yüksek bir sürüme güncelleyin.
Özel varlıkları basit bir sözlük aracılığıyla nasıl sağlayabileceğinize dair bir örnek:
let customAssets: [String: AdaptyCustomAsset] = [
// Özel bir kimlik kullanarak yerel bir görsel göster
"custom_image": .image(
.uiImage(value: UIImage(named: "image_name")!)
),
// Uzak ana görsel yüklenirken yerel bir önizleme görseli göster
"hero_image": .image(
.remote(
url: URL(string: "https://example.com/image.jpg")!,
preview: UIImage(named: "preview_image")
)
),
// Önizleme görseli olan yerel bir video göster
"hero_video": .video(
.file(
url: Bundle.main.url(forResource: "custom_video", withExtension: "mp4")!,
preview: .uiImage(value: UIImage(named: "video_preview")!)
)
),
]
let paywallConfig = try await AdaptyUI.getPaywallConfiguration(
forPaywall: paywall,
assetsResolver: customAssets
)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 AdaptyTimerResolver protokolünü uygulayan bir nesne oluşturun. Bu nesne, her özel zamanlayıcının nasıl görüntüleneceğini tanımlar. Tercih ederseniz, bu protokole zaten uygun olduğu için doğrudan bir [String: Date] sözlüğü de kullanabilirsiniz. İşte bir örnek:
@MainActor
struct AdaptyTimerResolverImpl: AdaptyTimerResolver {
func timerEndAtDate(for timerId: String) -> Date {
switch timerId {
case "CUSTOM_TIMER_6H":
Date(timeIntervalSinceNow: 3600.0 * 6.0) // 6 saat
case "CUSTOM_TIMER_NY":
Calendar.current.date(from: DateComponents(year: 2025, month: 1, day: 1)) ?? Date(timeIntervalSinceNow: 3600.0)
default:
Date(timeIntervalSinceNow: 3600.0) // 1 saat
}
}
}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. timerResolver, uygulamanızın her zamanlayıcıyı doğru değerle dinamik olarak güncellemesini sağlar. Örneğin:
CUSTOM_TIMER_NY: Yılbaşı 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.