El SDK de Applivery es una librería ligera para iOS y Android que añade gestión de actualizaciones OTA, actualizaciones forzadas, informes de feedback y vinculación de usuarios directamente en tu App. Está diseñado para Builds de distribución interna y beta — no para lanzamientos de producción en la App Store o Google Play.
El SDK se integra con unas pocas líneas de código y no requiere que tus usuarios finales tengan cuenta en Applivery.
El SDK actualiza siempre al Build más reciente disponible para la App, haciendo coincidir únicamente el bundle ID o el package name. No respeta los filtros de Publicación, ni grupos ni audiencias, ya que en el momento de actualizar no se puede identificar la Publicación desde la que se descargó originalmente un Build. Si necesitas aislar las actualizaciones por flavor o por funcionalidad, crea una app de Applivery independiente para cada variante, con una sola Publicación cada una.
Funcionalidades
Versión actual: 4.5.4
Versión mínima de iOS: 15.0
Lenguaje: Swift
Distribución: Swift Package Manager (recomendado), CocoaPods (obsoleto)
Repositorio: applivery/applivery-ios-sdk
Instalación
Swift Package Manager (recomendado)
En Xcode, ve a File → Add Package Dependencies e introduce:
https://github.com/applivery/applivery-ios-sdk.git
Establece la regla de dependencia en Up to next major version (4.0.0 < 5.0.0).
Se te pedirá elegir entre dos targets:
| Target | Cuándo usarlo |
|---|---|
Applivery |
Úsalo cuando la App sea estrictamente interna y nunca se vaya a enviar a la App Store. Framework estático. |
AppliveryDynamic |
Úsalo cuando distribuyas internamente con Applivery pero también publiques en la App Store. El framework se puede excluir en tiempo de compilación para los esquemas de App Store. |
Envíos a la App Store: incluir el SDK de Applivery en un build de App Store no está permitido y tu envío puede ser rechazado. Usa AppliveryDynamic y exclúyelo de la configuración de build de App Store — consulta Excluir condicionalmente el SDK de iOS de Applivery para las instrucciones paso a paso.
CocoaPods (obsoleto)
pod 'Applivery', '~> 4.5'
Configuración inicial
Inicializa el SDK al principio del ciclo de vida de tu App, normalmente en AppDelegate o SceneDelegate:
Swift
import Applivery
let applivery = AppliverySDK.shared
applivery.start(token: "YOUR_APP_TOKEN", tenant: "YOUR_TENANT")
Objective-C
@import Applivery;
AppliverySDK *applivery = [AppliverySDK shared];
[applivery startWithToken:@"YOUR_APP_TOKEN" tenant:@"YOUR_TENANT"];
El parámetro tenant es opcional. Si lo omites, el SDK usa el host por defecto de Applivery. Tu App Token está disponible en Ajustes de la App → API Tokens, en el panel de Applivery.
Configuración
Pasa un objeto AppliveryConfiguration a start() para personalizar el comportamiento del SDK:
Swift
import Applivery
let config = AppliveryConfiguration(
postponedTimeFrames: [3600, 86400], // Opciones de aplazamiento en segundos que se muestran al usuario cuando hay una actualización
enforceAuthentication: true // Exige que el usuario inicie sesión antes de usar el SDK
)
AppliverySDK.shared.start(
token: "YOUR_APP_TOKEN",
tenant: "YOUR_TENANT",
configuration: config,
skipUpdateCheck: false
)
Objective-C
NSArray<NSNumber *> *timeFrames = @[@3600, @86400];
AppliveryConfiguration *config = [[AppliveryConfiguration alloc]
initWithPostponedTimeFramesNSNumber:timeFrames
enforceAuthentication:YES];
| Propiedad | Tipo | Descripción |
|---|---|---|
postponedTimeFrames |
[TimeInterval] |
Intervalos de tiempo en segundos que se muestran como opciones de "recordármelo más tarde" en el diálogo de actualización. Máximo 3 opciones. |
enforceAuthentication |
Bool |
Si es true, los usuarios tienen que iniciar sesión en Applivery antes de poder usar la App. Por defecto: false. |
Métodos principales de la API
| Método | Descripción |
|---|---|
start(token:tenant:configuration:skipUpdateCheck:) |
Inicializa el SDK. Llámalo una sola vez al arrancar la app. |
checkForUpdates(forceUpdate:) |
Comprueba si hay un build más reciente y propone al usuario actualizar. Pasa forceUpdate: true para ignorar cualquier aplazamiento. |
isUpToDate() -> Bool |
Devuelve true si el número de build actual coincide con el último disponible. No respeta los filtros de Publicación. |
update(onDownload:) |
Descarga e instala el último Build de inmediato. |
setCheckForUpdatesBackground(_ enabled: Bool) |
Comprueba automáticamente si hay actualizaciones cuando la App vuelve de segundo plano. |
feedbackEvent() |
Muestra la interfaz de feedback de forma programática (por ejemplo, al agitar el dispositivo). |
enableScreenshotFeedback() / disableScreenshotFeedback() |
Activa o desactiva la detección de capturas de pantalla para lanzar el feedback. |
bindUser(email:firstName:lastName:tags:onComplete:) |
Asocia una identidad de usuario con la sesión actual, para analítica y seguimiento del feedback. |
unbindUser(onComplete:) |
Elimina el usuario vinculado actualmente. |
getUser(onSuccess:) |
Devuelve el perfil del usuario vinculado como un diccionario. |
handleRedirectURL(url:) |
Gestiona las URLs de redirección de autenticación SAML. Llámalo desde AppDelegate o SceneDelegate. |
setLogHandler(_ handler:) |
Define un manejador de logs propio para capturar o redirigir los logs de Applivery. |
Personalización
Colores de la interfaz
AppliverySDK.shared.palette = Palette(
primaryColor: .orange,
secondaryColor: .white,
primaryFontColor: .white,
secondaryFontColor: .black,
screenshotBrushColor: .green
)
Literales de texto — traduce o adapta a tu marca los mensajes del SDK:
AppliverySDK.shared.textLiterals = TextLiterals(
appName: "MyApp",
otaUpdateMessage: "A new version is available. Update now?",
forceUpdateMessage: "This version is no longer supported. Please update to continue."
)
Registro de logs
applivery.logLevel = .info // .none | .error | .info | .debug
| Nivel | Recomendado para |
|---|---|
.none |
Producción (por defecto) |
.error |
Desarrollo |
.info |
Probar la integración del SDK |
.debug |
Depurar las peticiones y respuestas del SDK |
Compatibilidad con Swift y Xcode
| Versión del SDK | Xcode | Swift |
|---|---|---|
| v4.0+ | 13.x+ | 5.x |
| v3.4 | 13.x | 5.x |
| v3.2 | 12.x | 5.x |
| v2.7.x | 9.x – 10.x | 4.0, 4.2 |
Versión actual: 5.0.0
Versión mínima de Android: Android 7.0 (API level 24)
Lenguaje: Kotlin
Distribución: Maven Central
Repositorio: applivery/applivery-android-sdk
Instalación
Añade la dependencia al build.gradle de tu App. El SDK está pensado para Builds que no son de producción:
// Usa debugImplementation para que Applivery solo se ejecute en builds de debug o de testing
debugImplementation("com.applivery:applivery-sdk:${latestVersion}")
Artefacto no-op para Builds de release
Para no tener que montar una configuración compleja de source sets que excluya el SDK de los Builds de release, usa el artefacto no-op. Expone la misma API pública que el SDK completo, pero no hace nada en tiempo de ejecución:
releaseImplementation("com.applivery:applivery-sdk-no-op:${latestVersion}")
Así puedes llamar a los métodos del SDK de Applivery desde cualquier punto de tu código sin que afecte a los Builds de release.
Configuración inicial
Inicializa el SDK en el método Application.onCreate():
import com.applivery.android.sdk.Applivery
import com.applivery.android.sdk.start
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
Applivery.start(APPLIVERY_TOKEN)
// Para instancias privadas de Applivery, pasa también el tenant:
// Applivery.start(APPLIVERY_TOKEN, TENANT)
}
}
En proyectos Java (versión 4.0.0 o superior), usa la clase AppliveryInterop para acceder a la funcionalidad del SDK.
Tu App Token está disponible en Ajustes de la App → API Tokens, en el panel de Applivery.
Configuración
Pasa un objeto Configuration a Applivery.start() para personalizar el comportamiento:
val configuration = Configuration(
postponeDurations = listOf(2.hours, 30.minutes, 5.minutes),
enforceAuthentication = false,
downloadAction = BuildDownloadAction.IMMEDIATE
)
Applivery.start(APPLIVERY_TOKEN, configuration = configuration)
| Propiedad | Tipo | Descripción |
|---|---|---|
postponeDurations |
List<Duration> |
Opciones que se muestran al usuario para aplazar una actualización disponible. Máximo 3 opciones. |
enforceAuthentication |
Boolean |
Si es true, los usuarios tienen que iniciar sesión antes de usar el SDK. Por defecto: false. |
downloadAction |
BuildDownloadAction |
IMMEDIATE instala la actualización en cuanto termina la descarga. DEFERRED muestra una notificación y deja que el usuario decida cuándo instalarla. |
Gestión de actualizaciones
// Comprobar actualizaciones manualmente
Applivery.getInstance().checkForUpdates()
// Comprobar automáticamente cuando la app vuelve de segundo plano
Applivery.getInstance().setCheckForUpdatesBackground(true)
// Descargar la última actualización sin instalarla de inmediato
val callback = object : DownloadLastUpdateCallback {
override fun onSuccess(update: CachedAppUpdate) {
update.install() // instalar cuando esté listo
}
override fun onError(error: Throwable) { /* gestionar el error */ }
}
Applivery.getInstance().downloadLastUpdate(callback)
// Activar la descarga automática en segundo plano
Applivery.getInstance().enableDownloadLastUpdateBackground(callback)
// Lanzar descarga e instalación inmediatas (sigue el downloadAction configurado)
Applivery.getInstance().update()
enableDownloadLastUpdateBackground y setCheckForUpdatesBackground son mutuamente excluyentes. Activar uno desactiva el otro.
Feedback
// Activar o desactivar el feedback por captura de pantalla
Applivery.getInstance().enableScreenshotFeedback()
Applivery.getInstance().disableScreenshotFeedback()
// Mostrar la interfaz de feedback de forma programática
Applivery.getInstance().feedbackEvent()
Gestión de usuarios
// Vincular un usuario para analítica y seguimiento del feedback
Applivery.getInstance().bindUser(email, firstName, lastName, tags)
// Eliminar el usuario vinculado
Applivery.getInstance().unbindUser()
// Obtener el usuario actual
Applivery.getInstance().getUser(getUserCallback)
Permisos necesarios
El SDK necesita los siguientes permisos en tiempo de ejecución. Solicítalos en tu App antes de usar las funciones que los requieren:
| Permiso | Para qué se usa |
|---|---|
POST_NOTIFICATIONS |
Mostrar notificaciones durante las descargas de actualizaciones y la grabación de pantalla |
READ_MEDIA_IMAGES |
Detección de capturas de pantalla para el feedback (en Android 14+ se requiere acceso completo) |
SYSTEM_ALERT_WINDOW |
Grabación de pantalla para el feedback |
Personalización de la interfaz
Crea un archivo res/values/applivery.xml para sobrescribir los colores y textos por defecto:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="applivery_primary_color">#FF0241E3</color>
<color name="applivery_accent_color">#FF0241E3</color>
<color name="applivery_foreground_color">#FF010258</color>
<string name="appliveryUpdateMsg">A new version is available. Update now?</string>
<string name="appliveryMustUpdateAppLocked">This version is outdated. Please update to continue.</string>
</resources>
Ningún artículo coincide con los filtros actuales.