Instalar y configurar el SDK de Unity

El SDK de Adapty incluye dos módulos clave para una integración fluida en tu app de Unity:

  • Core Adapty: Este SDK esencial es necesario para que Adapty funcione correctamente en tu app.
  • AdaptyUI: Este módulo es necesario si usas el Adapty Paywall Builder, una herramienta intuitiva y sin código para crear paywalls multiplataforma fácilmente.
Tip

¿Quieres ver un ejemplo real de cómo se integra el SDK de Adapty en una app móvil? Echa un vistazo a nuestra app de ejemplo, que muestra la configuración completa, incluyendo la visualización de paywalls, la realización de compras y otras funcionalidades básicas.

Requisitos

El SDK de Adapty es compatible con iOS 13.0+, pero requiere iOS 15.0+ para trabajar con paywalls creados en el Paywall Builder. El SDK de Adapty 4.1 —que añade compatibilidad con Flow Builder— requiere iOS 15.0+ para toda la app: un validador de compilación en el Unity Editor detiene la build de iOS si el deployment target es inferior.

Info

El SDK de Adapty para Unity 4.0 y versiones posteriores funciona con Google Play Billing Library v8.

La compatibilidad con una versión de la Billing Library no significa que Adapty sea compatible con todas las funcionalidades que Google introdujo en ella. Antes de adoptar una nueva capacidad de facturación de Google Play, consulta Producto en Play Store.

Info

Instalar el SDK es el paso 5 de la configuración de Adapty. Para que las compras funcionen en tu app, también necesitas conectar tu app a los stores, y luego crear productos, un paywall y un placement en el Adapty Dashboard. La guía de inicio rápido explica todos los pasos necesarios.

Instalar el SDK de Adapty

Release

Elige el método de instalación que prefieras:

Tras instalar el SDK, completa los siguientes pasos:

  1. Instala el plugin External Dependency Manager (EDM). El SDK de Adapty lo utiliza para gestionar las dependencias de iOS y las dependencias de gradle de Android.

  2. Tras instalar EDM, puede que necesites invocar el gestor de dependencias:

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

    y

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

  3. Al compilar tu proyecto de Unity para iOS, obtendrás el archivo Unity-iPhone.xcworkspace, que debes abrir en lugar de Unity-iPhone.xcodeproj; de lo contrario, no se usarán las dependencias de Cocoapods.

Adapty SDK 4.1

SDK 4.1 — que añade compatibilidad con Flow Builder — es la primera versión estable de la línea 4.x. Para instalarlo a través de Unity Package Manager, añade la etiqueta de versión a la URL de Git:

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

Si instalas mediante el paquete de Unity, descarga adapty-unity-plugin-4.1.0.unitypackage desde la versión 4.1.0.

Dos cambios en la configuración de compilación vienen con la versión 4.x: el SDK nativo de Adapty para iOS se declara como un paquete Swift remoto y ya no se instala a través de CocoaPods:

  • Actualiza el External Dependency Manager a 1.2.188 o posterior — las versiones anteriores no admiten dependencias de Swift Package Manager. Esta es la versión que declara el SDK 4.1 como dependencia entre pares, por lo que Unity te avisará si tu proyecto tiene una versión más antigua.
  • Los pasos de CocoaPods mencionados anteriormente (iOS Resolver -> Install Cocoapods, abrir Unity-iPhone.xcworkspace) son exclusivos del SDK 3.x. Con el SDK 4.1, EDM añade el paquete Swift al proyecto Xcode generado de forma automática.
  • Establece el deployment target de iOS en 15.0 o posterior. Un validador de compilación en el Unity Editor detiene el build de iOS si no se cumple este requisito.

Consulta la guía de migración para ver la lista completa de cambios en la línea 4.x.

Activar el módulo Adapty del SDK

Activa el SDK en el código de tu aplicación.

Note

El SDK solo necesita activarse una vez en tu aplicación.

Para obtener tu Public SDK Key:

  1. Ve al Adapty Dashboard y navega a App settings → General.
  2. En la sección Api keys, copia la Public SDK Key (NO la Secret Key).
  3. Reemplaza "YOUR_PUBLIC_SDK_KEY" en el código.

O bien, obtenla de forma programática usando el Adapty CLI:

npm install -g adapty
adapty auth login
adapty apps list

O directamente:

npx adapty auth login
adapty apps list
  • Asegúrate de usar la Public SDK key para inicializar Adapty; la Secret key solo debe usarse para la API del lado del servidor.
  • Las SDK keys son únicas para cada app, así que si tienes varias apps asegúrate de elegir la correcta.
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

En el SDK 4.1, las interfaces de listener siguen la convención de prefijo I de C# — implementa IAdaptyEventListener en lugar de AdaptyEventListener — y la interfaz requiere un método adicional, OnReceivePromotedPurchase. Consulta la guía de migración.

Important

Espera al callback de finalización de Activate antes de llamar a cualquier otro método del SDK de Adapty. Consulta Orden de llamadas en el SDK de Unity para ver la secuencia completa.

Configurar la escucha de eventos

Crea un script para escuchar los eventos de Adapty. Nómbralo AdaptyListener en tu escena. Te recomendamos usar el método DontDestroyOnLoad en este objeto para asegurarte de que persista durante toda la vida útil de la aplicación.

2ccd564-create_adapty_listener.webp

Adapty usa el espacio de nombres AdaptySDK. Al principio de los archivos de script que usen el SDK de Adapty, puedes añadir:

using AdaptySDK;

Suscríbete a los eventos de Adapty:

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) { }
}

Recomendamos ajustar el orden de ejecución de scripts (Script Execution Order) para colocar el AdaptyListener antes del tiempo predeterminado (Default Time). Esto garantiza que Adapty se inicialice lo antes posible.

activate_unity.webp

Ahora configura los paywalls en tu app:

Activar el módulo AdaptyUI del SDK

Si planeas usar Paywall Builder y has instalado el módulo AdaptyUI, necesitas que AdaptyUI esté activo. Puedes activarlo durante la configuración:

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

Configuración opcional

Registro

Configura el sistema de registro

Adapty registra errores y otra información importante para ayudarte a entender qué está pasando. Están disponibles los siguientes niveles:

LevelDescription
errorSolo se registrarán errores
warnSe registrarán errores y mensajes del SDK que no causan errores críticos, pero que merecen atención
infoSe registrarán errores, advertencias y varios mensajes informativos
verboseSe registrará cualquier información adicional que pueda ser útil durante la depuración, como llamadas a funciones, consultas a la API, etc.
Puedes establecer el nivel de log en tu app durante la configuración de Adapty:
// 'verbose' is recommended for development and the first production release
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY");
builder.LogLevel = AdaptyLogLevel.Verbose;

También puedes cambiar el nivel de log en tiempo de ejecución:

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

Políticas de datos

Adapty no almacena datos personales de tus usuarios a menos que los envíes explícitamente, pero puedes implementar políticas de seguridad de datos adicionales para cumplir con las directrices del store o del país.

Deshabilitar la recopilación y el uso compartido de direcciones IP

Al activar el módulo de Adapty, establece SetIPAddressCollectionDisabled en true para deshabilitar la recopilación y el uso compartido de la dirección IP del usuario. El valor predeterminado es false. Usa este parámetro para mejorar la privacidad del usuario, cumplir con normativas regionales de protección de datos (como GDPR o CCPA) o reducir la recopilación de datos innecesaria cuando las funciones basadas en IP no son necesarias para tu app.

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

Desactivar la recopilación y el uso compartido del ID publicitario

Al activar el módulo de Adapty, establece SetAppleIDFACollectionDisabled y/o SetGoogleAdvertisingIdCollectionDisabled en true para desactivar la recopilación de identificadores publicitarios. El valor predeterminado es false.

Usa este parámetro para cumplir con las políticas de App Store/Google Play, evitar que aparezca el aviso de App Tracking Transparency, o si tu aplicación no necesita atribución publicitaria ni análisis basado en IDs publicitarios.

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

Configurar la caché de medios para AdaptyUI

De forma predeterminada, AdaptyUI almacena en caché los medios (como imágenes y vídeos) para mejorar el rendimiento y reducir el uso de red. Puedes personalizar la configuración de la caché proporcionando una configuración personalizada.

Usa SetAdaptyUIMediaCache para sobreescribir la configuración de caché predeterminada:

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

Parámetros:

ParámetroObligatorioDescripción
memoryStorageTotalCostLimitopcionalTamaño total de la caché en memoria en bytes. Por defecto, usa el valor específico de la plataforma.
memoryStorageCountLimitopcionalLímite del número de elementos en el almacenamiento en memoria. Por defecto, usa el valor específico de la plataforma.
diskStorageSizeLimitopcionalLímite del tamaño de archivo en disco en bytes. Por defecto, usa el valor específico de la plataforma.

Habilitar niveles de acceso locales (Android)

Por defecto, los niveles de acceso locales están habilitados en iOS y deshabilitados en Android. Para habilitarlos también en Android, establece SetGoogleLocalAccessLevelAllowed en true:

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

Borrar datos al restaurar desde copia de seguridad

Cuando SetAppleClearDataOnBackup está configurado en true, el SDK detecta cuándo la app se restaura desde una copia de seguridad de iCloud y elimina todos los datos almacenados localmente por el SDK, incluida la información de perfil en caché, los detalles de productos y los paywalls. El SDK se inicializa entonces con un estado limpio. El valor predeterminado es false.

Note

Solo se elimina la caché local del SDK. El historial de transacciones con Apple y los datos de usuario en los servidores de Adapty permanecen sin cambios.

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

Habilitar la atribución de Adapty

Info

Este parámetro está disponible a partir de la versión 4.1 del SDK.

Si usas Adapty Attribution, establece SetAdaptyAttributionEnabled en true al activar el SDK. El valor predeterminado es false: sin este parámetro, el SDK no registra instalaciones ni entrega los detalles de instalación a tu app. En versiones del SDK anteriores a la 4.1, la atribución de Adapty se habilita automáticamente.

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

Solución de problemas

Reglas de copia de seguridad de Android (configuración de Auto Backup)

Algunos SDKs (incluido Adapty) incluyen su propia configuración de Android Auto Backup. Si usas varios SDKs que definen reglas de copia de seguridad, el fusionador de manifiestos de Android puede fallar con un error relacionado con android:fullBackupContent, android:dataExtractionRules o android:allowBackup.

Síntomas típicos del error: 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

Estos cambios deben realizarse en el directorio de la plataforma Android (que normalmente se encuentra en la carpeta android/ de tu proyecto).

Para resolverlo, necesitas:

  • Indicar al fusionador de manifiestos que use los valores de tu app para los atributos relacionados con la copia de seguridad.

  • Crear archivos de reglas de copia de seguridad que combinen las reglas de Adapty con las de otros SDKs.

1. Añade el espacio de nombres tools a tu manifiesto

En tu archivo AndroidManifest.xml, asegúrate de que la etiqueta raíz <manifest> incluya tools:

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

    ...
</manifest>

2. Sobreescribe los atributos de copia de seguridad en <application>

En el mismo archivo AndroidManifest.xml, actualiza la etiqueta <application> para que tu app proporcione los valores finales e indique al fusionador de manifiestos que reemplace los valores de las bibliotecas:

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

Si algún SDK también define android:allowBackup, inclúyelo en tools:replace:

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

3. Crea los archivos de reglas de copia de seguridad combinadas

Crea archivos XML en el directorio res/xml/ de tu proyecto Android que combinen las reglas de Adapty con las de otros SDKs. Android usa diferentes formatos de reglas de copia de seguridad según la versión del sistema operativo, por lo que crear ambos archivos garantiza la compatibilidad con todas las versiones de Android que soporta tu app.

Note

Los ejemplos a continuación muestran AppsFlyer como SDK de terceros de ejemplo. Reemplaza o añade reglas para cualquier otro SDK que estés usando en tu app.

Para Android 12 y superior (usa el nuevo formato de reglas de extracción de datos):

<?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>

Para Android 11 e inferior (usa el formato heredado de contenido de copia de seguridad completa):

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

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

    
Important

En Unity, aplica estos cambios en Assets/Plugins/Android/AndroidManifest.xml y crea los archivos de reglas de copia de seguridad en Assets/Plugins/Android/res/xml/.

Las compras fallan al volver desde otra app en Android

Si la Activity que inicia el flujo de compra usa un launchMode no predeterminado, Android puede recrearla o reutilizarla incorrectamente cuando el usuario regresa desde Google Play, una app bancaria o un navegador. Esto puede provocar que el resultado de la compra se pierda o se trate como cancelado. Para garantizar que las compras funcionen correctamente, utiliza solo los modos de inicio standard o singleTop para la Activity que inicia el flujo de compra, y evita cualquier otro modo.

En tu AndroidManifest.xml, asegúrate de que la Activity que inicia el flujo de compra esté configurada como standard o singleTop:

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

La app se bloquea al mostrar un paywall en Android

Si tu app se bloquea en Android al mostrar un paywall, es posible que falte el plugin de Kotlin en la configuración de Gradle. Para añadirlo:

  1. En Player Settings, asegúrate de que las opciones Custom Launcher Gradle Template y Custom Base Gradle Template estén seleccionadas.

    kotlin-plugin1.webp
  2. Añade la siguiente línea a /Assets/Plugins/Android/launcherTemplate.gradle:

   apply plugin: 'com.android.application'
   apply plugin: 'kotlin-android'
   apply from: 'setupSymbols.gradle'
   apply from: '../shared/keepUnitySymbols.gradle'
  1. Añade la siguiente línea a /Assets/Plugins/Android/baseProjectTemplate.gradle:
    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**
    }