Unity SDK'yı Yükleyin ve Yapılandırın

Adapty SDK, Unity uygulamanıza sorunsuz entegrasyon için iki temel modül içerir:

  • Core Adapty: Bu temel SDK, Adapty’nin uygulamanızda düzgün çalışması için gereklidir.
  • AdaptyUI: Bu modül, kolayca platformlar arası paywall oluşturmak için kullanılan kullanıcı dostu, kodsuz bir araç olan Adapty Paywall Builder’ı kullanıyorsanız gereklidir.
Tip

Adapty SDK’nın bir mobil uygulamaya nasıl entegre edildiğine dair gerçek bir örnek görmek ister misiniz? Paywall gösterme, satın alma yapma ve diğer temel işlevler dahil olmak üzere tam kurulumu sergileyen örnek uygulamamıza göz atın.

Gereksinimler

Adapty SDK, iOS 13.0+ sürümünü destekler; ancak paywall builder ile oluşturulan paywalllerle çalışmak için iOS 15.0+ gerektirir. Flow Builder desteği ekleyen Adapty SDK 4.1, tüm uygulama için iOS 15.0+ gerektirir: Unity Editor’daki bir derleme doğrulayıcısı, deployment target daha düşükse iOS derlemesini durdurur.

Info

Adapty Unity SDK 4.0 ve sonrası, Google Play Billing Library v8 ile çalışır.

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 billing özelliğini benimsemeden önce Play Store’daki Ürün sayfasına 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.

Adapty SDK’yı Yükleyin

Release

Tercih ettiğiniz kurulum yöntemini seçin:

SDK’yı yükledikten sonra aşağıdaki adımları tamamlayın:

  1. External Dependency Manager (EDM) eklentisini yükleyin. Adapty SDK, iOS bağımlılıklarını ve Android gradle bağımlılıklarını yönetmek için bunu kullanır.

  2. EDM’yi yükledikten sonra bağımlılık yöneticisini çağırmanız gerekebilir:

    Assets -> External Dependency Manager -> Android Resolver -> Force Resolve

    ve

    Assets -> External Dependency Manager -> iOS Resolver -> Install Cocoapods

  3. Unity projenizi iOS için derlerken Unity-iPhone.xcworkspace dosyasını elde edersiniz; Cocoapods bağımlılıklarının kullanılabilmesi için Unity-iPhone.xcodeproj yerine bu dosyayı açmanız gerekir.

Adapty SDK 4.1

SDK 4.1 — Flow Builder desteği ekleyen bu sürüm — 4.x serisinin ilk kararlı sürümüdür. Unity Package Manager aracılığıyla yüklemek için Git URL’sine sürüm etiketini ekleyin:

https://github.com/adaptyteam/AdaptySDK-Unity.git?path=/Packages/com.adapty.unity-sdk#4.1.0

Unity paketi aracılığıyla yüklüyorsanız, adapty-unity-plugin-4.1.0.unitypackage dosyasını 4.1.0 sürümünden indirin.

Adapty SDK’nın yerel iOS bileşeni artık CocoaPods üzerinden kurulmamakta, bunun yerine uzak bir Swift paketi olarak tanımlanmaktadır — bu durum 4.x ile gelen iki yapı kurulumu değişikliğinden biridir:

  • External Dependency Manager’ı 1.2.188 veya üzeri bir sürüme güncelleyin — önceki sürümler Swift Package Manager bağımlılıklarını desteklemez. Bu, SDK 4.1’in peer dependency olarak bildirdiği sürümdür; bu nedenle projenizde daha eski bir sürüm varsa Unity sizi uyarır.
  • Yukarıdaki CocoaPods adımları (iOS Resolver -> Install Cocoapods, Unity-iPhone.xcworkspace dosyasını açma) yalnızca SDK 3.x için geçerlidir. SDK 4.1’de EDM, Swift paketini oluşturulan Xcode projesine otomatik olarak ekler.
  • iOS dağıtım hedefini 15.0 veya üzeri olarak ayarlayın. Unity Editor’daki bir derleme doğrulayıcı, aksi takdirde iOS derlemesini durdurur.

Geçiş kılavuzuna bakarak 4.x serisindeki tüm değişiklikleri inceleyebilirsiniz.

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.
using UnityEngine;
using AdaptySDK;

public class AdaptyListener : MonoBehaviour, AdaptyEventListener {
    void Start() {
        DontDestroyOnLoad(this.gameObject);
        Adapty.SetEventListener(this);

        var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY");

        Adapty.Activate(builder.Build(), (error) => {
            if (error != null) {
                // handle the error
                return;
            }
        });
    }

    public void OnLoadLatestProfile(AdaptyProfile profile) { }
    public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { }
    public void OnInstallationDetailsFail(AdaptyError error) { }
}
Note

SDK 4.1’de, listener arayüzleri C# I-prefix kuralını takip eder — AdaptyEventListener yerine IAdaptyEventListener kullanın — ve arayüz bir yöntem daha gerektirir: OnReceivePromotedPurchase. Ayrıntılar için migration guide sayfasına bakın.

Important

Diğer Adapty SDK yöntemlerini çağırmadan önce Activate tamamlanma callback’ini bekleyin. Tam sıra için Unity SDK’da çağrı sırası sayfasına bakın.

Olay dinlemeyi ayarlayın

Adapty olaylarını dinlemek için bir script oluşturun. Sahnenizde bu nesneye AdaptyListener adını verin. Uygulamanın yaşam süresi boyunca kalıcı olmasını sağlamak için bu nesneye DontDestroyOnLoad metodunu kullanmanızı öneririz.

2ccd564-create_adapty_listener.webp

Adapty, AdaptySDK isim alanını kullanır. Adapty SDK kullanan script dosyalarınızın en üstüne şunu ekleyebilirsiniz:

using AdaptySDK;

Adapty olaylarına abone olun:

using UnityEngine;
using AdaptySDK;

public class AdaptyListener : MonoBehaviour, AdaptyEventListener {
    public void OnLoadLatestProfile(AdaptyProfile profile) {
        // handle updated profile data
    }

    public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { }
    public void OnInstallationDetailsFail(AdaptyError error) { }
}

Script Execution Order ayarını, AdaptyListener’ı Default Time’ın önüne gelecek şekilde düzenlemenizi öneririz. Bu sayede Adapty mümkün olduğunca erken başlatılır.

activate_unity.webp

Şimdi uygulamanızda paywallları ayarlayın:

Adapty SDK’nın AdaptyUI modülünü etkinleştirin

Paywall Builder kullanmayı planlıyor ve AdaptyUI modülünü yüklediyseniz AdaptyUI’ın etkin olması gerekir. Yapılandırma sırasında etkinleştirebilirsiniz:

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetActivateUI(true);

İsteğe bağlı kurulum

Günlük Kaydı

Günlük kaydı sistemini kurma

Adapty, ne olduğunu anlamanıza yardımcı olmak için hataları ve diğer önemli bilgileri kaydeder. Aşağıdaki düzeyler mevcuttur:

LevelDescription
errorYalnızca hatalar loglanır
warnKritik hatalara yol açmayan ancak dikkat edilmesi gereken SDK hataları ve mesajları loglanır
infoHatalar, uyarılar ve çeşitli bilgi mesajları loglanır
verboseHata ayıklama sırasında işe yarayabilecek her türlü ek bilgi (fonksiyon çağrıları, API sorguları vb.) loglanır
Adapty’yi yapılandırırken uygulamanızda log seviyesini ayarlayabilirsiniz:
// 'verbose' is recommended for development and the first production release
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY");
builder.LogLevel = AdaptyLogLevel.Verbose;

Log seviyesini çalışma zamanında da değiştirebilirsiniz:

Adapty.SetLogLevel(AdaptyLogLevel.Verbose, (error) => {
    // handle result
});

Veri politikaları

Adapty, 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şmayı 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 SetIPAddressCollectionDisabled 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 uygulamanız için IP tabanlı özellikler gerekli olmadığında gereksiz veri toplamayı azaltmak amacıyla kullanabilirsiniz.

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetIPAddressCollectionDisabled(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 SetAppleIDFACollectionDisabled ve/veya SetGoogleAdvertisingIdCollectionDisabled değerini true olarak ayarlayın. Varsayılan değer false’tur.

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

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetAppleIDFACollectionDisabled(true)
    .SetGoogleAdvertisingIdCollectionDisabled(true);

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

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

Varsayılan önbellek ayarlarını geçersiz kılmak için SetAdaptyUIMediaCache kullanın:

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetAdaptyUIMediaCache(
        100 * 1024 * 1024, // MemoryStorageTotalCostLimit 100MB
        null, // MemoryStorageCountLimit
        100 * 1024 * 1024 // DiskStorageSizeLimit 100MB
    );

Parametreler:

ParametreZorunluAçıklama
memoryStorageTotalCostLimitisteğe bağlıBellekteki toplam önbellek boyutu (bayt cinsinden). Varsayılan değer platforma göre değişir.
memoryStorageCountLimitisteğe bağlıBellek depolamasının öğe sayısı sınırı. Varsayılan değer platforma göre değişir.
diskStorageSizeLimitisteğe bağlıDiskteki dosya boyutu sınırı (bayt cinsinden). Varsayılan değer platforma göre değişir.

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

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

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetGoogleLocalAccessLevelAllowed(true);

Yedekten geri yüklemede veri temizleme

SetAppleClearDataOnBackup 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 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.

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetAppleClearDataOnBackup(true);

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 SetAdaptyAttributionEnabled 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.

var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
    .SetAdaptyAttributionEnabled(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"/>

    
Important

Unity’de bu değişiklikleri Assets/Plugins/Android/AndroidManifest.xml dosyasına uygulayın ve yedekleme kuralı dosyalarını Assets/Plugins/Android/res/xml/ dizini altında oluşturun.

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

Satın alma akışını başlatan Activity, varsayılan dışı bir launchMode kullanıyorsa Android, kullanıcı Google Play’den, bir bankacılık uygulamasından veya tarayıcıdan geri döndüğünde bu Activity’yi hatalı biçimde yeniden oluşturabilir ya da yeniden kullanabilir. Bu durum satın alma sonucunun kaybolmasına veya iptal edilmiş olarak işlenmesine yol açabilir. Satın alma işlemlerinin doğru çalışması için, satın alma flow’unu başlatan Activity’de yalnızca standard veya singleTop başlatma modlarını kullanın; 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" />

Paywall Android’de gösterildiğinde uygulama çöküyor

Uygulamanız Android’de bir paywall görüntülenirken çöküyorsa, Kotlin eklentisi Gradle yapılandırmanızda eksik olabilir. Eklemek için:

  1. Player Settings bölümünde, Custom Launcher Gradle Template ve Custom Base Gradle Template seçeneklerinin işaretlendiğinden emin olun.

    kotlin-plugin1.webp
  2. /Assets/Plugins/Android/launcherTemplate.gradle dosyasına aşağıdaki satırı ekleyin:

   apply plugin: 'com.android.application'
   apply plugin: 'kotlin-android'
   apply from: 'setupSymbols.gradle'
   apply from: '../shared/keepUnitySymbols.gradle'
  1. Aşağıdaki satırı /Assets/Plugins/Android/baseProjectTemplate.gradle dosyasına ekleyin:
    plugins {
        // If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity
        // See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html
        // See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
        // To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
        id 'com.android.application' version '8.3.0' apply false
        id 'com.android.library' version '8.3.0' apply false
        id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
        **BUILD_SCRIPT_DEPS**
    }