Apps Móviles

PreLogin es la primera línea de defensa: un conjunto de verificaciones que se disparan apenas se abre la app móvil, antes de que el usuario interactúe con la pantalla de login. Las sesiones comprometidas se marcan (o bloquean) antes de llegar a la autenticación.

Instalación del SDK

Antes de integrar, instala el SDK en Getting Started → Instalar el SDK →

Monitoreo de Seguridad

Inicia el monitoreo RASP continuo en segundo plano usando securityCheckConfig . El callback detectionAction se ejecuta en cada ciclo de escaneo con el resultado agregado.

Dónde inicializar

Android / Flutter: llama esto en Application.onCreate() o State.initState() del widget raíz. iOS / Capacitor iOS: llama esto en AppDelegate.application(_:didFinishLaunchingWithOptions:) o el equivalente en tu framework.

Kotlin
// Application.onCreate()
val smartIDPrevention = SmartID.securityCheckConfig(
    license   = "YOUR_KEY",
    channelId = 1,
    config    = SmartID.Config(
        interval             = 1,
        timeout              = 1,
        permissions          = listOf(SmartID.Permission.CAMERA),
        overlayProtection    = true,
        blockCellphoneScreen = true
    ),
    detectionAction = { detected, categories ->
        if (detected) {
            // block, redirect, or send categories to your backend
        }
    }
)
smartIDPrevention.startSecurityChecks()

Para detener el monitoreo:

Kotlin
// onDestroy() or onStop()
smartIDPrevention.stopSecurityChecks()
Swift
// AppDelegate.application(_:didFinishLaunchingWithOptions:)
SmartID.shared.startLocation()

let smartIDPrevention = SmartID.shared.securityCheckConfig(
    license:   "YOUR_KEY",
    channelId: 1,
    config: SmartID.Config(
        interval:             1,
        timeout:              1,
        permissions:          [.camera],
        overlayProtection:    true,
        blockCellphoneScreen: true
    ),
    detectionAction: { detected, categories in
        if detected {
            // block, redirect, or send categories to your backend
        }
    }
)
smartIDPrevention.startSecurityChecks()

Para detener el monitoreo:

Swift
// applicationWillResignActive or sceneDidEnterBackground
smartIDPrevention.stopSecurityChecks()
Dart
// State.initState()
final _prevention = SmartID.securityCheckConfig(
    license:   'YOUR_KEY',
    channelId: 1,
    config: SmartID.Config(
        interval:             1,
        timeout:              1,
        permissions:          [SmartID.Permission.camera],
        overlayProtection:    true,
        blockCellphoneScreen: true,
    ),
    detectionAction: (detected, categories) {
        if (detected) {
            // block, redirect, or send categories to your backend
        }
    },
);
_prevention.startSecurityChecks()

Para detener el monitoreo:

Dart
// State.dispose()
_prevention.stopSecurityChecks()
TypeScript
import { SmartID } from 'capacitor-smartid';

// iOS only — initialize GPS sensor before monitoring
await SmartID.startLocation();

await SmartID.startSecurityChecks({ license: 'YOUR_KEY', channelId: 1 });

SmartID.addListener('securityReasons', (result) => {
    if (result.reasons.length > 0) {
        // block, redirect, or send result.reasons to your backend
    }
});

// Android only — screen capture protection
await SmartID.startBlockCellphoneScreen({ enableScreen: true, enableApp: true });

// Android only — overlay attack protection
const overlay = await SmartID.enableOverlayProtection();

Para detener el monitoreo:

TypeScript
await SmartID.stopSecurityChecks();
SmartID.removeAllListeners();
Importante — permisos

Solo incluye en permissions los permisos ya declarados en tu AndroidManifest.xml / Info.plist y concedidos por el usuario en runtime. El SDK no los solicitará.

Referencia

securityCheckConfig

Parámetro Tipo Descripción
licenseStringClave de licencia SmartID
channelIdIntIdentificador de canal
configSmartID.ConfigConfiguración del ciclo de escaneo
detectionAction(Boolean, List<String>) -> Unit/(Bool, [String]) -> VoidCallback ejecutado en cada ciclo

detectionAction — parámetros del callback

Parámetro Tipo Descripción
detectedBoolean/Booltrue si algún control RASP fue activado
categoriesList<String>/[String]Nombres de los controles que dispararon

SmartID.Config

Parámetro Tipo Descripción
intervalIntSegundos entre escaneos consecutivos
timeoutIntSegundos máximos por escaneo
permissionsList<Permission>/[Permission]Permisos ya declarados y concedidos
overlayProtectionBoolean/BoolBloquea ataques de overlay mientras el monitoreo está activo
blockCellphoneScreenBoolean/BoolImpide la captura o duplicación de pantalla

SmartID.Permission

Android

ValorPermiso en AndroidManifest
CAMERAandroid.permission.CAMERA
LOCATIONACCESS_FINE_LOCATION
PHONE_STATEREAD_PHONE_STATE
BLUETOOTHBLUETOOTH_CONNECT

iOS

ValorClave en Info.plist
.cameraNSCameraUsageDescription
.locationNSLocationWhenInUseUsageDescription
.motionNSMotionUsageDescription
.bluetoothNSBluetoothAlwaysUsageDescription
Qué hacer al detectar una amenaza

Android/iOS/Flutter: cuando detected = true, el array categories contiene los nombres de los controles RASP que dispararon. Capacitor: result.reasons contiene códigos numéricos de los controles. Opciones comunes: bloquear la pantalla de login, redirigir a un flujo de error, o enviar los datos a tu backend para scoring de riesgo.