Saltar al contenido principal
Version: Next

API Pública

Referencia completa de los métodos del SDK orientados al partner. Los métodos deprecados y de compatibilidad se omiten intencionadamente — consulta los docs internos completos para esas superficies.

Bootstrap

EixamConnectSdk.bootstrap(...)

Crea el SDK, resuelve el entorno seleccionado, valida la config y aplica la sesión firmada inicial cuando se proporciona.

Devuelve: Future<EixamConnectSdk>

Entradas clave: appId, environment, initialSession

info

El backend del partner posee el secreto de la app y firma la sesión. La app móvil recibe appId, externalUserId y userHash. La misma identidad se reutiliza en HTTP y MQTT.

final sdk = await EixamConnectSdk.bootstrap(
const EixamBootstrapConfig(
appId: 'partner-app',
environment: EixamEnvironment.sandbox,
initialSession: EixamSession.signed(
appId: 'partner-app',
externalUserId: 'partner-user-123',
userHash: 'signed-session-hash',
),
),
);

final session = await sdk.getCurrentSession();
debugPrint('session user=${session?.externalUserId}');

Diagnósticos

getOperationalDiagnostics()

Devuelve el último snapshot operacional del runtime para el estado de sesión, transporte, bridge y rehidratación de SOS.

Devuelve: SdkOperationalDiagnostics

final diagnostics = await sdk.getOperationalDiagnostics();
debugPrint('mqtt=${diagnostics.connectionState.name}');
debugPrint('telTopic=${diagnostics.telemetryPublishTopic}');
debugPrint('lastDecision=${diagnostics.bridge.lastDecision}');
debugPrint('pendingSos=${diagnostics.bridge.pendingSos != null}');

watchOperationalDiagnostics()

Emite cambios operacionales tras bootstrap, actualizaciones de sesión, reconexiones y cambios de bridge/runtime.

Devuelve: Stream<SdkOperationalDiagnostics>

final sub = sdk.watchOperationalDiagnostics().listen((diagnostics) {
debugPrint('mqtt=${diagnostics.connectionState.name}');
debugPrint('bridge=${diagnostics.bridge.lastDecision}');
});

Ciclo de vida del dispositivo

connectDevice(...)

Empareja o reconecta el dispositivo seleccionado por el partner y devuelve el estado runtime resultante.

Devuelve: DeviceStatus

final status = await sdk.connectDevice(pairingCode: '123456');
debugPrint('device=${status.deviceId}');
debugPrint('lifecycle=${status.lifecycleState.name}');
debugPrint('ready=${status.isReadyForSafety}');

getDeviceStatus()

Lee el último snapshot runtime del dispositivo en caché sin iniciar un nuevo flujo de emparejamiento.

Devuelve: DeviceStatus

final status = await sdk.getDeviceStatus();
debugPrint('connected=${status.connected}');
debugPrint('lastSeen=${status.lastSeen}');
debugPrint('firmware=${status.firmwareVersion}');

deviceStatusStream

Emite cambios de ciclo de vida mientras el dispositivo se conecta, activa, desconecta o se recupera.

Devuelve: Stream<DeviceStatus>

final sub = sdk.deviceStatusStream.listen((status) {
debugPrint('lifecycle=${status.lifecycleState.name}');
debugPrint('connected=${status.connected}');
debugPrint('battery=${status.approximateBatteryPercentage}');
});

getDeviceSosStatus()

Devuelve el estado SOS actual del dispositivo rastreado por el runtime del SDK.

Devuelve: DeviceSosStatus

final status = await sdk.getDeviceSosStatus();
debugPrint('state=${status.state.name}');
debugPrint('event=${status.lastEvent}');
debugPrint('countdown=${status.countdownRemainingSeconds}');

SOS

triggerSos(...)

Crea un incidente SOS originado en la app usando la sesión firmada actual y el runtime operacional.

Devuelve: SosIncident

final incident = await sdk.triggerSos(
const SosTriggerPayload(
message: 'Need assistance',
triggerSource: 'button_ui',
),
);

debugPrint('incident=${incident.id}');
debugPrint('state=${incident.state.name}');

getCurrentSosIncident()

Devuelve el último incidente SOS activo o recientemente cerrado conocido tras la rehidratación del runtime.

Devuelve: Future<SosIncident?>

final incident = await sdk.getCurrentSosIncident();
if (incident != null) {
debugPrint('incident=${incident.id}');
debugPrint('state=${incident.state.name}');
debugPrint('hasPosition=${incident.positionSnapshot != null}');
}

getSosState()

Devuelve el estado actual del ciclo de vida SOS.

Devuelve: Future<SosState>

Valores: idle, sent, acknowledged, cancelRequested, cancelled

final state = await sdk.getSosState();
debugPrint('sosState=${state.name}');

Contactos

listEmergencyContacts()

Carga los contactos de emergencia sincronizados con el backend para el usuario firmado.

Devuelve: Future<List<EmergencyContact>>

final contacts = await sdk.listEmergencyContacts();
for (final contact in contacts) {
debugPrint('${contact.priority}: ${contact.name} ${contact.phone}');
}

createEmergencyContact(...)

Crea un nuevo contacto de emergencia y devuelve el registro guardado.

Devuelve: EmergencyContact

final contact = await sdk.createEmergencyContact(
name: 'Mountain Rescue Desk',
phone: '+34600000000',
email: 'rescue@example.com',
priority: 1,
);

debugPrint('contact=${contact.id}');
debugPrint('priority=${contact.priority}');

updateEmergencyContact(...)

Actualiza un contacto existente y devuelve el registro guardado.

Devuelve: EmergencyContact

final current = (await sdk.listEmergencyContacts()).first;
final updated = await sdk.updateEmergencyContact(
current.copyWith(name: 'Mountain Rescue 24/7'),
);

debugPrint('contact=${updated.id}');
debugPrint('name=${updated.name}');
debugPrint('updatedAt=${updated.updatedAt}');

Permisos

getPermissionState()

Devuelve un snapshot agregado para ubicación, notificaciones, Bluetooth y disponibilidad del servicio Bluetooth.

Devuelve: PermissionState

final state = await sdk.getPermissionState();
debugPrint('location=${state.location.name}');
debugPrint('notifications=${state.notifications.name}');
debugPrint('bluetoothReady=${state.canUseBluetooth}');

Modo Protección

nota

La continuidad en segundo plano es significativamente mayor en Android cuando el Modo Protección (servicio nativo en primer plano) posee el transporte BLE. El BLE gestionado únicamente por Flutter no garantiza una ejecución completa en segundo plano.

getProtectionStatus()

Devuelve el estado runtime actual para el estado armado/degradado/apagado y la propiedad nativa del BLE.

Devuelve: ProtectionStatus

final status = await sdk.getProtectionStatus();
debugPrint('mode=${status.modeState.name}');
debugPrint('runtime=${status.runtimeState.name}');
debugPrint('owner=${status.bleOwner.name}');
debugPrint('protectedDevice=${status.protectedDeviceId}');

getProtectionDiagnostics()

Devuelve los últimos diagnósticos nativo/runtime para reconexiones, eventos de wake, colas y enrutamiento de comandos.

Devuelve: ProtectionDiagnostics

final diagnostics = await sdk.getProtectionDiagnostics();
debugPrint('wake=${diagnostics.lastWakeReason}');
debugPrint('reconnects=${diagnostics.reconnectAttemptCount}');
debugPrint('lastCommandRoute=${diagnostics.lastCommandRoute}');

Registro de dispositivos en backend

listRegisteredDevices()

Devuelve los registros de dispositivos del backend asociados al usuario firmado.

Devuelve: Future<List<BackendRegisteredDevice>>

final devices = await sdk.listRegisteredDevices();
for (final device in devices) {
debugPrint('${device.hardwareId} ${device.firmwareVersion}');
}

:::note Sincronización del dispositivo emparejado Tras emparejar/conectar un dispositivo y cuando la identidad de la sesión firmada está lista, el SDK puede intentar una sincronización automática con el backend. La sincronización utiliza hardware_id, firmware_version, hardware_model y paired_at, y solo es segura cuando se puede resolver un hardware ID canónico compatible con el backend. :::

Omitido del path de partner

La API del partner omite intencionadamente:

  • Métodos deprecados de compatibilidad mantenidos solo para migración
  • Grupos de capacidades internos de validación como Guided Rescue Phase 1
  • Ejemplos de control de dispositivo de bajo nivel fuera del path de onboarding recomendado