Instalar y configurar el SDK de Adapty para 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 quieres 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 app Expo? Echa un vistazo a nuestras apps de muestra:
- Ejemplo de Expo dev build para funcionalidad completa, incluyendo compras reales y Paywall Builder
- Ejemplo de Expo Go y Web para pruebas con modo mock
Para ver una guía de implementación completa, 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
Se necesita Expo Dev Client (una compilación de desarrollo personalizada) para usar Adapty en un proyecto Expo.
Expo Go no admite módulos nativos personalizados, por lo que solo puedes usarlo con modo mock para el desarrollo de UI/lógica (sin compras reales ni renderizado de AdaptyUI/Paywall Builder).
-
Instala el SDK de Adapty (esto también instala
@adapty/coreautomáticamente):npx expo install react-native-adapty npx expo prebuild -
Compila tu app para desarrollo usando EAS o una compilación local:
-
Inicia el servidor de desarrollo:
npx expo start --dev-client
Activa el módulo Adapty del SDK de Adapty
Para obtener tu Public SDK Key:
- Ve al Adapty Dashboard y navega a App settings → General.
- En la sección Api keys, copia la Public SDK Key (NO la Secret Key).
- 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:
- Si usas el Adapty Paywall Builder, sigue el inicio rápido del Paywall Builder.
- Si construyes tu propia UI de paywall, consulta el inicio rápido para paywalls personalizados.
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
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:
| Nivel | Descripción |
|---|---|
error | Solo se registrarán los errores |
warn | Se registrarán los errores y los mensajes del SDK que no causan errores críticos pero que merecen atención |
info | Se registrarán los errores, advertencias y diversos mensajes informativos |
verbose | Se 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.
Deshabilitar la recopilación y el uso compartido de direcciones 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 mejorar la privacidad de los usuarios, cumplir con normativas regionales de protección de datos (como el RGPD o la CCPA), o reducir la recopilación innecesaria de datos cuando las funcionalidades 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 publicitario
Al activar el módulo de Adapty, establece ios.idfaCollectionDisabled (iOS) o android.adIdCollectionDisabled (Android) 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/Play Store, evitar que se muestre el aviso de App Tracking Transparency, o si tu app no necesita atribución publicitaria ni análisis basados 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 red. Puedes personalizar los ajustes de 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ámetro | Requerido | Descripción |
|---|---|---|
| memoryStorageTotalCostLimit | opcional | Tamaño total de la caché en memoria en bytes. El valor por defecto depende de la plataforma. |
| memoryStorageCountLimit | opcional | Límite de elementos en el almacenamiento en memoria. El valor por defecto depende de la plataforma. |
| diskStorageSizeLimit | opcional | Límite de tamaño de archivo en disco en bytes. El valor por defecto 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 Expo Go y Expo Web no tienen acceso a los módulos nativos de Adapty. Para evitar errores en tiempo de ejecución sin dejar de poder construir y probar la UI y la lógica de paywall de tu aplicación, 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 la compilación de Xcode/Android o la clave de API no es válida, no se generarán errores.
Para probar compras reales y paywalls del Paywall Builder, usa un Expo Dev Client o una compilación de producción, donde el modo mock se deshabilita automáticamente.
De forma predeterminada, el SDK detecta automáticamente los entornos Expo Go y web y activa el modo mock. No necesitas configurar nada, salvo 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.
- De forma predeterminada, el perfil mock inicial no tiene suscripciones activas.
- De forma predeterminada,
makePurchase(...)simula una compra exitosa y concede acceso premium. Puedes personalizar los datos de prueba usandomockConfigdurante 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(); // Opcional: pasa mockConfig para personalizar los datos de prueba
// Ahora puedes llamar a métodos antes de la activación
await adapty.activate('YOUR_PUBLIC_SDK_KEY');
Retrasar la activación del SDK para desarrollo
Adapty obtiene previamente todos los datos necesarios del usuario al activar 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 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 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 función 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, pues 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
}
Solución de 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 dispara múltiples llamadas de activación durante el desarrollo. Para evitarlo, usa la opción __ignoreActivationOnFastRefresh con el valor __DEV__ (el indicador del modo de 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.
- Instala el plugin:
-
npx expo install expo-build-properties - Actualiza tu configuración de Expo (
app.jsonoapp.config.js) para establecer el objetivo 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"
}
}
],
]
}
}
- 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 en el manifest de Android Auto Backup
Al usar Expo con varios SDKs que configuran Android Auto Backup (como Adapty, AppsFlyer o expo-secure-store), es posible que encuentres un conflicto en la fusión del manifest.
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, necesitas 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 solapamientos.
Así es como se configura 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, el plugin de Adapty se encarga de gestionar 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 estar gestionada por Adapty.
Esta configuración solo tiene en cuenta los requisitos de copia de seguridad de Adapty, AppsFlyer y expo-secure-store. Si otras bibliotecas de tu proyecto definen reglas de copia de seguridad personalizadas, tendrás que configurarlas manualmente.