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ı getirin
Flow veya paywall’ı getirdikten sonra, createFlowView metoduyla görünüm yapılandırmasını yükleyin ve görünümü tek adımda oluşturun. Kontrol etmeniz gereken ayrı bir bayrak yoktur: placement Flow & Paywall Builder’da (flow) veya eski Paywall Builder’da (paywall) 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 kendiniz render edin.
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 ile elde edilen bir AdaptyFlow nesnesi. |
| locale | isteğe bağlı | Görünümün hangi flow yerelleştirmesiyle render edileceğini belirleyen tanımlayıcı; örneğin en veya pt-br. Belirtilmezse görünüm en dilinde, flow’da en yoksa varsayılan yerelleştirmede render edilir. 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 bu düzeni render etmek için kullanın. 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ını sınırlandırır. Zaman aşımına ulaşılırsa önbelleğe alınmış veri veya yerel yedek döndürülür. İşlem arka planda birden fazla istekten oluşabileceğinden, bu metod nadir durumlarda loadTimeout’ta belirtilenden biraz daha geç zaman aşımına uğrayabilir. kotlin.time.Duration.Companion üzerinden 5.seconds gibi uzantı fonksiyonları 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üklenerek flow veya paywall’ın gösterilmesi için gereken süre azaltılır. |
| customTags | isteğe bağlı | Flow’un özel etiketleri için uygulamanızın değerleri; her etiketin tam adıyla anahtarlanmış bir map. Ayrıntılar için bkz. Flow’lara veri aktarma. |
| productPurchaseParams | isteğe bağlı | AdaptyProductIdentifier ile AdaptyPurchaseParameters arasındaki bir map. Flow veya paywall’daki bireysel ürünler için kişiselleştirilmiş teklifler veya abonelik güncelleme parametreleri gibi satın almaya ö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ı (custom assets) kullanı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 hedefleyerek davranışlarını özelleştirebilirsiniz.
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 bir ana görsel yüklenirken yerel önizleme görseli gösterme.
- Video başlatılmadan önce önizleme görseli gösterme.
- Uygulamayla birlikte gelen medyayı göstererek ilk ekranın indirme olmadan render edilmesini sağlama. Bkz. İlk ekran medyasını uygulama paketinden gösterme.
Özel asset’leri 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"
)
)
// 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ş paywall’lara atıfta bulunan bir konudur. Özel paywall’lar uyguluyorsanız, lütfen Mobil uygulamanızda özel paywall’lar için paywall ve ürün 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’ları görüntülemeye 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ş düğmesini etkinleştirdiğinizden emin olun. Bu seçenek açık değilse görünüm yapılandırması alınamaz.
Paywall’ı getirdikten sonra, Paywall Builder kullanılarak oluşturulduğunu gösteren bir ViewConfiguration içerip içermediğini kontrol edin. Bu, paywall’ı nasıl görüntüleyeceğiniz konusunda size rehberlik edecektir. ViewConfiguration mevcutsa Paywall Builder paywall’ı olarak değerlendirin; yoksa özel paywall olarak işleyin.
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.