Flow ve paywall alma - Kotlin Multiplatform
getFlow ile alınanlar Flow veya Paywall Builder paywallınızı tasarladıktan sonra, bunu mobil uygulamanızda görüntüleyebilirsiniz. İlk adım, aşağıda açıklandığı gibi placement ile ilişkili flow veya paywallı ve bunların görünüm yapılandırmasını almaktır.
Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Tam kurulumu, paywall’ların gösterimini, satın alma işlemlerini ve diğer temel işlevleri içeren örnek uygulamalarımıza göz atın.
Mobil uygulamanızda flow’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 flow/paywall oluşturun ve ürünleri ekleyin.
- Adapty Kontrol Paneli’nde placement’lar oluşturun ve flow/paywall’ınızı ekleyin.
- Mobil uygulamanıza Adapty SDK kurun.
Flow/paywall getirme
Flow Builder veya Paywall Builder ile bir flow ya da paywall tasarladıysanız, bunu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmeniz gerekmez. Böyle bir flow veya paywall, içinde neyin ve nasıl gösterileceğini zaten barındırır. Yine de 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ı. Adapty Kontrol Paneli’nde bir placement oluştururken belirttiğiniz değerdir. |
| fetchPolicy | varsayılan: AdaptyPaywallFetchPolicy.Default | SDK varsayılan olarak sunucudan veri yüklemeye çalışır; 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 verilere ulaşmasını sağladığından bu seçeneği öneriyoruz. Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla çalıştığını düşünüyorsanız, önbellekte veri varsa onu döndürmek için Önbelleğin uygulama yeniden başlatıldığında silinmediğini, yalnızca uygulama yeniden yüklendiğinde veya manuel temizleme yapıldığında temizlendiğini unutmayın. Adapty SDK, flow’ları ve paywall’ları yerel olarak iki katmanda saklar: yukarıda açıklanan düzenli olarak güncellenen önbellek ve yedek paywall’lar. Ayrıca daha hızlı yükleme için CDN, CDN’e ulaşılamadığında ise bağımsız bir yedek sunucu kullanırız. Bu sistem, internet bağlantısının yetersiz olduğu durumlarda bile güvenilirliği sağlarken her zaman en son sürümü almanızı garanti edecek şekilde tasarlanmıştır. |
| loadTimeout | varsayılan: 5 sn | Bu değer, metodun zaman aşımı süresini sınırlar. Zaman aşımına ulaşılırsa önbelleğe alınmış veriler veya yerel yedek döndürülür. İşlemin arka planda farklı isteklerden oluşabileceği göz önünde bulundurulduğunda, 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. |
View yapılandırmasını getir
Flow veya paywall’ı getirdikten sonra, createFlowView metoduyla view yapılandırmasını yükleyin ve view’ı tek adımda oluşturun. Kontrol etmeniz gereken ayrı bir bayrak yoktur: placement Flow Builder’da (flow) veya Paywall Builder’da (paywall) tasarlanmışsa, createFlowView sunuma hazır view’ı döndürür. Placement, Builder arayüzü olmayan özel bir paywall ise createFlowView bir AdaptyResult.Error döndürür — bunu remote config paywall olarak ele alın.
Flow 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.
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. |
| loadTimeout | isteğe bağlı | Bu değer, metodun zaman aşımı süresini 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 metod, loadTimeout içinde belirtilenden biraz daha geç zaman aşımına uğrayabilir; çünkü işlem arka planda farklı isteklerden oluşabilir. kotlin.time.Duration.Companion paketinden 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üklenerek flow veya paywall’ın görüntülenmesi için gereken süre azaltılır. |
| productPurchaseParameters | isteğe bağlı | AdaptyProductIdentifier ile AdaptyPurchaseParameters arasındaki bir eşleme. Flow veya paywall’daki bireysel ürünler 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 dil kullanıyorsanız, Builder 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 tanımlayıcısı. Adapty Kontrol Paneli’nde placement oluştururken belirttiğiniz değerdir. |
| fetchPolicy | varsayılan: AdaptyPaywallFetchPolicy.Default | SDK, varsayılan olarak sunucudan veri yüklemeye çalışır; 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 verilere ulaşmasını sağladığından bu seçeneği kullanmanızı öneririz. Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla karşılaştığını düşünüyorsanız, önbelleğe alınmış veri mevcutsa onu döndürmek için Önbelleğin, uygulama yeniden başlatıldığında silinmediğini; yalnızca uygulama kaldırılıp yeniden yüklendiğinde ya da manuel temizlik yapıldığında temizlendiğ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"
),
// 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 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’ndeki yeni Paywall Builder ile paywall’unuzun görsel kısmını tasarladıktan sonra, bunu mobil uygulamanızda gösterebilirsiniz. Bu süreçteki ilk adım, aşağıda açıklandığı gibi 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 bir örnekle görmek ister misiniz? Tam kurulumu, paywall’ların gösterimini, satın alma işlemlerini ve diğer temel işlevleri içeren örnek uygulamalarımıza göz atın.
Mobil uygulamanızda paywallları 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ı 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’ın tanımlayıcısı. Bu, Adapty Kontrol Paneli’nde 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 önerilen kullanım biçimleri hakkında daha fazla bilgi için Yerelleştirmeler ve yerel ayar kodları sayfasına bakın. |
| fetchPolicy | varsayılan: AdaptyPaywallFetchPolicy.Default | SDK varsayılan olarak sunucudan veri yüklemeye çalışır; başarısız olursa önbellekteki veriyi döndürür. Kullanıcılarınızın her zaman en güncel verilere erişmesini sağladığından bu seçeneği öneriyoruz. Ancak kullanıcılarınızın internet bağlantısının kararsız olduğunu düşünüyorsanız, mevcut önbellek verisini döndürmek için Önbelleğin uygulama yeniden başlatıldığında korunduğunu; yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında 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ı getirmek için CDN, CDN’e erişilemediğinde ise bağımsız bir yedek sunucu kullanıyoruz. Bu sistem, internet bağlantısı yetersiz olduğunda dahi her zaman paywalllarınızın en güncel sürümüne erişeceğinizi garanti edecek şekilde tasarlanmıştır. |
| loadTimeout | varsayılan: 5 sn | 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ı, 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 dil kullanıyorsanız, Paywall Builder yerelleştirmesinin nasıl ekleneceğini öğrenin.
Yüklendikten sonra paywall’ı sunun.
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’ın tanımlayıcısı. Bu, Adapty Kontrol Paneli’nde 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 etiketten oluşan bir dil kodu olmalıdır. İlk alt etiket dil, ikincisi bölge içindir. Örnek: Yerel ayar kodları ve önerilen kullanım biçimleri hakkında daha fazla bilgi için Yerelleştirmeler ve yerel ayar kodları sayfasına bakın. |
| fetchPolicy | varsayılan: AdaptyPaywallFetchPolicy.Default | SDK varsayılan olarak sunucudan veri yüklemeye çalışır; başarısız olursa önbellekteki veriyi döndürür. Kullanıcılarınızın her zaman en güncel verilere erişmesini sağladığından bu seçeneği öneriyoruz. Ancak kullanıcılarınızın internet bağlantısının kararsız olduğunu düşünüyorsanız, mevcut önbellek verisini döndürmek için Önbelleğin uygulama yeniden başlatıldığında korunduğunu; yalnızca uygulama yeniden yüklendiğinde veya manuel temizlik yapıldığında 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.