API Pública
Referència completa dels mètodes del SDK orientats al partner. Els mètodes deprecats i de compatibilitat s'ometen intencionadament — consulta els docs interns complets per a aquestes superfícies.
Bootstrap
EixamConnectSdk.bootstrap(...)
Crea el SDK, resol l'entorn seleccionat, valida la config i aplica la sessió signada inicial quan es proporciona.
Retorna: Future<EixamConnectSdk>
Entrades clau: appId, environment, initialSession
El backend del partner posseeix el secret de l'app i signa la sessió. L'app mòbil rep appId, externalUserId i userHash. La mateixa identitat es reutilitza a HTTP i 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òstics
getOperationalDiagnostics()
Retorna l'últim snapshot operacional del runtime per a l'estat de sessió, transport, bridge i rehidratació de SOS.
Retorna: 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()
Emet canvis operacionals després del bootstrap, actualitzacions de sessió, reconnexions i canvis de bridge/runtime.
Retorna: Stream<SdkOperationalDiagnostics>
final sub = sdk.watchOperationalDiagnostics().listen((diagnostics) {
debugPrint('mqtt=${diagnostics.connectionState.name}');
debugPrint('bridge=${diagnostics.bridge.lastDecision}');
});
Cicle de vida del dispositiu
connectDevice(...)
Aparea o reconnecta el dispositiu seleccionat pel partner i retorna l'estat runtime resultant.
Retorna: DeviceStatus
final status = await sdk.connectDevice(pairingCode: '123456');
debugPrint('device=${status.deviceId}');
debugPrint('lifecycle=${status.lifecycleState.name}');
debugPrint('ready=${status.isReadyForSafety}');
getDeviceStatus()
Llegeix l'últim snapshot runtime del dispositiu en caché sense iniciar un nou flux d'aparellament.
Retorna: DeviceStatus
final status = await sdk.getDeviceStatus();
debugPrint('connected=${status.connected}');
debugPrint('lastSeen=${status.lastSeen}');
debugPrint('firmware=${status.firmwareVersion}');
deviceStatusStream
Emet canvis de cicle de vida mentre el dispositiu es connecta, activa, desconnecta o es recupera.
Retorna: Stream<DeviceStatus>
final sub = sdk.deviceStatusStream.listen((status) {
debugPrint('lifecycle=${status.lifecycleState.name}');
debugPrint('connected=${status.connected}');
debugPrint('battery=${status.approximateBatteryPercentage}');
});
getDeviceSosStatus()
Retorna l'estat SOS actual del dispositiu rastrejat pel runtime del SDK.
Retorna: DeviceSosStatus
final status = await sdk.getDeviceSosStatus();
debugPrint('state=${status.state.name}');
debugPrint('event=${status.lastEvent}');
debugPrint('countdown=${status.countdownRemainingSeconds}');
SOS
triggerSos(...)
Crea un incident SOS originat a l'app utilitzant la sessió signada actual i el runtime operacional.
Retorna: SosIncident
final incident = await sdk.triggerSos(
const SosTriggerPayload(
message: 'Need assistance',
triggerSource: 'button_ui',
),
);
debugPrint('incident=${incident.id}');
debugPrint('state=${incident.state.name}');
getCurrentSosIncident()
Retorna l'últim incident SOS actiu o recentment tancat conegut després de la rehidratació del runtime.
Retorna: 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()
Retorna l'estat actual del cicle de vida SOS.
Retorna: Future<SosState>
Valors: idle, sent, acknowledged, cancelRequested, cancelled
final state = await sdk.getSosState();
debugPrint('sosState=${state.name}');
Contactes
listEmergencyContacts()
Carrega els contactes d'emergència sincronitzats amb el backend per a l'usuari signat.
Retorna: Future<List<EmergencyContact>>
final contacts = await sdk.listEmergencyContacts();
for (final contact in contacts) {
debugPrint('${contact.priority}: ${contact.name} ${contact.phone}');
}
createEmergencyContact(...)
Crea un nou contacte d'emergència i retorna el registre desat.
Retorna: 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(...)
Actualitza un contacte existent i retorna el registre desat.
Retorna: 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()
Retorna un snapshot agregat per a ubicació, notificacions, Bluetooth i disponibilitat del servei Bluetooth.
Retorna: PermissionState
final state = await sdk.getPermissionState();
debugPrint('location=${state.location.name}');
debugPrint('notifications=${state.notifications.name}');
debugPrint('bluetoothReady=${state.canUseBluetooth}');
Mode Protecció
La continuïtat en segon pla és significativament major a Android quan el Mode Protecció (servei natiu en primer pla) posseeix el transport BLE. El BLE gestionat únicament per Flutter no garanteix una execució completa en segon pla.
getProtectionStatus()
Retorna l'estat runtime actual per a l'estat armat/degradat/apagat i la propietat nativa del BLE.
Retorna: 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()
Retorna els últims diagnòstics natiu/runtime per a reconnexions, esdeveniments de wake, cues i enrutament de comandes.
Retorna: ProtectionDiagnostics
final diagnostics = await sdk.getProtectionDiagnostics();
debugPrint('wake=${diagnostics.lastWakeReason}');
debugPrint('reconnects=${diagnostics.reconnectAttemptCount}');
debugPrint('lastCommandRoute=${diagnostics.lastCommandRoute}');
Registre de dispositius al backend
listRegisteredDevices()
Retorna els registres de dispositius del backend associats a l'usuari signat.
Retorna: Future<List<BackendRegisteredDevice>>
final devices = await sdk.listRegisteredDevices();
for (final device in devices) {
debugPrint('${device.hardwareId} ${device.firmwareVersion}');
}
:::note Sincronització del dispositiu aparellat
Després d'aparellar/connectar un dispositiu i quan la identitat de la sessió signada està llesta, el SDK pot intentar una sincronització automàtica amb el backend. La sincronització utilitza hardware_id, firmware_version, hardware_model i paired_at, i només és segura quan es pot resoldre un hardware ID canònic compatible amb el backend.
:::
Omès del path de partner
L'API del partner omet intencionadament:
- Mètodes deprecats de compatibilitat mantinguts només per a migració
- Grups de capacitats interns de validació com Guided Rescue Phase 1
- Exemples de control de dispositiu de baix nivell fora del path d'onboarding recomanat