Instalar y configurar el SDK de Adapty React Native en un proyecto Expo

Esta guía cubre la instalación y configuración del SDK de Adapty para React Native en un proyecto Expo.

Si usas React Native puro (sin Expo), sigue la guía de instalación de React Native en su lugar.

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

  • Core Adapty: Este módulo es necesario 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.

Si necesitas un tutorial completo sobre cómo implementar compras in-app en tu app de React Native, consulta este artículo.

¿Quieres ver un ejemplo real de cómo se integra el SDK de Adapty en una aplicación Expo? Echa un vistazo a nuestras apps de ejemplo:

Para una guía completa de implementación, también puedes ver el vídeo:

Requisitos

El SDK de Adapty para React Native es compatible con iOS 13.0+, pero el uso de paywalls creados en el Adapty Paywall Builder 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. En Expo, esto se puede hacer durante el prebuild o mediante un config plugin.

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

Se requiere Expo Dev Client (una compilación de desarrollo personalizada) para usar Adapty en un proyecto de Expo.

Expo Go no admite módulos nativos personalizados, por lo que solo puedes usarlo con el modo mock para el desarrollo de UI/lógica (sin compras reales ni renderizado de AdaptyUI/Paywall Builder).

  1. Instala el SDK de Adapty (esto también instala @adapty/core automáticamente):

    npx expo install react-native-adapty
    npx expo prebuild
  2. Compila tu app para desarrollo usando EAS o una compilación local:

  3. Inicia el servidor de desarrollo:

    npx expo start --dev-client

Activa el módulo Adapty del 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 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, consulta los consejos.

Activar el módulo AdaptyUI del SDK de Adapty

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

Configuración opcional

Registro de actividad

Configurar el sistema de registro

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

NivelDescripción
errorSolo se registrarán errores
warnSe registrarán errores y mensajes del SDK que no causan errores críticos, pero que vale la pena tener en cuenta
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 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 del store o del país.

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

Al activar el módulo de Adapty, establece ipAddressCollectionDisabled en true para desactivar 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 tu app no requiere funciones basadas en IP.

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

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

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 aparezca el prompt de App Tracking Transparency, o si tu app no requiere atribución publicitaria ni análisis basados en IDs publicitarios.

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 red. Puedes personalizar la configuración de la caché proporcionando una configuración personalizada.

Usa mediaCache para sobrescribir 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á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)

De forma predeterminada, 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,
  },
});

Limpiar datos al restaurar desde copia de seguridad

Cuando clearDataOnBackup se establece en true, el SDK detecta cuándo 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

Configura el modo mock para Expo Go / Expo Web

Los entornos de Expo Go y Expo Web no tienen acceso a los módulos nativos de Adapty. Para evitar errores en tiempo de ejecución y aun así poder construir y probar la UI de tu app y la lógica de los paywall, Adapty ofrece el modo mock.

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

  • No abre los flujos de compra de App Store / Google Play y no crea transacciones reales.
  • No renderiza paywalls/onboardings creados con Adapty Paywall Builder (AdaptyUI).
  • Los módulos nativos de Adapty se omiten por completo: incluso si faltan archivos del SDK nativo en el build de Xcode/Android o la API key es inválida, no se generarán errores.

Para probar compras reales y paywalls del Paywall Builder, usa un Expo Dev Client / build de producción, donde el modo mock se desactiva automáticamente.

Por defecto, el SDK detecta automáticamente los entornos Expo Go y web, y activa el modo mock. No necesitas configurar nada, a menos que quieras personalizar los datos mock.

Cuando el modo mock está activo:

  • Todos los métodos de Adapty devuelven datos mock sin realizar peticiones 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 de prueba usando mockConfig durante la activación. Consulta el formato de configuración y los parámetros disponibles 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 puente 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');

Retrasar la activación del SDK para desarrollo

Adapty precarga 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 causar problemas 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 diferir las solicitudes que realiza el SDK para obtener datos actualizados del usuario.

Al habilitar la propiedad __debugDeferActivation, la llamada de activación queda en espera hasta que realices la siguiente llamada al SDK de Adapty. Esto evita solicitudes de autenticación innecesarias cuando no se necesitan. Es importante tener en cuenta que esta funcionalidad está pensada únicamente para uso en desarrollo, ya que no cubre todos los escenarios posibles de usuario. En producción, la activación no debe retrasarse, ya que los dispositivos reales suelen recordar los datos de autenticación y no solicitan las credenciales repetidamente.

Este es el enfoque recomendado para su uso:

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, puede aparecer el siguiente 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 fast refresh de React Native activa múltiples llamadas de activación durante el desarrollo. Para evitarlo, usa la opción __ignoreActivationOnFastRefresh con el valor __DEV__ (el indicador de 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
}

Solución de problemas

Error de versión mínima de iOS

Al compilar para iOS, puede aparecer un error sobre la versión mínima de iOS o el deployment target, especialmente si usas paywalls creados en el Paywall Builder de Adapty, que requieren iOS 15.0+.

Como Expo genera el proyecto iOS (incluido el Podfile) durante expo prebuild, no debes editar el Podfile directamente. En su lugar, configura el deployment target mediante el plugin de configuración expo-build-properties.

  1. Instala el plugin:
  2. npx expo install expo-build-properties
  3. Actualiza tu configuración de Expo (app.json o app.config.js) para establecer el target de despliegue de iOS:
{
    "expo": {
        // ...other Expo config...
        "plugins": [
            [
                "expo-build-properties",
                {
                    "ios": {
                        // Use "13.0" for core Adapty features only,
                        // or "15.0" if you use paywalls created in the paywall builder.
                        "deploymentTarget": "15.0"
                    }
                }
            ],
        ]
    }
}
  1. Regenera el proyecto nativo de iOS y reconstruye:
npx expo prebuild --clean
npx expo run:ios      # or `eas build -p ios` on your CI

Conflicto de manifiesto Android Auto Backup

Cuando usas Expo con varios SDKs que configuran Android Auto Backup (como Adapty, AppsFlyer o expo-secure-store), puede aparecer un conflicto en el merger del manifiesto.

Un error típico tiene este aspecto: Manifest merger failed : Attribute application@fullBackupContent value=(@xml/secure_store_backup_rules) from AndroidManifest.xml:24:248-306 is also present at [io.adapty:android-sdk:3.12.0] AndroidManifest.xml:9:18-70 value=(@xml/adapty_backup_rules). Para resolver este conflicto, debes permitir que el plugin de Adapty gestione la configuración de copia de seguridad de Android. Si tu proyecto también usa expo-secure-store, desactiva su propia configuración de copia de seguridad para evitar conflictos.

Así es como configurar tu app.json:

{
  "expo": {
    "plugins": [
      ["react-native-adapty", { "replaceAndroidBackupConfig": true }],
      ["expo-secure-store", { "configureAndroidBackup": false }]
    ]
  }
}

La opción replaceAndroidBackupConfig está en false por defecto. Al activarla, permite que el plugin de Adapty controle las reglas de copia de seguridad de Android. Incluye "configureAndroidBackup": false si usas expo-secure-store para evitar advertencias, ya que la configuración de copia de seguridad de SecureStore pasará a ser gestionada por Adapty.

Esta configuración solo respeta los requisitos de copia de seguridad de Adapty, AppsFlyer y expo-secure-store. Si otras librerías de tu proyecto definen reglas de copia de seguridad personalizadas, tendrás que configurarlas manualmente.