Instalar y configurar Adapty SDK en un proyecto React Native puro

Esta guía aplica únicamente a proyectos React Native puros (sin Expo).
Si usas Expo, sigue la guía de instalación para Expo.

El SDK de Adapty incluye dos módulos clave para integrarse sin problemas en tu app de React Native:

  • Core Adapty: Este módulo es obligatorio para que Adapty funcione correctamente en tu app.
  • AdaptyUI: Este módulo es necesario si usas el Adapty Paywall Builder, una herramienta visual sin código para crear paywalls multiplataforma fácilmente. AdaptyUI se activa automáticamente junto con el módulo principal.

¿Quieres ver un ejemplo real de cómo se integra el SDK de Adapty en una app móvil? Echa un vistazo a nuestras apps de ejemplo, que muestran 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 para React Native es compatible con iOS 13.0+, pero para usar paywalls creados en el Adapty Paywall Builder se requiere iOS 15.0+.

Adapty es compatible con Google Play Billing Library hasta la versión 8.x. Por defecto, Adapty trabaja con Google Play Billing Library v.7.0.0, pero si quieres forzar una versión posterior, puedes añadir la dependencia manualmente.

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

Release

  1. Instala el SDK de Adapty (esto también instala @adapty/core automáticamente):
    # using npm
    npm install react-native-adapty
    
    # or using yarn
    yarn add react-native-adapty  
  2. Para iOS, instala los pods:
    cd ios && pod install
Para Android, si tu versión de React Native es anterior a 0.73.0 (haz clic para expandir)

Actualiza el archivo /android/build.gradle. Asegúrate de que exista la dependencia kotlin-gradle-plugin:1.8.0 o una versión más reciente:

...
buildscript {
  ...
  dependencies {
    ...
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
  }
}
...

Activar el módulo Core de Adapty SDK

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

Copia el siguiente código en App.tsx para activar Adapty:


adapty.activate('YOUR_PUBLIC_SDK_KEY');

Espera a que activate se resuelva antes de llamar a cualquier otro método del SDK de Adapty. Consulta el orden de llamadas en el SDK de React Native para ver la secuencia completa.

Ahora configura los paywalls en tu app:

Para evitar errores de activación en el entorno de desarrollo, usa los consejos.

Activar el módulo AdaptyUI de Adapty SDK

Si planeas usar el Paywall Builder, necesitas el módulo AdaptyUI. Se activa automáticamente cuando activas el módulo principal; no tienes que hacer nada más.

Configuración opcional

Logging

Configurar el sistema de logging

Adapty registra errores e información importante para ayudarte a entender qué está ocurriendo. Los niveles disponibles son los siguientes:

NivelDescripción
errorSolo se registrarán los errores
warnSe registrarán los errores y los mensajes del SDK que no causan errores críticos pero merecen atención
infoSe registrarán los errores, las 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 antes o durante la configuración de Adapty:

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

// Or set it during configuration
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  logLevel: 'verbose',
});

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 adicionales de seguridad de datos para cumplir con las directrices de la store o del país.

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

Al activar el módulo de Adapty, establece ipAddressCollectionDisabled 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 reforzar la privacidad del usuario, cumplir con las normativas regionales de protección de datos (como RGPD o CCPA), o reducir la recopilación de datos innecesaria cuando las funciones basadas en IP no son necesarias para tu app.

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ipAddressCollectionDisabled: true,
});

Deshabilitar la recopilación y el uso compartido del ID de publicidad

Al activar el módulo de Adapty, establece ios.idfaCollectionDisabled (iOS) o android.adIdCollectionDisabled (Android) en true para deshabilitar la recopilación de identificadores publicitarios. El valor predeterminado es false.

Usa este parámetro para cumplir con las políticas de App Store/Play Store, evitar que se active el aviso de App Tracking Transparency, o si tu app no requiere atribución publicitaria ni analíticas basadas en IDs de publicidad.

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ios: {
    idfaCollectionDisabled: true,      
  },
  android: {
    adIdCollectionDisabled: true,      
  },
});

Configurar la caché de medios para AdaptyUI

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

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

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  mediaCache: {
    memoryStorageTotalCostLimit: 200 * 1024 * 1024, // Optional: memory cache size in bytes
    memoryStorageCountLimit: 2147483647,            // Optional: max number of items in memory
    diskStorageSizeLimit: 200 * 1024 * 1024,       // Optional: disk cache size in bytes
  },
});

Parámetros:

ParámetroObligatorioDescripción
memoryStorageTotalCostLimitopcionalTamaño total de la caché en memoria en bytes. El valor predeterminado depende de la plataforma.
memoryStorageCountLimitopcionalEl límite de elementos en el almacenamiento en memoria. El valor predeterminado depende de la plataforma.
diskStorageSizeLimitopcionalEl límite de tamaño de archivo en disco en bytes. El valor predeterminado depende 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 localAccessLevelAllowed en true:

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  android: {
     localAccessLevelAllowed: true,      
  },
});

Borrar datos al restaurar desde copia de seguridad

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

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

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
   ios: {
      clearDataOnBackup: true
   },
});

Consejos para el entorno de desarrollo

Retrasar la activación del SDK para desarrollo

Adapty realiza una precarga de todos los datos necesarios del usuario al activarse el SDK, lo que permite un acceso más rápido a datos actualizados.

Sin embargo, esto puede ser un problema en el simulador de iOS, que frecuentemente solicita autenticación durante el desarrollo. Aunque Adapty no puede controlar el flujo de autenticación de StoreKit, sí puede aplazar las solicitudes que hace el SDK para obtener datos actualizados del usuario.

Al habilitar la propiedad __debugDeferActivation, la llamada de activación queda en espera hasta que realizas la siguiente llamada al SDK de Adapty. Esto evita avisos de autenticación innecesarios si no son necesarios.

Es importante tener en cuenta que esta funcionalidad está pensada únicamente para el desarrollo, ya que no cubre todos los escenarios de usuario posibles. En producción, la activación no debería retrasarse, ya que los dispositivos reales normalmente recuerdan los datos de autenticación y no solicitan credenciales repetidamente.

Este es el enfoque recomendado:

try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __debugDeferActivation: isSimulator(), // 'isSimulator' from any 3rd party library
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}

Solucionar errores de activación del SDK con Fast Refresh de React Native

Al desarrollar con el SDK de Adapty en React Native, es posible que encuentres el error: Adapty can only be activated once. Ensure that the SDK activation call is not made more than once.

Esto ocurre porque la función de recarga rápida de React Native activa múltiples llamadas de activación durante el desarrollo. Para evitarlo, usa la opción __ignoreActivationOnFastRefresh establecida en __DEV__ (el indicador del modo desarrollo de React Native).

try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __ignoreActivationOnFastRefresh: __DEV__, 
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}

Configurar el modo mock para pruebas locales

Para el desarrollo y las pruebas locales, puedes habilitar el modo mock para evitar necesitar cuentas sandbox de App Store/Google Play y agilizar las iteraciones. El modo mock omite por completo los módulos nativos de Adapty y devuelve datos simulados.

El modo mock no es una herramienta para probar compras reales:

  • No abre los flujos de compra de App Store / Google Play ni crea transacciones reales.
  • No renderiza paywalls/onboardings creados con Adapty Paywall Builder (AdaptyUI).
  • Los módulos nativos de Adapty se omiten por completo; incluso la ausencia de archivos nativos del SDK en la compilación de Xcode/Android o una clave de API inválida no generarán errores.
  • No se envían datos a los servidores de Adapty.

Para probar compras reales y paywalls del Paywall Builder, deshabilita el modo mock y usa cuentas sandbox.

Para habilitar el modo mock, establece enableMock en true:

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  enableMock: true,
});

Cuando el modo mock está activo:

  • Todos los métodos de Adapty devuelven datos mock sin realizar solicitudes de red a los servidores de Adapty.
  • Por defecto, el perfil mock inicial no tiene suscripciones activas.
  • Por defecto, makePurchase(...) simula una compra exitosa y otorga acceso premium.

Puedes personalizar los datos mock usando mockConfig durante la activación. Consulta el formato de configuración y los parámetros soportados aquí.


try {
   await adapty.activate('YOUR_PUBLIC_SDK_KEY', {
      mockConfig: {
         // Customize the initial mock profile (optional)
      },
   });
} catch (error) {
   console.error('Failed to activate Adapty SDK:', error);
}

Si necesitas llamar a métodos del SDK antes de la activación (como isActivated() o setLogLevel()), usa enableMock() antes de activate(). Si el bridge ya está inicializado, este método no hace nada.

adapty.enableMock(); // Optional: pass mockConfig to customize mock data

// Now you can call methods before activation

await adapty.activate('YOUR_PUBLIC_SDK_KEY');

Solución de problemas

Error de versión mínima de iOS

Si obtienes un error de versión mínima de iOS, actualiza tu Podfile:

-platform :ios, min_ios_version_supported
+platform :ios, '13.0'  # For core features only
# OR
+platform :ios, '15.0'  # If using paywalls created in the paywall builder

Conflicto de manifiesto de Android Auto Backup

Algunos SDKs (incluido Adapty) incluyen su propia configuración de Android Auto Backup. Si utilizas 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)

Estos cambios deben realizarse en el directorio de la plataforma Android (normalmente 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 namespace 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 definitivos e indique al fusionador de manifiestos que reemplace los valores de las librerías:

<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 utiliza distintos 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 admite tu app.

Los ejemplos a continuación usan AppsFlyer como SDK de terceros de muestra. Reemplaza o añade reglas para cualquier otro SDK que uses 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 legado 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"/>

    

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 asegurarte de que las compras funcionen correctamente, usa únicamente los modos de lanzamiento 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" />

Errores de compilación de Swift 6 causados por la sobreescritura de SWIFT_VERSION en el Podfile

Al compilar tu app de React Native para iOS, es posible que veas errores de compilación de Swift 6 en los targets de pods de Adapty. Los síntomas típicos incluyen incompatibilidades de @Sendable en AdaptyUIBuilderLogic, conformidad Sendable faltante en los tipos de Adapty, o errores de aislamiento de actores.

Los pods de Adapty declaran s.swift_version = '6.0' y requieren Swift 6 para compilarse. Tu propio código de app puede seguir en Swift 5; solo los targets de los pods de Adapty (Adapty, AdaptyUI, AdaptyUIBuilder, AdaptyLogger, AdaptyPlugin) necesitan compilarse con Swift 6.

La causa más común es un hook post_install en ios/Podfile que sobreescribe SWIFT_VERSION para todos los targets de pods:

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

Solución: Excluye los targets de los pods de Adapty de la sobreescritura:

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

Luego ejecuta pod install desde el directorio ios/ y vuelve a compilar.

Para verificarlo, abre ios/Pods/Pods.xcodeproj, selecciona el target del pod AdaptyBuild SettingsSwift Language Version. Debería indicar Swift 6.