iOS SDK'yı Yükle ve Yapılandır
Adapty SDK, mobil uygulamanıza sorunsuz entegrasyon için iki temel modül içerir:
- Core Adapty: Adapty’nin uygulamanızda düzgün çalışması için gerekli olan temel SDK.
- AdaptyUI: Flow’ları ve eski builder paywalllarını görüntüleyen isteğe bağlı modül.
Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğine dair gerçek dünya örneği görmek ister misiniz? Paywall gösterme, satın alma yapma ve diğer temel işlevleri içeren tam kurulumu sergileyen örnek uygulamalarımıza göz atın.
Eksiksiz bir uygulama adım adım anlatımı için şu videoları da izleyebilirsiniz:
Gereksinimler
Adapty iOS SDK, iOS 15.0 veya daha yeni bir sürüm gerektirir. Adapty SDK 4.0 ve sonrası, Swift paket manifesti Swift tools 6.2’yi bildirdiğinden derleme için Xcode 26 veya daha yeni bir sürüm de gerektirir.
Xcode 26.4 veya daha yeni sürümle derleme yapılırken Adapty SDK 3.15.7+ gereklidir.
SDK’yı yüklemek, Adapty kurulumunun 5. adımıdır. Uygulamanızda satın almalar çalışmadan önce uygulamanızı mağazalara bağlamanız, ardından Adapty Kontrol Paneli’nde ürünler, bir paywall ve bir placement oluşturmanız gerekir. Hızlı başlangıç kılavuzu tüm gerekli adımları anlatmaktadır.
Adapty SDK’yı Yükleyin
Her zaman SDK’nın mevcut en son sürümünü yüklemenizi öneririz — en yeni kararlılık düzeltmelerini ve iyileştirmelerini içerir.
Adapty SDK, Swift Package Manager aracılığıyla yüklenir. Xcode’da File -> Add Package Dependency… yolunu izleyin. Paket bağımlılığı ekleme adımları Xcode sürümüne göre farklılık gösterebileceğinden, gerekirse Xcode belgelerine başvurun.
- Depo URL’sini girin:
https://github.com/adaptyteam/AdaptySDK-iOS.git - Sürümü seçin (en son kararlı sürüm önerilir) ve Add Package düğmesine tıklayın.
- Choose Package Products penceresinde ihtiyacınız olan modülleri seçin:
- Adapty (çekirdek modül)
- AdaptyUI (isteğe bağlı - yalnızca Adapty ekranlarınızı render ediyorsa)
NoteNot:
- SDK 3.x’te Çocuk Modunu etkinleştirmek için Adapty yerine Adapty_KidsMode’u seçin. SDK 4.0 ve sonrasında normal modülleri seçin; Çocuk Modu,
KidsModepaket özelliği aracılığıyla etkinleştirilir. - Listeden başka herhangi bir paket seçmeyin – onlara ihtiyacınız olmayacak.
- Kurulumu tamamlamak için Add Package düğmesine tıklayın.
- Kurumu doğrulayın: Proje gezginizde Package Dependencies altında “Adapty” (ve seçildiyse “AdaptyUI”) görünmelidir.
Adapty SDK’nın Adapty modülünü etkinleştirin
Adapty SDK’yı uygulama kodunuzda etkinleştirin.
Adapty SDK’nın uygulamanızda yalnızca bir kez etkinleştirilmesi gerekir.
Public SDK Key’inizi almak için:
- Adapty Kontrol Paneli’ne gidin ve App settings → General sayfasına gidin.
- Api keys bölümünden Public SDK Key’i kopyalayın (Secret Key’i değil).
- Koddaki
"YOUR_PUBLIC_SDK_KEY"ifadesini değiştirin.
Ya da Adapty CLI kullanarak programatik olarak alın:
npm install -g adapty
adapty auth login
adapty apps list
Ya da doğrudan:
npx adapty auth login
adapty apps list
- Adapty başlatma işlemi için Public SDK key kullandığınızdan emin olun; Secret key yalnızca sunucu taraflı API için kullanılmalıdır.
- SDK key’leri her uygulama için benzersizdir, bu nedenle birden fazla uygulamanız varsa doğru olanı seçtiğinizden emin olun.
Başka herhangi bir Adapty SDK metodunu çağırmadan önce activate işleminin tamamlanmasını bekleyin. Tam sıralama için iOS SDK’da çağrı sırası sayfasına bakın.
Şimdi uygulamanızda paywall’ları ayarlayın:
- Flow & Paywall Builder kullanıyorsanız önce aşağıdaki AdaptyUI modülünü etkinleştirin, ardından hızlı başlangıç kılavuzunu takip edin.
- Kendi paywall arayüzünüzü oluşturuyorsanız özel paywall’lar için hızlı başlangıç kılavuzuna bakın.
Adapty SDK’nın AdaptyUI modülünü etkinleştirme
Flow & Paywall Builder’ı kullanmayı planlıyorsanız ve AdaptyUI modülünü kurduysanız, AdaptyUI’ı da etkinleştirmeniz gerekir.
Kodunuzda, AdaptyUI’ı etkinleştirmeden önce Adapty çekirdek modülünü etkinleştirmeniz zorunludur.
İsteğe bağlı olarak, AdaptyUI’ı etkinleştirirken paywall’lar için varsayılan önbellek ayarlarını geçersiz kılabilirsiniz.
İsteğe Bağlı Kurulum
Günlük Kaydı
Günlük kayıt sistemini kurma
Adapty, neler olduğunu anlamanıza yardımcı olmak için hataları ve diğer önemli bilgileri kaydeder. Aşağıdaki günlük seviyeleri mevcuttur:
| Level | Description |
|---|---|
error | Yalnızca hatalar loglanır |
warn | Hatalar ve SDK’dan gelen, kritik hatalara yol açmayan ancak dikkat edilmesi gereken mesajlar loglanır |
info | Hatalar, uyarılar ve çeşitli bilgi mesajları loglanır |
verbose | Hata ayıklama sırasında yararlı olabilecek her türlü ek bilgi (fonksiyon çağrıları, API sorguları vb.) loglanır |
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(logLevel: .verbose) // recommended for development
Günlük sistemi mesajlarını yönlendirin
Adapty’nin günlük mesajlarını kendi sisteminize göndermek veya bir dosyaya kaydetmek istiyorsanız setLogHandler metodunu kullanın ve özel günlük mantığınızı bu metodun içinde uygulayın. Bu işleyici, mesaj içeriği ve önem derecesini içeren günlük kayıtları alır.
Adapty.setLogHandler { record in
writeToLocalFile("Adapty \(record.level): \(record.message)")
}
Veri politikaları
Adapty, siz açıkça göndermediğiniz sürece kullanıcılarınızın kişisel verilerini saklamaz. Ancak mağaza veya ülke yönergelerine uymak için ek veri güvenliği politikaları uygulayabilirsiniz.
IDFA toplama ve paylaşımını devre dışı bırakma
Adapty modülünü etkinleştirirken IDFA toplama ve paylaşımını devre dışı bırakmak için idfaCollectionDisabled değerini true olarak ayarlayın.
App Store İnceleme Kuralları’na uymak veya IDFA uygulamanız için gerekli olmadığında App Tracking Transparency istemini tetiklemekten kaçınmak için bu parametreyi kullanın. Varsayılan değer false şeklindedir. IDFA toplama hakkında daha fazla bilgi için Analytics entegrasyonu bölümüne bakın.
let configurationBuilder =
AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(idfaCollectionDisabled: true)
IP toplama ve paylaşımını devre dışı bırakma
Adapty modülünü etkinleştirirken, kullanıcı IP adresi toplama ve paylaşımını devre dışı bırakmak için ipAddressCollectionDisabled parametresini true olarak ayarlayın. Varsayılan değer false’tur.
Bu parametreyi; kullanıcı gizliliğini artırmak, bölgesel veri koruma yönetmeliklerine (GDPR veya CCPA gibi) uymak ya da uygulamanızda IP tabanlı özelliklere ihtiyaç duyulmadığında gereksiz veri toplamayı azaltmak için kullanabilirsiniz.
let configurationBuilder =
AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(ipAddressCollectionDisabled: true)
AdaptyUI’da paywall’lar için medya önbellek yapılandırması
AdaptyUI yapılandırmasının isteğe bağlı olduğunu unutmayın. AdaptyUI modülünü yapılandırma olmadan da etkinleştirebilirsiniz. Ancak yapılandırmayı kullanıyorsanız tüm parametreler zorunludur.
// Configure AdaptyUI
let adaptyUIConfiguration = AdaptyUI.Configuration(
mediaCacheConfiguration: .init(
memoryStorageTotalCostLimit: 100 * 1024 * 1024,
memoryStorageCountLimit: .max,
diskStorageSizeLimit: 100 * 1024 * 1024
)
)
// Activate AdaptyUI
AdaptyUI.activate(configuration: adaptyUIConfiguration)
Parametreler:
| Parametre | Zorunluluk | Açıklama |
|---|---|---|
| memoryStorageTotalCostLimit | zorunlu | Depolama alanının bayt cinsinden toplam maliyet sınırı. |
| memoryStorageCountLimit | zorunlu | Bellek depolama alanının öğe sayısı sınırı. |
| diskStorageSizeLimit | zorunlu | Depolama alanının diskteki dosya boyutu sınırı (bayt cinsinden). 0, sınır olmadığı anlamına gelir. |
İşlem Tamamlama Davranışı
Bu özellik SDK 3.12.0 sürümünden itibaren kullanılabilir.
Adapty, varsayılan olarak işlemleri başarılı doğrulamanın ardından otomatik olarak tamamlar. Ancak gelişmiş işlem doğrulamasına ihtiyaç duyuyorsanız (sunucu taraflı makbuz doğrulama, sahtekarlık tespiti veya özel iş mantığı gibi), SDK’yı manuel işlem tamamlama modunda çalışacak şekilde yapılandırabilirsiniz.
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(transactionsFinishBehavior: .manual) // .auto varsayılandır
İşlemlerin nasıl tamamlanacağına dair daha fazla ayrıntı için kılavuza bakın.
Yedekten geri yüklemede verileri temizle
clearDataOnBackup değeri true olarak ayarlandığında, SDK uygulamanın bir iCloud yedeğinden geri yüklendiğini algılar ve önbelleğe alınmış profil bilgileri, ürün ayrıntıları ve paywaller dahil yerel olarak depolanan tüm SDK verilerini siler. SDK ardından temiz bir durumla başlatılır. Varsayılan değer false’tur.
Yalnızca yerel SDK önbelleği silinir. Apple ile olan işlem geçmişi ve Adapty sunucularındaki kullanıcı verileri değişmeden kalır.
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(clearDataOnBackup: true) // default – false
Adapty Attribution’ı Etkinleştir
Bu parametre SDK 4.1 sürümünden itibaren kullanılabilir.
Adapty Attribution kullanıyorsanız, SDK’yı etkinleştirirken adaptyAttributionEnabled değerini true olarak ayarlayın. Varsayılan değer false’tur: bu parametre olmadan SDK, kurulumları kaydetmez veya kurulum ayrıntılarını uygulamanıza iletmez. 4.1’in altındaki SDK sürümlerinde Adapty Attribution otomatik olarak etkinleştirilir.
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(adaptyAttributionEnabled: true)
Sorun Giderme
Tuist ile Swift 6 eşzamanlılık hatası
Tuist ile derleme yaparken Swift 6 strict concurrency derleme hatalarıyla karşılaşabilirsiniz. Tipik belirtiler arasında AdaptyUIBuilderLogic içinde @Sendable özellik uyumsuzlukları veya benzer modüller arası Sendability hataları yer alır.
Bu durum, Tuist’in SPM paketlerinden Xcode projeleri oluştururken SDK’nın bildirdiği swift-tools-version ayarını (SDK 3.x’te 6.0, SDK 4.0’dan itibaren 6.2) korumadığından kaynaklanır. Sonuç olarak bazı Adapty hedefleri (Adapty, AdaptyUI, AdaptyUIBuilder) Swift 5 kurallarıyla, diğerleri ise Swift 6 ile derlenir; bu da modüller arası @Sendable uyumsuzluklarına yol açar.
Düzeltme: Karma Swift dil sürümlerinden bağımsız olarak sorunu çözen Adapty SDK 3.15.5 veya sonraki bir sürüme yükseltin.
Geçici Çözüm: Yükseltme yapamıyorsanız, Tuist yapılandırmanızda üç Adapty hedefinin tamamı için Swift 6’yı açıkça ayarlayın:
targetSettings: [
"Adapty": .init().swiftVersion("6"),
"AdaptyUI": .init().swiftVersion("6"),
"AdaptyUIBuilder": .init().swiftVersion("6"),
]