Flow ve paywall'ları alma - Kotlin Multiplatform
getFlow ile alınanlar Flow’unuzu tasarladıktan sonra onu mobil uygulamanızda görüntüleyebilirsiniz. İlk adım, placement ile ilişkili flow veya paywall’ı ve görünüm yapılandırmasını aşağıda açıklandığı şekilde almaktır.
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:
- Adapty Kontrol Paneli’nde ürünler: Ürünlerinizi oluşturun.
- Ürünleri olan bir flow: Flow & Paywall Builder içinde oluşturun ve ürünleri ona atayın.
- Bir placement: Placement oluşturun ve flow’unuzu ona atayın.
- Adapty SDK kurulu: Kotlin Multiplatform 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. Böyle bir flow veya paywall, içinde neyin gösterileceğini ve nasıl gösterileceğini zaten 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 gerekir.
En iyi performansı sağlamak için, flow veya paywall’ı ve bunların görünüm yapılandırmasını mümkün olduğunca erken almanız kritik öneme sahiptir; böylece görseller kullanıcıya sunulmadan önce indirmek için yeterli süre tanınmış olur.
Bir flow veya paywall almak için getFlow metodunu kullanın:
Adapty.getFlow(
placementId = "YOUR_PLACEMENT_ID",
fetchPolicy = AdaptyPaywallFetchPolicy.Default,
loadTimeout = 5.seconds
).onSuccess { flow ->
// istenen flow/paywall
}.onError { error ->
// hatayı işle
}Parametreler:
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| placementId | zorunlu | İstenen Placement’ın tanımlayıcısı. Bu, Adapty Kontrol Paneli’nde placement oluştururken belirttiğiniz değerdir. |
| fetchPolicy | varsayılan: AdaptyPaywallFetchPolicy.Default |
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 silinmediğini, yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında temizlendiğini unutmayın. Adapty SDK, flow’ları ve paywall’ları yerel olarak iki katmanda depolar: yukarıda açıklanan düzenli olarak güncellenen önbellek ve yedek paywall’lar. Bunları 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 zayıf olduğu durumlarda bile güvenilirliği sağlarken her zaman en son sürümü almanızı garantilemek amacıyla tasarlanmıştır. |
| loadTimeout | varsayılan: 5 sn | Bu değer, metodun zaman aşımını sınırlandırır. Zaman aşımına ulaşılırsa önbelleğe alınan veriler veya yerel yedek döndürülür. Nadir durumlarda bu metodun Kotlin Multiplatform için: |
Yanıt parametreleri:
| Parametre | Açıklama |
|---|---|
| Flow | Placement’ı, tanımlayıcıları (instanceIdentity, variationId), adı, paywall varyasyonlarını (paywalls — AdaptyFlowPaywall listesi) ve remote config’leri (remoteConfigs — her locale için bir girdi içeren liste) barındıran AdaptyFlow nesnesi. Ön yükleme, özel arayüz veya programatik kontroller için gerçek ürünleri getirmek istiyorsanız getPaywallProducts(flow) metodunu çağırın. |
Görünüm yapılandırmasını getir
Flow veya paywall’ı getirdikten sonra, görünüm yapılandırmasını yükleyin ve createFlowView metoduyla görünümü tek adımda oluşturun. Kontrol etmeniz gereken ayrı bir bayrak yoktur: placement Flow & Paywall Builder (flow) veya old Paywall Builder (paywall) ile tasarlanmışsa, createFlowView görünümü sunuma hazır şekilde döndürür. Placement, Builder arayüzü olmayan özel bir paywall ise createFlowView bir AdaptyResult.Error döndürür — bunu bir remote config paywall olarak ele alın.
Flow’u yayınladığınızdan emin olun. Yayınlanmamış düzenlemeleri olan bir flow Dirty statüsünde görünür ve ilgili placement en son yayınlanan sürümü sunmaya devam eder.
AdaptyUI.createFlowView(
flow = flow,
loadTimeout = 5.seconds,
preloadProducts = true
).onSuccess { view ->
// use view
}.onError { error ->
// the flow has no view configured, or view creation failed
}
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| flow | zorunlu | Adapty.getFlow aracılığıyla elde edilen bir AdaptyFlow nesnesi. |
| locale | isteğ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 oluşturulur; flow’da en yoksa flow’un varsayılan yerelleştirmesi kullanılır. Bkz. Yerelleştirmeler ve yerel ayar kodları. |
| customLayoutId | isteğe bağlı varsayılan: SDK 4.1+ | Flow Builder’da tanımlanmış bir düzene ait özel kimlik. SDK’nın cihaz türü ve ekran boyutuna göre otomatik seçtiği düzen yerine belirli bir düzeni oluşturmak için bu değeri iletin. Kimlikle eşleşen bir düzen bulunamazsa flow, görünüm yapılandırması olmadan yüklenir. |
| loadTimeout | isteğe bağlı | Bu değer, metodun zaman aşımı süresini 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. Arka planda farklı isteklerden oluşabileceğinden, bu metod belirtilen loadTimeout değerinden biraz daha geç zaman aşımına uğrayabilir. kotlin.time.Duration.Companion içindeki 5.seconds gibi genişletme fonksiyonlarını kullanabilirsiniz. |
| preloadProducts | isteğe bağlı | Daha iyi performans için ürünleri önceden yüklemek amacıyla true olarak ayarlayın. Etkinleştirildiğinde ürünler önceden yüklenir ve flow veya paywall’ın gösterilmesi için gereken süre kısalır. |
| productPurchaseParams | isteğe bağlı | AdaptyProductIdentifier ile AdaptyPurchaseParameters eşlemesi. Flow veya paywall’daki her ürün için kişiselleştirilmiş teklifler veya abonelik güncelleme parametreleri gibi satın alma özgü parametreleri yapılandırmak için kullanın. |
Birden fazla dil kullanıyorsanız, flow yerelleştirmesi eklemeyi öğrenin.
Yüklendikten sonra, flow veya paywall’ı gösterin.
Varsayılan kitle için flow veya paywall alarak daha hızlı yükleme sağlayın
Genellikle flow’lar ve paywall’lar neredeyse anında yüklenir, 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 veya paywall’ı yüklemek istediğinizden daha uzun sürebilir. Bu gibi durumlarda, hiçbir şey göstermek yerine sorunsuz bir kullanıcı deneyimi sağlamak için varsayılan bir flow veya paywall görüntülemek isteyebilirsiniz.
Bunu gidermek için, belirtilen placement’ın All Users kitlesi için flow veya paywall’ını çeken getFlowForDefaultAudience metodunu kullanabilirsiniz. Ancak şunu anlamak kritik önem taşır: önerilen yaklaşım, flow veya paywall’ı yukarıdaki Flow/paywall’ı getir bölümünde ayrıntılı olarak açıklandığı şekilde getFlow metoduyla çekmektir.
Neden getFlow kullanmanızı öneriyoruz
getFlowForDefaultAudience metodunun birkaç önemli dezavantajı vardır:
- Potansiyel geriye dönük uyumluluk sorunları: Farklı uygulama sürümleri için (mevcut ve gelecekteki) farklı flow’lar göstermeniz gerekirse zorluklarla karşılaşabilirsiniz. Ya mevcut (eski) sürümü destekleyen flow’lar tasarlamanız ya da mevcut (eski) sürüme sahip kullanıcıların render edilemeyen flow’larla sorun yaşayabileceğini kabul etmeniz gerekecektir.
- Hedefleme kaybı: Tüm kullanıcılar All Users kitlesine yönelik tasarlanmış aynı flow’u görecektir; bu da kişiselleştirilmiş hedeflemeyi (ülkelere, pazarlama attribution’ına veya kendi özel özelliklerinize göre hedefleme dahil) kaybettiğiniz anlamına gelir.
Bu dezavantajları göze alarak daha hızlı flow veya paywall getirme 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",
fetchPolicy = AdaptyPaywallFetchPolicy.Default,
).onSuccess { flow ->
// the requested flow
}.onError { error ->
// handle the error
}
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| placementId | zorunlu | Placement kimliği. Bu değeri Adapty Kontrol Paneli’nde bir placement oluştururken belirtirsiniz. |
| fetchPolicy | varsayılan: AdaptyPaywallFetchPolicy.Default |
Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla baş ettiğini düşünüyorsanız Üçüncü bir politika olan Önbelleğin uygulama yeniden başlatmalarında korunduğunu; yalnızca uygulama yeniden yüklendiğinde veya manuel temizleme yapıldığında silindiğini unutmayın. |
Varlıkları özelleştirme
Flow veya 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österme.
- Uzak ana görsel yüklenirken yerel bir önizleme görseli gösterme.
- Video başlamadan önce bir önizleme görseli gösterme.
İşte özel varlıkları bir map aracılığıyla nasıl sağlayabileceğinize dair bir örnek:
Kotlin Multiplatform SDK yalnızca yerel varlıkları destekler. Uzak içerikler için, bunları özel varlıklarda kullanmadan önce indirip yerel olarak önbelleğe almanız gerekir.
// Import generated Res class for accessing resources
viewModelScope.launch {
// Get URIs for bundled resources using Res.getUri()
val heroImagePath = Res.getUri("files/images/hero_image.png")
val demoVideoPath = Res.getUri("files/videos/demo_video.mp4")
// Or read image as byte data
val imageByteData = Res.readBytes("files/images/avatar.png")
// Create custom assets map
val customAssets: Map<String, AdaptyCustomAsset> = mapOf(
// Load image from app resources (bundled with the app)
// Files should be placed in commonMain/composeResources/files/
"hero_image" to AdaptyCustomAsset.localImageResource(
path = heroImagePath
),
// Or use image byte data
"avatar" to AdaptyCustomAsset.localImageData(
data = imageByteData
),
// Load video from app resources
"demo_video" to AdaptyCustomAsset.localVideoResource(
path = demoVideoPath
),
// Or use a video file from device storage
"intro_video" to AdaptyCustomAsset.localVideoFile(
path = "/path/to/local/video.mp4"
)
)
// Use custom assets when creating the flow view
AdaptyUI.createFlowView(
flow = flow,
customAssets = customAssets
).onSuccess { view ->
// Present the flow with custom assets
view.present()
}.onError { error ->
// Handle the error - the flow will fall back to default appearance
}
}Bir varlık bulunamazsa veya yüklenemezse, flow veya paywall Builder’da yapılandırılan varsayılan görünümüne geri döner.
Adapty Kontrol Paneli’nde eski Paywall Builder ile paywall’unuzun görsel kısmını tasarladıktan sonra, bunu mobil uygulamanızda görüntüleyebilirsiniz. Bu süreçteki ilk adım, aşağıda açıklandığı şekilde placement ile ilişkili paywall’u ve görünüm yapılandırmasını almaktır.
Paywall Builder ile özelleştirilmiş paywalllar için bu konuya başvurduğunuzu unutmayın. Paywalllarınızı manuel olarak uyguluyorsanız, lütfen Mobil uygulamanızda remote config paywalllar için paywallları ve ürünleri getirme konusuna bakın.
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 göstermeye başlamadan önce (genişletmek için tıklayın)
- Adapty Kontrol Paneli’nde ürünlerinizi oluşturun.
- Adapty Kontrol Paneli’nde bir paywall oluşturun ve ürünleri ekleyin.
- Adapty Kontrol Paneli’nde placement’lar oluşturun ve paywallınızı ekleyin.
- Mobil uygulamanıza Adapty SDK yükleyin.
Paywall Builder ile tasarlanan paywall’ı getirme
Paywall Builder ile bir paywall tasarladıysanız, bunu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmenize gerek yoktur. Böyle bir paywall; paywall içinde ne gösterileceğini ve bunların nasıl gösterileceğini zaten içerir. Yine de placement üzerinden paywall ID’sini, görünüm yapılandırmasını almanız ve ardından bunu mobil uygulamanızda sunmanız gerekir.
En iyi performansı sağlamak için, görsellerin kullanıcıya sunulmadan önce indirilmesine yeterli zaman tanımak amacıyla paywall’ı ve görünüm yapılandırmasını mümkün olduğunca erken almanız kritik önem taşır.
Paywall almak için getPaywall metodunu kullanın:
Adapty.getPaywall(
placementId = "YOUR_PLACEMENT_ID",
locale = "en",
fetchPolicy = AdaptyPaywallFetchPolicy.Default,
loadTimeout = 5.seconds
).onSuccess { paywall ->
// the requested paywall
}.onError { error ->
// handle the error
}Parametreler:
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| placementId | zorunlu | İstenen Placement tanımlayıcısı. 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 parametre, eksi (-) karakteriyle ayrılmış bir veya iki alt etiketten oluşan bir dil kodu olmalıdır. İlk alt etiket dil, ikincisi bölge içindir. Ö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ı bölümüne bakın. |
| fetchPolicy | varsayılan: AdaptyPaywallFetchPolicy.Default |
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 sağlam 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 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 yetersiz olduğu durumlarda bile güvenilirliği sağlarken her zaman paywalllarınızın en son sürümünü almanızı garantilemek için tasarlanmıştır. |
| loadTimeout | varsayılan: 5 sn | Bu değer, bu yöntem için 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 yöntemin Kotlin Multiplatform için: |
Yanıt parametreleri:
| Parametre | Açı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 yapılandırmasını getirme
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ı alınamaz.
Paywall’ı aldıktan sonra, Paywall Builder kullanılarak oluşturulduğunu gösteren ViewConfiguration öğesini içerip içermediğini kontrol edin. Bu, paywall’ı nasıl göstereceğiniz konusunda size rehberlik eder. ViewConfiguration mevcutsa Paywall Builder paywall’ı olarak değerlendirin; yoksa remote config paywall olarak ele alın.
Görünüm yapılandırmasını yüklemek için createPaywallView metodunu kullanın.
if (paywall.hasViewConfiguration) {
AdaptyUI.createPaywallView(
paywall = paywall,
loadTimeout = 5.seconds,
preloadProducts = true
).onSuccess { paywallView ->
// use paywallView
}.onError { error ->
// handle the error
}
} else {
// use your custom logic
}
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| paywall | zorunlu | İstenen paywall için bir controller almak üzere kullanılan AdaptyPaywall nesnesi. |
| loadTimeout | isteğe bağlı | 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 zaman aşımı, loadTimeout içinde belirtilenden biraz daha geç gerçekleşebilir; çünkü işlem arka planda farklı isteklerden oluşabilir. kotlin.time.Duration.Companion kaynaklı 5.seconds gibi uzantı fonksiyonlarını kullanabilirsiniz. |
| preloadProducts | isteğe bağlı | Daha iyi performans için ürünleri önceden yüklemek üzere true olarak ayarlayın. Etkinleştirildiğinde ürünler önceden yüklenir ve paywall’ın gösterilmesi için gereken süre azalır. |
| productPurchaseParams | isteğe bağlı | AdaptyProductIdentifier ile AdaptyPurchaseParameters arasındaki bir eşleme. Paywalldaki her bir ürün için kişiselleştirilmiş teklifler veya abonelik güncelleme parametreleri gibi satın alma’ya özgü parametreleri yapılandırmak için kullanın. |
Birden fazla dili destekliyorsanız, paywallınıza bir yerelleştirme ekleyin. Kullanılacak kodlar için Yerelleştirmeler ve yerel ayar kodları bölümüne bakın.
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 yüzden bu süreci hızlandırmak için endişelenmenize gerek yoktur. Ancak çok sayıda kitle ve paywalla sahip olduğunuzda ve kullanıcılarınızın internet bağlantısı zayıf olduğunda, 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 amacıyla varsayılan bir paywall görüntülemek isteyebilirsiniz.
Bu sorunu çözmek için, belirtilen placement’ın All Users kitlesine ait paywallını getiren getPaywallForDefaultAudience metodunu kullanabilirsiniz. Ancak önerilen yaklaşımın, yukarıdaki Paywall Bilgilerini Getirme bölümünde ayrıntılı olarak açıklanan getPaywall metodu olduğunu unutmayın.
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 tasarlamak zorunda kalacaksınız ya da mevcut (eski) sürümdeki kullanıcıların render edilemeyen paywalllarla karşılaşmasını kabul edeceksiniz.
- 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 niteliklerinize göre) ortadan kaldırır.
Daha hızlı paywall getirme avantajından yararlanmak için bu dezavantajları kabul etmeye hazırsanız, getPaywallForDefaultAudience metodunu aşağıdaki gibi kullanın. Aksi takdirde yukarıda açıklanan getPaywall metodunu kullanmaya devam edin.
Adapty.getPaywallForDefaultAudience(
placementId = "YOUR_PLACEMENT_ID",
locale = "en",
fetchPolicy = AdaptyPaywallFetchPolicy.Default,
).onSuccess { paywall ->
// the requested paywall
}.onError { 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. |
| 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ını önerdiğimiz hakkında daha fazla bilgi için Yerelleştirmeler ve yerel ayar kodları sayfasına bakın. |
| fetchPolicy | varsayılan: AdaptyPaywallFetchPolicy.Default |
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 sağlam kaldığını ve yalnızca uygulama yeniden yüklendiğinde veya manuel temizleme yoluyla silindiğini unutmayın. |
Varlıkları özelleştirme
Paywallinızdaki görselleri ve videoları özelleştirmek için özel varlıkları uygulayın.
Kahraman görselleri 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 ana görsel yüklenirken yerel bir önizleme görseli gösterin.
- Video çalışmadan önce bir önizleme görseli gösterin.
Bu özelliği kullanmak için Adapty SDK’yı 3.7.0 veya üzeri sürüme güncelleyin.
Özel varlıkları bir map aracılığıyla nasıl sağlayabileceğinize dair bir örnek:
Kotlin Multiplatform SDK yalnızca yerel varlıkları destekler. Uzak içerikler için, özel varlıklarda kullanmadan önce varlıkları indirip yerel olarak önbelleğe almanız gerekir.
// Import generated Res class for accessing resources
viewModelScope.launch {
// Get URIs for bundled resources using Res.getUri()
val heroImagePath = Res.getUri("files/images/hero_image.png")
val demoVideoPath = Res.getUri("files/videos/demo_video.mp4")
// Or read image as byte data
val imageByteData = Res.readBytes("files/images/avatar.png")
// Create custom assets map
val customAssets: Map<String, AdaptyCustomAsset> = mapOf(
// Load image from app resources (bundled with the app)
// Files should be placed in commonMain/composeResources/files/
"hero_image" to AdaptyCustomAsset.localImageResource(
path = heroImagePath
),
// Or use image byte data
"avatar" to AdaptyCustomAsset.localImageData(
data = imageByteData
),
// Load video from app resources
"demo_video" to AdaptyCustomAsset.localVideoResource(
path = demoVideoPath
),
// Or use a video file from device storage
"intro_video" to AdaptyCustomAsset.localVideoFile(
path = "/path/to/local/video.mp4"
),
// Apply custom brand colors
"brand_primary" to AdaptyCustomAsset.color(
colorHex = "#FF6B35"
),
// Create gradient background
"card_gradient" to AdaptyCustomAsset.linearGradient(
colors = listOf("#1E3A8A", "#3B82F6", "#60A5FA"),
stops = listOf(0.0f, 0.5f, 1.0f)
)
)
// Use custom assets when creating paywall view
AdaptyUI.createPaywallView(
paywall = paywall,
customAssets = customAssets
).onSuccess { paywallView ->
// Present the paywall with custom assets
paywallView.present()
}.onError { error ->
// Handle the error - paywall will fall back to default appearance
}
}Bir asset bulunamaz veya yüklenemezse, paywall Paywall Builder’da yapılandırılmış varsayılan görünümüne geri döner.