Aller au contenu principal

Changelog

Flutter SDK

Unreleased

These capabilities are available on the agreed SDK revision supplied during partner handoff. They are not part of the older v0.2 Git tag.

Country-aware LoRa radio configuration

Device configuration

  • Added typed per-country radio configuration models and LoraRegionCode diagnostics.
  • Added detection-only checkDeviceCountryConfig(...), status getter/stream, and explicit user-confirmed applyPendingDeviceCountryConfig(...).
  • SDK lifecycle checks detect mismatches after command-capable connection and on throttled resume paths without silently writing or rebooting.
  • Apply rechecks device identity, current region, SOS/PRE-SOS/DMP/Protection safety gates, and active OTA state before writing, rebooting, reconnecting, and verifying.
  • Added DeviceCountryConfigModalHost in eixam_connect_ui for localized confirmation, progress, success, failure, and safe retry UX.
  • Added the LoRa Radio Region integration guide.

Firmware updates

Device lifecycle

  • Added public firmware update APIs for connected-device firmware info, update availability checks, user-confirmed update start, progress streaming, and cancellation.
  • Added controlled release listing and policy support for explicit targets/downgrades while keeping safe production defaults.
  • Firmware update checks expose SDK eligibility blockers such as low device battery, active SOS/PRE-SOS, DMP/protection runtime activity, backgrounded app state, incompatible releases, and missing artifacts.
  • Firmware update progress includes download, verification, transfer, reconnect, installed-version verification, completion, failure, cancellation, and recovery-required states.
  • Added first-upload and transfer-stall watchdogs plus explicit recovery routing when DFU may have left a device in its bootloader.
  • Host apps should never auto-start updates or mark completion from UI alone; completion depends on the SDK update session reaching completed after installed-version verification.
  • Added the Firmware Updates / OTA guide for platform support, prerequisites, cancellation, failure/recovery handling, and host-app UI obligations.

Authoritative SOS capability and lifecycle

SOS

  • Added typed SOS capability get/watch/retry APIs so host apps can gate activation without reconstructing transport readiness.
  • Added authoritative activation/cancellation results and a persisted SosLifecycleSnapshot stream for generation-safe app/device/backend reconciliation.
  • Added current incident progress get/stream APIs backed by realtime state with a public fallback for custom runtimes.
  • Added typed terminal reasons and explicit local-actionability/display-surface fields for external or relay-origin incidents.

Permission UX and account operations

Host integration

  • Added permission disclosure preflight/accept/decline APIs with configurable localized disclosure copy.
  • Added remote SDK user-data erasure with guaranteed SDK-local cleanup for coordinated account deletion.
  • Added authenticated in-app feedback submission using the current Eixam user JWT.

Location authority

Location and telemetry

  • Added a single Location Authority model for SOS, PRE-SOS/DMP, telemetry publishing, Android foreground/Protection Mode handoff, and UI preview.
  • Fresh, valid connected-device GPS is preferred over phone GPS; phone location is the fallback when no valid connected-device GPS is available.
  • Remote/relay LoRa SOS keeps the remote payload location authoritative only for that remote event.
  • Cached fallback and backend incident snapshot locations are documented as display-only, not backend-authoritative for new SOS or telemetry publishing.
  • Backend telemetry publishing now uses the SDK resolver, and raw telemetry guardrails document which sources must not be republished manually.

Android

  • Documented foreground/Protection Mode handoff guardrails: TTL, finite in-range coordinates, 0,0 rejection, backend-authoritative sources only, connected-device or phone source only, and stale/incompatible decoder rejection.

BLE

  • Documented the BLE TEL/SOS geoMeta_v2 decoder correction at integration level.

OS-level SOS widget support

SOS

  • Added an optional OS-level SOS widget integration model for Android and iOS host apps.
  • Added handleOsSosWidgetActivation(...) for validated widget activations that enter the existing SDK-owned SOS/PRE-SOS lifecycle.
  • Added public OS widget activation/result model concepts, including platform, confirmation mode, action id, nonce, timestamp, and activation outcomes.
  • Widget-originated activations use the os_widget trigger source when they become SDK SOS payloads.
  • Widgets are documented as guarded app entry points, not independent backend, BLE/device, cancellation, resolution, or emergency-service runtimes.

v0.2.0 — Protection notifications and SOS runtime refinement

Bootstrap

  • EixamBootstrapConfig.notificationTexts is now required. Every value must be non-empty.
  • Native foreground services and Protection Mode notifications use host-provided localized copy instead of SDK hardcoded English text.
  • enableBackgroundTelemetry(...) falls back to protectionActiveTitle and protectionActiveBody when no explicit notification copy is passed.

Protection Mode

  • Android Protection Mode persists notification copy in the native runtime store so foreground-service and SOS lifecycle notifications remain available while Flutter is backgrounded.
  • EixamNotificationPolicy.hostAppManaged continues to let the host app own SOS lifecycle notifications; foreground-service copy is still supplied through EixamNotificationTexts.
  • Protection diagnostics include richer native runtime, queue, backend handoff, reconnect, and command state for support tooling.

Device SOS / relay runtime

  • BLE SOS notifications are processed asynchronously with guarded error reporting.
  • Unknown-origin SOS packets can refresh runtime identity and be reclassified before backend handoff.
  • Device-originated active SOS packets can be held in pre-SOS until the countdown completes, avoiding premature promotion during pre-SOS overlap.

v0.1.0 — Initial Partner Release

Bootstrap & Session

  • EixamConnectSdk.bootstrap(...) — creates SDK, resolves environment, applies signed session
  • EixamSession.signed(...) — HMAC-SHA256 signed session; identity reused across HTTP and MQTT
  • setSession(...) / refreshCanonicalIdentity() — explicit session updates on login/logout; refreshCanonicalIdentity() rehydrates identity from GET /v1/sdk/me

SDK profile (HTTP)

  • fetchSdkUserProfile() — load profile via GET /v1/sdk/me
  • updateSdkUserProfile(SdkUserProfileUpdate) — partial update via PUT /v1/sdk/me
  • ProfileHttpException — typed HTTP failures with optional API error envelope and fieldHints for form mapping

Device Lifecycle

  • connectDevice(pairingCode:) — pairs or reconnects a device via BLE
  • getDeviceStatus() / deviceStatusStream — runtime device state and lifecycle changes
  • getDeviceSosStatus() — device-side SOS state tracked by the SDK runtime
  • disconnectDevice() / preferredDevice / refreshDeviceStatus() — explicit runtime state management
  • Device control APIs — typed BLE commands for notification/SOS volume, reboot, shutdown, INET state, position confirmation, runtime status, and relay ACK

SOS

  • triggerSos(...) — app-originated SOS with optional position snapshot and device context
  • getCurrentSosIncident() / getSosState() — active incident and lifecycle state after rehydration
  • startPreSos(...) / confirmPreSos(...) / cancelPreSos() — public pre-SOS countdown flow
  • cancelSos() / resolveSos() / acknowledgeSosSummary() — public SOS terminal-state operations
  • currentSosStateStream / lastSosEventStream — public SOS state/event streams
  • listSosHistory(...) — paginated SOS history

Emergency Contacts

  • listEmergencyContacts() / watchEmergencyContacts() — backend-synced contact list
  • createEmergencyContact(...) / updateEmergencyContact(...) / deleteEmergencyContact(...) — CRUD with optional language (ISO 639-1) on create
  • reorderEmergencyContacts(List<String> orderedContactIds)PUT /v1/sdk/contacts/reorder; ids must be exhaustive and unique
  • ContactsHttpException — typed HTTP failures for contact routes (400 / 401 / 404 mapping)

Permissions

  • requestLocationPermission() / requestNotificationPermission() / requestBluetoothPermission()
  • getPermissionState() — aggregated permission snapshot for host UI gating

Protection Mode (Android)

  • getProtectionStatus() / getProtectionDiagnostics() — native foreground service BLE ownership and diagnostics
  • evaluateProtectionReadiness() / enterProtectionMode() / exitProtectionMode() — explicit arming lifecycle
  • watchProtectionStatus() / watchProtectionDiagnostics() / rehydrateProtectionState() / flushProtectionQueues() — runtime continuity and queue visibility

Diagnostics

  • getOperationalDiagnostics() / watchOperationalDiagnostics() — full runtime snapshot: session, MQTT, bridge, SOS rehydration
  • Background telemetry diagnostics and controls: enableBackgroundTelemetry() / disableBackgroundTelemetry()

Backend Device Registry

  • listRegisteredDevices() / upsertRegisteredDevice(...) / deleteRegisteredDevice(...) — backend records associated with the signed user
  • Automatic sync on pairing when canonical hardware ID is available

Additional runtime surfaces

  • Notifications — initializeNotifications(), showLocalNotification(...), pending notification intents, and BLE notification navigation requests
  • Tracking and telemetry — tracking lifecycle, position streams, and publishTelemetry(...)
  • Death Man Protocol — schedule, check-in, cancel, and plan stream APIs
  • Realtime events — connection state, last event, and raw realtime event streams

Environments

  • EixamEnvironment.sandbox / EixamEnvironment.production / EixamEnvironment.custom
  • EixamCustomEndpoints(apiBaseUrl:, mqttUrl:) for custom deployments