Ugrás a fő tartalomra

iOS SDK használat

Inicializálás

Az SDK KMP keretrendszerként kerül felhasználásra iOS-en. Használja a builder mintát egy példány létrehozásához. A build() függvény aszinkron, és DPoP kulcspár generálást (Secure Enclave), token aktiválást és jogosultság-ellenőrzést végez.

import VitaleraSdkCore

let sdk = try await VitaleraSdk.companion.builder()
.clientId(clientId: "your-org-license-key")
.addProvider(providerName: "omron")
.addProvider(providerName: "polar")
.addProvider(providerName: "standard-ble")
.connectedMode(enabled: true)
.build()

Hitelesítési hibák kezelése:

do {
let sdk = try await VitaleraSdk.companion.builder()
.clientId(clientId: "your-org-license-key")
.build()
} catch let error as SdkAuthException {
switch error.errorCode {
case "activation_failed":
showInvalidLicenseError()
case "entitlements_expired":
showConnectToInternetPrompt()
case "no_cache":
showFirstLaunchOfflineError()
default:
showGenericError(error.message)
}
}

Engedélyek

Adja hozzá a szükséges engedélyeket az Info.plist fájlhoz:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>This app uses Bluetooth to connect with medical devices.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>This app uses Bluetooth to communicate with devices.</string>

HealthKit esetén:

<key>NSHealthShareUsageDescription</key>
<string>This app reads health data for monitoring.</string>

Eszközfelderítés

A felderítés Swift AsyncSequence-et használ. Minden felderített eszköz DeviceDescriptor-ként kerül visszaadásra.

let filter = DiscoveryFilter(
providers: nil,
capabilities: [DeviceCapability.bloodPressure],
namePrefix: nil
)

for try await descriptor in sdk.devices.discover(filter: filter, timeoutMs: 15_000) {
print("Found: \(descriptor.name) (\(descriptor.provider))")
}

Szűrési lehetőségek

// Csak Polar eszközök
let polarFilter = DiscoveryFilter(
providers: ["polar"],
capabilities: nil,
namePrefix: nil
)

// Csak pulzusmérők
let hrFilter = DiscoveryFilter(
providers: nil,
capabilities: [DeviceCapability.heartRate],
namePrefix: nil
)

Eszköz csatlakoztatás

Hozzon létre eszközt egy leíróból és csatlakozzon. A connect() függvény aszinkron, konfigurálható időtúllépéssel.

let device = sdk.devices.createDevice(descriptor: descriptor)

// Csatlakozás (aszinkron, időtúllépéssel)
try await device.connect(timeoutMs: 10_000)

Adatgyűjtés

A collect() metódus típusos megfigyelési osztályok AsyncSequence-ét adja vissza.

for try await observation in device.collect() {
if let bp = observation as? BloodPressureObservation {
print("BP: \(bp.systolic)/\(bp.diastolic) mmHg")
if let pulse = bp.pulseRate {
print("Pulse: \(pulse) bpm")
}
} else if let hr = observation as? HeartRateObservation {
print("HR: \(hr.heartRate) bpm")
} else if let temp = observation as? TemperatureObservation {
print("Temp: \(temp.temperature) C")
} else if let weight = observation as? WeightObservation {
print("Weight: \(weight.weight) kg")
} else if let spo2 = observation as? OxygenSaturationObservation {
print("SpO2: \(spo2.spo2)%")
}
}

// Leválasztás befejezéskor
try await device.disconnect()

Csatlakoztatott mód

Ha a csatlakoztatott mód engedélyezve van, keresse ki a betegeket és küldje el a megfigyeléseket:

let patient = try await sdk.connected().resolveMonitored(externalId: "patient-ext-id")

try await sdk.connected().postObservation(
monitoredId: patient.id,
observation: BaseObservation(
observationType: "blood-pressure",
issued: ISO8601DateFormatter().string(from: Date()),
components: [
ObservationComponent(name: "systolic", value: "120", valueUnit: "mmHg"),
ObservationComponent(name: "diastolic", value: "80", valueUnit: "mmHg"),
]
)
)

Hibakezelés

do {
try await device.connect(timeoutMs: 10_000)
for try await obs in device.collect() {
// megfigyelés feldolgozása
}
} catch let error as SdkError {
switch error {
case is SdkError.ConnectionTimeout:
showError("Connection timed out. Move closer to the device.")
case is SdkError.BluetoothDisabled:
showError("Please enable Bluetooth.")
case is SdkError.BluetoothPermissionDenied:
showError("Bluetooth permissions required.")
default:
showError("Device error: \(error.localizedDescription)")
}
}

HealthKit

Olvasás Apple HealthKit-ből (BLE szkennelés nem szükséges):

let descriptor = try await sdk.devices.discover(
filter: DiscoveryFilter(providers: ["apple-healthkit"], capabilities: nil, namePrefix: nil),
timeoutMs: 5_000
).first { _ in true }!

let store = sdk.devices.createDevice(descriptor: descriptor)
try await store.connect()
for try await observation in store.collect() {
// HealthKit megfigyelések feldolgozása
}
try await store.disconnect()

Erőforrás felszabadítás

Mindig hívja meg a close() metódust, ha az SDK-ra már nincs szükség:

sdk.close()