Flow ve paywall'ları alma - iOS

What getFlow retrieves
Flows BETA Built in Flow builder — renders natively on device, no WebView
Paywall Builder paywalls All existing Paywall Builder content

flow veya Paywall Builder paywall’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’u ve görünüm yapılandırmasını almaktır.

Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğine dair gerçek dünya örneği görmek ister misiniz? Tam kurulumu, paywall gösterimi, satın alma işlemleri ve diğer temel işlevleri içeren örnek uygulamalarımıza göz atın.

Başlamadan önce
  1. Adapty Kontrol Paneli’nde ürünlerinizi oluşturun.
  2. Adapty Kontrol Paneli’nde bir flow/paywall oluşturun ve ürünleri ekleyin.
  3. Adapty Kontrol Paneli’nde placement’lar oluşturun ve flow/paywall’ınızı ekleyin.
  4. 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 nasıl render edileceği 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 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, kullanıcıya göstermeden önce görsellerin indirilmesine yetecek süreyi tanımak amacıyla flow veya paywall ile görünüm yapılandırmasını mümkün olduğunca erken almanız kritik önem taşır.

Bir flow veya paywall almak için getFlow metodunu kullanın:

Parametreler:

ParametreZorunlulukAçıklama
placementIdzorunluİstenen Placement’ın tanımlayıcısı. Adapty Kontrol Paneli’nde bir placement oluştururken belirttiğiniz değerdir.
fetchPolicyvarsayılan: .reloadRevalidatingCacheData

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 veriye 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 karşılaştığını düşünüyorsanız, önbellekte veri varsa onu döndürmek için .returnCacheDataElseLoad seçeneğini kullanabilirsiniz. Bu durumda kullanıcılar en son veriye ulaşamayabilir, ama internet bağlantısı ne kadar kesintili olursa olsun daha hızlı yükleme süresi yaşarlar. Önbellek düzenli olarak güncellenir; dolayısıyla ağ isteklerini azaltmak için oturum boyunca güvenle kullanılabilir.

Önbelleğin uygulama yeniden başlatıldığında silinmediğini, yalnızca uygulama kaldırıldığında veya manuel temizlik yapıldığında temizlendiğini unutmayın.

Adapty SDK, paywallları yerel olarak iki katmanda saklar: yukarıda açıklanan düzenli güncellenen önbellek ve yedek paywalllar. Paywallları daha hızlı getirmek için CDN, CDN’e ulaşılamadığı durumlarda ise 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 paywalllarınızın her zaman en güncel halini almanızı garanti edecek şekilde tasarlanmıştır.

loadTimeoutvarsayı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ış veri veya yerel yedek döndürülür.

Arka planda işlem farklı isteklerden oluşabileceğinden, nadir durumlarda bu metodun loadTimeout ile belirtilen süreden biraz daha geç zaman aşımına uğrayabileceğini unutmayın.

Yanıt parametreleri:
ParametreAçıklama
FlowPlacement, tanımlayıcılar (id, variationId), ad, remote config’ler ve flow’un bir görünüm yapılandırması içerip içermediğini belirten hasViewConfiguration bayrağını barındıran bir AdaptyFlow nesnesi. Ürünleri ön yükleme, özel kullanıcı arayüzü veya programatik kontroller için getirmek üzere getPaywallProducts(flow:) çağırın.

Görünüm yapılandırmasını getir

Flow veya paywallı getirdikten sonra, flow.hasViewConfiguration ile görünüm yapılandırması içerip içermediğini kontrol edin. Bu bayrak, placement’ın Adapty Kontrol Paneli’nde nasıl tasarlandığını ayırt eder:

  • true — placement, Flow Builder (bir flow) veya Paywall Builder (bir paywall) kullanılarak tasarlanmış. Adapty arayüzü sizin için render eder. 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. 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:

ParametreVarlıkAçıklama
forFlowzorunluAdapty.getFlow aracılığıyla elde edilen bir AdaptyFlow nesnesi.
locale

isteğe bağlı

varsayılan: nil

Paywall yerelleştirmesinin tanımlayıcısı. - ile ayrılmış bir veya iki alt etiket içeren dil kodu olarak beklenir (örn. en, pt-br). Bkz. Yerelleştirmeler ve yerel ayar kodları.
loadTimeoutvarsayılan: 5 snBu değer, metodun zaman aşımı süresini sınırlar. Zaman aşımına ulaşılırsa önbelleğe alınmış veri veya yerel yedek döndürülür. Nadir durumlarda bu metod, arka planda farklı isteklerden oluşabileceğinden loadTimeout’ta belirtilenden biraz daha geç zaman aşımına uğrayabilir.
productsisteğe bağlıEkranda ürünlerin gösterim zamanlamasını optimize etmek için bir AdaptyPaywallProduct nesneleri dizisi sağlayın. nil geçilirse AdaptyUI gerekli ürünleri otomatik olarak getirir.
systemRequestsHandleristeğ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.
assetsResolveristeğe bağlıFlow/paywall içindeki resim ve videoları geçersiz kılan bir [String: AdaptyCustomAsset] sözlüğü. Bkz. Varlıkları özelleştir.
timerResolveristeğe bağlıGeliştirici tanımlı zamanlayıcılar için bitiş tarihlerini sağlayan, AdaptyTimerResolver protokolüne uyan bir nesne. Bkz. Geliştirici tanımlı zamanlayıcıları ayarla.
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. Bu sorunu çözmek için, belirtilen placement’ın All Users kitlesi için flow veya paywall’ı getiren getFlowForDefaultAudience metodunu kullanabilirsiniz. Ancak, önerilen yaklaşımın getFlow metoduyla flow veya paywall getirmek olduğunu unutmamak önemlidir. Bu konuda yukarıdaki Paywall Bilgilerini Getirme bölümüne bakabilirsiniz.

getFlow kullanmanızı neden öneriyoruz

getFlowForDefaultAudience metodunun birkaç önemli dezavantajı vardı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ı göze alarak daha hızlı flow veya paywall yükleme avantajından yararlanmak istiyorsanız, getFlowForDefaultAudience metodunu aşağıdaki gibi kullanın. Aksi takdirde yukarıda anlatılan 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
    }
}
ParametreZorunlulukAçıklama
placementIdzorunluPlacement tanımlayıcısı. Adapty Kontrol Paneli’nde placement oluştururken belirttiğiniz değerdir.
fetchPolicyvarsayılan: .reloadRevalidatingCacheData

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 ulaşmasını sağladığı için 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, önbellekte veri varsa onu döndürmek için .returnCacheDataElseLoad seçeneğini kullanabilirsiniz. Bu durumda kullanıcılar en son verilere ulaşamayabilir; ancak internet bağlantısı ne kadar kötü olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir; bu nedenle oturum sırasında gereksiz ağ isteklerinden kaçınmak için önbelleği kullanmak güvenlidir.

Önbellek, uygulama yeniden başlatıldığında temizlenmez; yalnızca uygulama kaldırılıp yeniden yüklendiğinde veya manuel olarak temizlendiğinde sıfırlanır.

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öster.
  • Uzaktan yüklenen ana görsel yüklenirken yerel bir önizleme görseli göster.
  • Video oynatılmadan önce bir önizleme görseli göster.
  • Oynatıcının video yüklenmeden önce düzen alanını ayırabilmesi için videonun piksel çözünürlüğünü belirt (en-boy oranı = width / height). Atlamak için nil geçir.

Aşağıda, özel varlıkları basit bir sözlük aracılığıyla nasıl sağlayabileceğine dair bir örnek yer alıyor:

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
  1. Adapty Kontrol Paneli’nde ürünlerinizi oluşturun.
  2. Adapty Kontrol Paneli’nde bir paywall oluşturun ve ürünlerinizi buna ekleyin.
  3. Adapty Kontrol Paneli’nde placement’lar oluşturun ve paywall’ınızı bunlara ekleyin.
  4. 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:

ParametreZorunlulukAçıklama
placementIdzorunluİstenen Placement kimliği. Bu, Adapty Kontrol Paneli’nde placement oluştururken belirttiğiniz değerdir.
locale

isteğe bağlı

varsayılan: en

Paywall yerelleştirmesinin kimliği. Bu parametrenin, eksi (-) karakteriyle ayrılmış bir veya iki alt etiketten oluşan bir dil kodu olması beklenir. İlk alt etiket dil, ikincisi ise bölge içindir.

Örnek: en İngilizce, pt-br ise Brezilya Portekizcesini temsil eder.

Yerel ayar kodları ve bunların nasıl kullanılması gerektiği hakkında daha fazla bilgi için bkz. Yerelleştirmeler ve yerel ayar kodları.

fetchPolicyvarsayılan: .reloadRevalidatingCacheData

SDK varsayılan olarak sunucudan veri yüklemeye çalışır ve başarısız olması durumunda önbellekteki veriyi döndürür. Kullanıcılarınızın her zaman en güncel veriyi almasını sağladığından bu seçeneği öneriyoruz.

Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla uğraştığını düşünüyorsanız, önbellekte veri varsa döndürmek için .returnCacheDataElseLoad kullanmayı değerlendirin. Bu senaryoda kullanıcılar en güncel veriyi almayabilir, ancak internet bağlantısı ne kadar kötü olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, bu nedenle ağ isteklerini azaltmak için oturum sırasında kullanmak güvenlidir.

Önbelleğin uygulama yeniden başlatıldığında silinmediğini; yalnızca uygulama kaldırılıp yeniden yüklendiğinde veya manuel temizlik yapıldığında temizlendiğini unutmayın.

Adapty SDK, paywallları yerel olarak iki katmanda saklar: yukarıda açıklanan düzenli güncellenen önbellek ve yedek paywalllar. Paywallları 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 kısıtlı olduğu durumlarda bile güvenilirliği sağlarken her zaman en güncel paywall sürümünü almanızı garanti etmek için tasarlanmıştır.

loadTimeoutvarsayı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ış veri veya yerel yedek döndürülür.

İşlemin arka planda farklı isteklerden oluşabileceği nadir durumlarda bu metodun loadTimeout’ta belirtilenden biraz daha geç zaman aşımına uğrayabileceğini unutmayın.

Yanıt parametreleri:

ParametreAçı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 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:

ParametreZorunlulukAçıklama
paywallzorunluİstenen paywall için controller almak üzere kullanılan AdaptyPaywall nesnesi.
loadTimeoutvarsayılan: 5 snBu 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.
productsisteğ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 dil kullanıyorsanız, Paywall Builder yerelleştirmesi eklemeyi ve yerel ayar kodlarını doğru kullanmayı burada öğ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 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.

ParametreZorunlulukAçıklama
placementIdzorunluPlacement kimliği. Bu, Adapty Kontrol Paneli’nde placement oluştururken belirttiğiniz değerdir.
locale

isteğe bağlı

varsayılan: en

Paywall yerelleştirmesinin kimliği. Bu parametrenin, eksi (-) karakteriyle ayrılmış bir veya daha fazla alt etiketten oluşan bir dil kodu olması beklenir. İlk alt etiket dil, ikincisi ise bölge içindir.

Örnek: en İngilizce, pt-br ise Brezilya Portekizcesini temsil eder.

Yerel ayar kodları ve bunların nasıl kullanılması gerektiği hakkında daha fazla bilgi için bkz. Yerelleştirmeler ve yerel ayar kodları.

fetchPolicyvarsayılan: .reloadRevalidatingCacheData

SDK varsayılan olarak sunucudan veri yüklemeye çalışır ve başarısız olması durumunda önbellekteki veriyi döndürür. Kullanıcılarınızın her zaman en güncel veriyi almasını sağladığından bu seçeneği öneriyoruz.

Ancak kullanıcılarınızın kararsız bir internet bağlantısıyla uğraştığını düşünüyorsanız, önbellekte veri varsa döndürmek için .returnCacheDataElseLoad kullanmayı değerlendirin. Bu senaryoda kullanıcılar en güncel veriyi almayabilir, ancak internet bağlantısı ne kadar kötü olursa olsun daha hızlı yükleme süreleri yaşarlar. Önbellek düzenli olarak güncellenir, bu nedenle ağ isteklerini azaltmak için oturum sırasında kullanmak güvenlidir.

Önbelleğin uygulama yeniden başlatıldığında silinmediğini; yalnızca uygulama kaldırılıp 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.