4 * MeasurementManager usage example for Swift
5 * Demonstrates working with sensor and signal measurements, generators, and measurement management
7class MeasurementManagerExample: NSObject {
8 private var sdk: NavigineSdk?
9 private var locationManager: LocationManager?
10 private var measurementManager: MeasurementManager?
11 private var measurementListener: MeasurementListener?
16 setupMeasurementListener()
20 * Initialize SDK and get managers
22 private func initializeSdk() {
24 // [swift_NavigineSdk_getInstance]
26 sdk = NavigineSdk.getInstance()
27 // [swift_NavigineSdk_getInstance]
29 // [swift_NavigineSdk_setUserHash]
31 sdk?.setUserHash("USER-HASH-HERE")
32 // [swift_NavigineSdk_setUserHash]
34 // [swift_NavigineSdk_setServer]
35 // Set server URL (optional)
36 sdk?.setServer("https://custom.navigine.com")
37 // [swift_NavigineSdk_setServer]
39 // [swift_NavigineSdk_getLocationManager]
40 // Get LocationManager for working with locations
41 locationManager = sdk?.getLocationManager()
42 // [swift_NavigineSdk_getLocationManager]
44 // [swift_NavigineSdk_getMeasurementManager]
45 // Get MeasurementManager for working with measurements
46 measurementManager = sdk?.getMeasurementManager(locationManager)
47 // [swift_NavigineSdk_getMeasurementManager]
49 // [swift_MeasurementManager_setPublishIntervalMs]
50 // Optional: interval between measurement batches sent to listeners (ms)
51 measurementManager?.setPublishIntervalMs(1000)
52 // [swift_MeasurementManager_setPublishIntervalMs]
54 if let locationManager = locationManager, let measurementManager = measurementManager {
55 print("LocationManager and MeasurementManager successfully initialized")
58 print("Error initializing SDK: \(error)")
63 * Setup measurement listener
65 private func setupMeasurementListener() {
66 measurementListener = MeasurementListenerImpl(example: self)
70 * Demonstrate MeasurementManager methods
72 func demonstrateMeasurementManagerMethods() {
73 guard let manager = measurementManager, let listener = measurementListener else {
74 print("MeasurementManager not initialized")
78 // [swift_MeasurementManager_addMeasurementListener]
79 // Add measurement listener
80 manager.addMeasurementListener(listener)
81 print("Added measurement listener")
82 // [swift_MeasurementManager_addMeasurementListener]
84 // Demonstrate beacon generators
85 demonstrateBeaconGenerators()
87 // Demonstrate Eddystone generators
88 demonstrateEddystoneGenerators()
90 // Demonstrate Wi-Fi generators
91 demonstrateWifiGenerators()
93 // Demonstrate Wi-Fi RTT generators
94 demonstrateWifiRttGenerators()
96 // Demonstrate location generators
97 demonstrateLocationGenerators()
99 // Simulate some time passing for measurements
100 DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
101 // [swift_MeasurementManager_removeMeasurementListener]
102 // Remove measurement listener
103 manager.removeMeasurementListener(listener)
104 print("Removed measurement listener")
105 // [swift_MeasurementManager_removeMeasurementListener]
110 * Demonstrate beacon generators
112 private func demonstrateBeaconGenerators() {
113 guard let manager = measurementManager else { return }
115 // [swift_MeasurementManager_addBeaconGenerator]
116 // Add beacon generator
117 let beaconId = manager.addBeaconGenerator(
118 uuid: "12345678-1234-1234-1234-123456789012",
126 print("Added beacon generator with ID: \(beaconId)")
127 // [swift_MeasurementManager_addBeaconGenerator]
129 // [swift_MeasurementManager_removeBleGenerator]
130 // Remove specific BLE generator
131 manager.removeBleGenerator(id: beaconId)
132 print("Removed BLE generator: \(beaconId)")
133 // [swift_MeasurementManager_removeBleGenerator]
135 // [swift_MeasurementManager_removeBleGenerators]
136 // Remove all BLE generators
137 manager.removeBleGenerators()
138 print("Removed all BLE generators")
139 // [swift_MeasurementManager_removeBleGenerators]
143 * Demonstrate Eddystone generators
145 private func demonstrateEddystoneGenerators() {
146 guard let manager = measurementManager else { return }
148 // [swift_MeasurementManager_addEddystoneGenerator]
149 // Add Eddystone generator
150 let eddystoneId = manager.addEddystoneGenerator(
151 namespaceId: "12345678901234567890",
152 instanceId: "1234567890123456",
158 print("Added Eddystone generator with ID: \(eddystoneId)")
159 // [swift_MeasurementManager_addEddystoneGenerator]
161 // Remove Eddystone generator (uses same method as BLE)
162 manager.removeBleGenerator(id: eddystoneId)
163 print("Removed Eddystone generator: \(eddystoneId)")
167 * Demonstrate Wi-Fi generators
169 private func demonstrateWifiGenerators() {
170 guard let manager = measurementManager else { return }
172 // [swift_MeasurementManager_addWifiGenerator]
173 // Add Wi-Fi generator
174 let wifiId = manager.addWifiGenerator(
175 mac: "AA:BB:CC:DD:EE:FF",
180 print("Added Wi-Fi generator with ID: \(wifiId)")
181 // [swift_MeasurementManager_addWifiGenerator]
183 // [swift_MeasurementManager_removeWifiGenerator]
184 // Remove specific Wi-Fi generator
185 manager.removeWifiGenerator(id: wifiId)
186 print("Removed Wi-Fi generator: \(wifiId)")
187 // [swift_MeasurementManager_removeWifiGenerator]
189 // [swift_MeasurementManager_removeWifiGenerators]
190 // Remove all Wi-Fi generators
191 manager.removeWifiGenerators()
192 print("Removed all Wi-Fi generators")
193 // [swift_MeasurementManager_removeWifiGenerators]
197 * Demonstrate Wi-Fi RTT generators
199 private func demonstrateWifiRttGenerators() {
200 guard let manager = measurementManager else { return }
202 // [swift_MeasurementManager_addWifiRttGenerator]
203 // Add Wi-Fi RTT generator
204 let wifiRttId = manager.addWifiRttGenerator(
205 mac: "11:22:33:44:55:66",
214 print("Added Wi-Fi RTT generator with ID: \(wifiRttId)")
215 // [swift_MeasurementManager_addWifiRttGenerator]
217 // [swift_MeasurementManager_removeWifiRttGenerator]
218 // Remove specific Wi-Fi RTT generator
219 manager.removeWifiRttGenerator(hash: wifiRttId)
220 print("Removed Wi-Fi RTT generator: \(wifiRttId)")
221 // [swift_MeasurementManager_removeWifiRttGenerator]
223 // [swift_MeasurementManager_removeWifiRttGenerators]
224 // Remove all Wi-Fi RTT generators
225 manager.removeWifiRttGenerators()
226 print("Removed all Wi-Fi RTT generators")
227 // [swift_MeasurementManager_removeWifiRttGenerators]
231 * Demonstrate location generators
233 private func demonstrateLocationGenerators() {
234 guard let manager = measurementManager else { return }
236 // [swift_MeasurementManager_addLocationGenerator]
237 // Add location generator
238 let locationId = manager.addLocationGenerator(
247 print("Added location generator with ID: \(locationId)")
248 // [swift_MeasurementManager_addLocationGenerator]
250 // [swift_MeasurementManager_removeLocationGenerator]
251 // Remove specific location generator
252 manager.removeLocationGenerator(id: locationId)
253 print("Removed location generator: \(locationId)")
254 // [swift_MeasurementManager_removeLocationGenerator]
256 // [swift_MeasurementManager_removeLocationGenerators]
257 // Remove all location generators
258 manager.removeLocationGenerators()
259 print("Removed all location generators")
260 // [swift_MeasurementManager_removeLocationGenerators]
264 * Demonstrate sensor measurements
266 func demonstrateSensorMeasurements(_ sensors: [SensorType: SensorMeasurement]) {
267 sensors.forEach { (sensorType, measurement) in
268 // [swift_SensorMeasurement_getType]
270 let type = measurement.type
271 print("Sensor type: \(type)")
272 // [swift_SensorMeasurement_getType]
274 // [swift_SensorMeasurement_getValues]
276 let values = measurement.values
277 print("Sensor values - X: \(values.x), Y: \(values.y), Z: \(values.z)")
278 // [swift_SensorMeasurement_getValues]
280 // [swift_SensorMeasurement_getTime]
281 // Get measurement timestamp
282 let time = measurement.time
283 print("Measurement time: \(time) ms")
284 // [swift_SensorMeasurement_getTime]
286 // Demonstrate Vector3d properties
287 demonstrateVector3d(values)
292 * Demonstrate signal measurements
294 func demonstrateSignalMeasurements(_ signals: [String: SignalMeasurement]) {
295 signals.forEach { (signalId, measurement) in
296 // [swift_SignalMeasurement_getType]
298 let type = measurement.type
299 print("Signal type: \(type)")
300 // [swift_SignalMeasurement_getType]
302 // [swift_SignalMeasurement_getId]
303 // Get signal identifier
304 let id = measurement.id
305 print("Signal ID: \(id)")
306 // [swift_SignalMeasurement_getId]
308 // [swift_SignalMeasurement_getRssi]
310 let rssi = measurement.rssi
311 print("Signal RSSI: \(rssi) dBm")
312 // [swift_SignalMeasurement_getRssi]
314 // [swift_SignalMeasurement_getDistance]
315 // Get estimated distance
316 let distance = measurement.distance
317 print("Signal distance: \(distance) meters")
318 // [swift_SignalMeasurement_getDistance]
320 // [swift_SignalMeasurement_getTime]
321 // Get measurement timestamp
322 let time = measurement.time
323 print("Signal measurement time: \(time) ms")
324 // [swift_SignalMeasurement_getTime]
329 * Demonstrate Vector3d properties
331 private func demonstrateVector3d(_ vector: Vector3d) {
332 // [swift_Vector3d_getX]
335 print("Vector X: \(x)")
336 // [swift_Vector3d_getX]
338 // [swift_Vector3d_getY]
341 print("Vector Y: \(y)")
342 // [swift_Vector3d_getY]
344 // [swift_Vector3d_getZ]
347 print("Vector Z: \(z)")
348 // [swift_Vector3d_getZ]
352 * Main demonstration method
355 print("=== MeasurementManager Example ===")
357 demonstrateMeasurementManagerMethods()
359 // Wait a bit for measurements
360 DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
361 print("=== Example completed ===")
367 * MeasurementListener implementation
369class MeasurementListenerImpl: NSObject, MeasurementListener {
370 private weak var example: MeasurementManagerExample?
372 init(example: MeasurementManagerExample) {
373 self.example = example
377 // [swift_MeasurementListener_onSensorMeasurementDetected]
378 func onSensorMeasurementDetected(_ sensors: [SensorType: SensorMeasurement]) {
379 print("Sensor measurements detected")
380 example?.demonstrateSensorMeasurements(sensors)
382 // [swift_MeasurementListener_onSensorMeasurementDetected]
384 // [swift_MeasurementListener_onSignalMeasurementDetected]
385 func onSignalMeasurementDetected(_ signals: [String: SignalMeasurement]) {
386 print("Signal measurements detected")
387 example?.demonstrateSignalMeasurements(signals)
389 // [swift_MeasurementListener_onSignalMeasurementDetected]
393 * Function to run the example
396 let example = MeasurementManagerExample()
399 // Keep the app running for a while to see the output
400 RunLoop.main.run(until: Date().addingTimeInterval(10.0))