Flutter SDK Kurulumu ve Yapılandırması

Adapty SDK, Flutter 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’dır.
  • AdaptyUI: Bu modül, eski builder paywalllarına ek olarak flow’ları da render eder.
Tip

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 uygulamamıza göz atın.

Gereksinimler

Adapty Flutter SDK, iOS 15.0+, Xcode 26+ ve Flutter 3.32.0+ (Dart 3.8.0+) gerektirir. Kurulum ayrıntıları için aşağıdaki Swift Package Manager (iOS) bölümüne bakın.

Info

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.

Bağımlılıklar

Adapty SDK, Android’de şu Google Play Billing Library sürümleriyle çalışır:

Adapty SDK sürümüBilling Library sürümü
4.0.4 ve sonrasıv8
4.0.0–4.0.3Varsayılan olarak v7; başka bir bağımlılık yükseltirse v8
Note

Bir Billing Library sürümüyle uyumluluk, Adapty’nin o sürümde Google’ın sunduğu her özelliği desteklediği anlamına gelmez. Yeni bir Google Play faturalandırma özelliği benimsemeden önce Play Store’daki Ürün sayfasına bakın.

Adapty SDK’yı Yükleyin

Release

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.

Important

Bu adımlar Flutter 3.32.0+ (Dart 3.8.0+) gerektirir. Eklenti, yerel iOS SDK’yı Swift Package Manager aracılığıyla çeker — tek seferlik kurulum için Swift Package Manager (iOS) bölümüne bakın.

  1. Adapty’yi pubspec.yaml dosyanıza ekleyin:
   dependencies: 
     adapty_flutter: ^<the latest SDK version>
  1. Bağımlılıkları yüklemek için aşağıdaki komutu çalıştırın:

    flutter pub get
  2. Adapty SDK’larını uygulamanıza dahil edin:

    import 'package:adapty_flutter/adapty_flutter.dart';

Swift Package Manager (iOS)

Plugin, yerel iOS SDK’yı Swift Package Manager üzerinden çeker. Flutter 3.32–3.43 kullanıyorsanız, Swift Package Manager desteğini bir kez etkinleştirin:

flutter config --enable-swift-package-manager

Flutter 3.44 ve sonrasında Swift Package Manager varsayılan olarak etkindir, bu nedenle herhangi bir işlem yapmanıza gerek yoktur.

v4’teki API değişiklikleri için geçiş kılavuzuna bakın.

Adapty SDK’nın Adapty modülünü etkinleştirme

Adapty SDK’yı uygulama kodunuzda etkinleştirin.

Note

Adapty SDK, uygulamanızda yalnızca bir kez etkinleştirilmesi gerekir.

Public SDK Key’inizi almak için:

  1. Adapty Kontrol Paneli’ne gidin ve App settings → General sayfasına gidin.
  2. Api keys bölümünden Public SDK Key’i kopyalayın (Secret Key’i değil).
  3. 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.

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    _initializeAdapty();

    super.initState();
  }

  Future<void> _initializeAdapty() async {
    try {
      await Adapty().activate(
        configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY'),
      );
    } catch (e) {
      // handle the error
    }
  }

  Widget build(BuildContext context) {
    return Text("Hello");
  }
}
Important

Diğer Adapty SDK metotlarını çağırmadan önce activate işleminin tamamlanmasını bekleyin. Tam sıra için Flutter SDK’da çağrı sırası bölümüne bakın.

Şimdi uygulamanızda paywallları ayarlayı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:

Note

AdaptyUI ile ilgili bağımlılıklar, AdaptyUI etkinleştirilmiş olsun ya da olmasın uygulamanıza bağlanır.

Important

Kodunuzda, AdaptyUI’ı etkinleştirmeden önce Adapty’nin temel modülünü etkinleştirmeniz gerekir.

await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
    ..withActivateUI(true), // This automatically activates AdaptyUI
);

İ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 günlüğe kaydeder. Aşağıdaki seviyeler mevcuttur:

SeviyeAçıklama
AdaptyLogLevel.errorYalnızca hatalar loglanır.
AdaptyLogLevel.warnKritik hatalara yol açmayan ancak dikkat edilmesi gereken hatalar ve SDK mesajları loglanır.
AdaptyLogLevel.infoHatalar, uyarılar ve çeşitli bilgi mesajları loglanır. Varsayılan değer.
AdaptyLogLevel.verboseHata ayıklama sırasında işe yarayabilecek ek bilgiler (fonksiyon çağrıları, API sorguları vb.) loglanır.
AdaptyLogLevel.debugHata ayıklama bilgileri loglanır.

Adapty’yi yapılandırmadan önce uygulamanızda log seviyesini ayarlayabilirsiniz:

// Set log level before activation. 
// 'verbose' is recommended for development and the first production release
await Adapty().setLogLevel(AdaptyLogLevel.verbose);

// Or set it during configuration
await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
    ..withLogLevel(AdaptyLogLevel.verbose),
);

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.

IP adresi 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 değerini true olarak ayarlayın. Varsayılan değer false’tur.

Bu parametreyi kullanıcı gizliliğini artırmak, bölgesel veri koruma düzenlemelerine (GDPR veya CCPA gibi) uymak ya da IP tabanlı özellikler uygulamanız için gerekli olmadığında gereksiz veri toplamayı azaltmak amacıyla kullanabilirsiniz.

await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
    ..withIpAddressCollectionDisabled(true),
);

Reklam kimliği toplama ve paylaşımını devre dışı bırakma

Adapty modülünü etkinleştirirken, reklam tanımlayıcılarının toplanmasını devre dışı bırakmak için appleIdfaCollectionDisabled (iOS) veya googleAdvertisingIdCollectionDisabled (Android) parametresini true olarak ayarlayın. Varsayılan değer false’tur.

App Store/Play Store politikalarına uymak, App Tracking Transparency istemini tetiklemekten kaçınmak veya uygulamanız reklam kimliklerine dayalı attribution ya da analiz gerektirmiyorsa bu parametreyi kullanın.

await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
    ..withAppleIdfaCollectionDisabled(true)      // iOS
    ..withGoogleAdvertisingIdCollectionDisabled(true), // Android
);

AdaptyUI için medya önbellek yapılandırmasını ayarlama

Modül, Adapty SDK ile birlikte otomatik olarak etkinleştirilir. Adapty ekranlarınızı oluşturmuyorsa ve AdaptyUI modülünü devre dışı bırakmak istiyorsanız, etkinleştirme sırasında withActivateUI(false) değerini geçin.

Varsayılan olarak, AdaptyUI performansı artırmak ve ağ kullanımını azaltmak için medyayı (resimler ve videolar gibi) önbelleğe alır. Önbellek ayarlarını özel bir yapılandırma sağlayarak özelleştirebilirsiniz.

Varsayılan önbellek sınırlarını geçersiz kılmak için withMediaCacheConfiguration kullanın. Bu isteğe bağlıdır; bu metodu çağırmazsanız varsayılan değerler kullanılır (100 MB disk boyutu, sınırsız bellek sayısı). Ancak yapılandırma nesnesini oluşturursanız tüm parametreleri zorunludur.


final mediaCacheConfig = AdaptyUIMediaCacheConfiguration(
  memoryStorageTotalCostLimit: 200 * 1024 * 1024, // 200 MB
  memoryStorageCountLimit: 2147483647, // max int value
  diskStorageSizeLimit: 200 * 1024 * 1024, // 200 MB
);

await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
    ..withMediaCacheConfiguration(mediaCacheConfig),
);

Parametreler:

ParametreVarlıkAçıklama
memoryStorageTotalCostLimitgerekliBellekteki toplam önbellek boyutu (bayt cinsinden). Varsayılan değer 100 MB’tır.
memoryStorageCountLimitgerekliBellek depolamasındaki öğe sayısı sınırı. Varsayılan değer maksimum int değeridir.
diskStorageSizeLimitgerekliDiskteki dosya boyutu sınırı (bayt cinsinden). Varsayılan değer 100 MB’tır.

Yerel access level’ları etkinleştirme (Android)

Varsayılan olarak, yerel access level’lar iOS’ta etkin, Android’de devre dışıdır. Android’de de etkinleştirmek için withGoogleLocalAccessLevelAllowed değerini true olarak ayarlayın:

await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
    ..withGoogleLocalAccessLevelAllowed(true),
);

Yedekten geri yükleme sırasında verileri temizle

appleClearDataOnBackup değeri true olarak ayarlandığında, SDK uygulamanın iCloud yedeğinden geri yüklendiğini algılar ve önbelleğe alınmış profil bilgileri, ürün ayrıntıları ve paywalllar dahil olmak üzere yerel olarak depolanan tüm SDK verilerini siler. SDK ardından temiz bir durumla yeniden başlatılır. Varsayılan değer false’tur.

Note

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.

await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
    ..withAppleClearDataOnBackup(true) // default – false
);

Adapty Attribution’ı Etkinleştirme

Info

Bu parametre SDK 4.1 sürümünden itibaren kullanılabilir.

Adapty Attribution kullanıyorsanız, SDK’yı etkinleştirirken withAdaptyAttributionEnabled(true) çağrısını yapın. Varsayılan değer false’tur: bu parametre olmadan SDK, kurulumları kaydetmez veya kurulum ayrıntılarını uygulamanıza iletmez. 4.1 altındaki SDK sürümlerinde Adapty Attribution otomatik olarak etkinleştirilir.

await Adapty().activate(
  configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
    ..withAdaptyAttributionEnabled(true)
);

Sorun Giderme

Android yedekleme kuralları (Otomatik Yedekleme yapılandırması)

Bazı SDK’lar (Adapty dahil) kendi Android Auto Backup yapılandırmalarıyla birlikte gelir. Yedekleme kuralları tanımlayan birden fazla SDK kullanıyorsanız, Android manifest birleştirici android:fullBackupContent, android:dataExtractionRules veya android:allowBackup ile ilgili bir hata vererek başarısız olabilir.

Tipik hata belirtisi: Manifest merger failed: Attribute application@dataExtractionRules value=(@xml/your_data_extraction_rules) is also present at [com.other.sdk:library:1.0.0] value=(@xml/other_sdk_data_extraction_rules)

Note

Bu değişikliklerin Android platform dizininizde yapılması gerekir (genellikle projenizin android/ klasöründe yer alır).

Bu sorunu çözmek için şunları yapmanız gerekir:

  • Manifest birleştiriciye, yedeklemeyle ilgili öznitelikler için uygulamanızın değerlerini kullanmasını söyleyin.

  • Adapty’nin kurallarını diğer SDK’ların kurallarıyla birleştiren yedekleme kuralı dosyaları oluşturun.

1. Manifest dosyanıza tools ad alanını ekleyin

AndroidManifest.xml dosyanızda kök <manifest> etiketinin tools içerdiğinden emin olun:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">

    ...
</manifest>

2. <application> içindeki yedekleme özniteliklerini geçersiz kılın

Aynı AndroidManifest.xml dosyasında, <application> etiketini, uygulamanızın nihai değerleri sağlayacak ve manifest birleştiriciye kütüphane değerlerini değiştirmesini söyleyecek şekilde güncelleyin:

<application
android:name=".App"
android:allowBackup="true"
android:fullBackupContent="@xml/sample_backup_rules"           
android:dataExtractionRules="@xml/sample_data_extraction_rules"
tools:replace="android:fullBackupContent,android:dataExtractionRules">

    ...
</application>

Herhangi bir SDK android:allowBackup da ayarlıyorsa, bunu da tools:replace içine ekleyin:

tools:replace="android:allowBackup,android:fullBackupContent,android:dataExtractionRules"

3. Birleştirilmiş yedekleme kuralı dosyaları oluşturun

Android projenizin res/xml/ dizininde, Adapty’nin kurallarını diğer SDK’ların kurallarıyla birleştiren XML dosyaları oluşturun. Android, işletim sistemi sürümüne bağlı olarak farklı yedekleme kuralı formatları kullandığından, her iki dosyayı da oluşturmak uygulamanızın desteklediği tüm Android sürümleriyle uyumluluğu garanti eder.

Note

Aşağıdaki örneklerde örnek bir üçüncü taraf SDK olarak AppsFlyer kullanılmıştır. Uygulamanızda kullandığınız diğer SDK’lar için kuralları değiştirin veya ekleyin.

Android 12 ve üzeri için (yeni veri ayıklama kuralları formatını kullanır):

<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
    <cloud-backup>
        
        <exclude domain="sharedpref" path="appsflyer-data"/>
        <exclude domain="sharedpref" path="appsflyer-purchase-data"/>
        <exclude domain="database" path="afpurchases.db"/>
        
        <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
    </cloud-backup>

    <device-transfer>
        
        <exclude domain="sharedpref" path="appsflyer-data"/>
        <exclude domain="sharedpref" path="appsflyer-purchase-data"/>
        <exclude domain="database" path="afpurchases.db"/>
        <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
    </device-transfer>
</data-extraction-rules>

Android 11 ve altı için (eski tam yedekleme içeriği formatını kullanır):

<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    
    <exclude domain="sharedpref" path="appsflyer-data"/>

    
    <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>

    

Android’de başka bir uygulamadan geri döndükten sonra satın almalar başarısız oluyor

Satın alma akışını başlatan Activity, varsayılan olmayan bir launchMode kullanıyorsa, kullanıcı Google Play’den, bir bankacılık uygulamasından veya tarayıcıdan geri döndüğünde Android bu Activity’yi hatalı şekilde yeniden oluşturabilir ya da yeniden kullanabilir. Bu durum, satın alma sonucunun kaybolmasına veya iptal edilmiş gibi işlenmesine yol açabilir.

Satın almaların düzgün çalışmasını sağlamak için, satın alma akışını başlatan Activity’de yalnızca standard veya singleTop başlatma modlarını kullanın ve diğer modlardan kaçının.

AndroidManifest.xml dosyanızda, satın alma flow’unu başlatan Activity’nin standard veya singleTop olarak ayarlandığından emin olun:

<activity
    android:name=".MainActivity"
    android:launchMode="standard" />

Podfile SWIFT_VERSION geçersiz kılmasından kaynaklanan Swift 6 derleme hataları

Note

Bu yalnızca Adapty iOS SDK’ları projenize CocoaPods olarak yüklendiğinde geçerlidir. Swift paketi olarak yüklendiğinde, post_install içindeki SWIFT_VERSION geçersiz kılması onlara ulaşmaz.

Flutter uygulamanızı iOS için derlerken Adapty pod hedeflerinde Swift 6 derleme hataları görebilirsiniz. Tipik belirtiler arasında AdaptyUIBuilderLogic içinde @Sendable uyumsuzlukları, Adapty türlerinde eksik Sendable uyumu veya aktör izolasyon hataları yer alır.

Adapty pod’ları s.swift_version = '6.0' bildirir ve derlemek için Swift 6 gerektirir. Kendi uygulama kodunuz Swift 5’te kalabilir; yalnızca Adapty pod hedeflerinin (Adapty, AdaptyUI, AdaptyUIBuilder, AdaptyLogger, AdaptyPlugin) Swift 6 ile derlenmesi gerekir.

En yaygın neden, ios/Podfile dosyasındaki her pod hedefi için SWIFT_VERSION değerini yeniden yazan bir post_install hook’udur:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '5.9'
    end
  end
end

Düzeltme: Adapty pod hedeflerini bu geçersiz kılmanın dışında bırakın:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    next if %w[Adapty AdaptyUI AdaptyUIBuilder AdaptyLogger AdaptyPlugin].include?(target.name)
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '5.9'
    end
  end
end

Ardından ios/ dizininden pod install komutunu çalıştırın ve yeniden derleyin.

Doğrulamak için ios/Pods/Pods.xcodeproj dosyasını açın, Adapty pod hedefini seçin → Build SettingsSwift Language Version. Değer Swift 6 olmalıdır.