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 if let locationManager = locationManager, let measurementManager = measurementManager {
50 print("LocationManager and MeasurementManager successfully initialized")
53 print("Error initializing SDK: \(error)")
58 * Setup measurement listener
60 private func setupMeasurementListener() {
61 measurementListener = MeasurementListenerImpl(example: self)
65 * Demonstrate MeasurementManager methods
67 func demonstrateMeasurementManagerMethods() {
68 guard let manager = measurementManager, let listener = measurementListener else {
69 print("MeasurementManager not initialized")
73 // [swift_MeasurementManager_addMeasurementListener]
74 // Add measurement listener
75 manager.addMeasurementListener(listener)
76 print("Added measurement listener")
77 // [swift_MeasurementManager_addMeasurementListener]
79 // Demonstrate beacon generators
80 demonstrateBeaconGenerators()
82 // Demonstrate Eddystone generators
83 demonstrateEddystoneGenerators()
85 // Demonstrate Wi-Fi generators
86 demonstrateWifiGenerators()
88 // Demonstrate Wi-Fi RTT generators
89 demonstrateWifiRttGenerators()
91 // Demonstrate location generators
92 demonstrateLocationGenerators()
94 // Simulate some time passing for measurements
95 DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
96 // [swift_MeasurementManager_removeMeasurementListener]
97 // Remove measurement listener
98 manager.removeMeasurementListener(listener)
99 print("Removed measurement listener")
100 // [swift_MeasurementManager_removeMeasurementListener]
105 * Demonstrate beacon generators
107 private func demonstrateBeaconGenerators() {
108 guard let manager = measurementManager else { return }
110 // [swift_MeasurementManager_addBeaconGenerator]
111 // Add beacon generator
112 let beaconId = manager.addBeaconGenerator(
113 uuid: "12345678-1234-1234-1234-123456789012",
121 print("Added beacon generator with ID: \(beaconId)")
122 // [swift_MeasurementManager_addBeaconGenerator]
124 // [swift_MeasurementManager_removeBleGenerator]
125 // Remove specific BLE generator
126 manager.removeBleGenerator(id: beaconId)
127 print("Removed BLE generator: \(beaconId)")
128 // [swift_MeasurementManager_removeBleGenerator]
130 // [swift_MeasurementManager_removeBleGenerators]
131 // Remove all BLE generators
132 manager.removeBleGenerators()
133 print("Removed all BLE generators")
134 // [swift_MeasurementManager_removeBleGenerators]
138 * Demonstrate Eddystone generators
140 private func demonstrateEddystoneGenerators() {
141 guard let manager = measurementManager else { return }
143 // [swift_MeasurementManager_addEddystoneGenerator]
144 // Add Eddystone generator
145 let eddystoneId = manager.addEddystoneGenerator(
146 namespaceId: "12345678901234567890",
147 instanceId: "1234567890123456",
153 print("Added Eddystone generator with ID: \(eddystoneId)")
154 // [swift_MeasurementManager_addEddystoneGenerator]
156 // Remove Eddystone generator (uses same method as BLE)
157 manager.removeBleGenerator(id: eddystoneId)
158 print("Removed Eddystone generator: \(eddystoneId)")
162 * Demonstrate Wi-Fi generators
164 private func demonstrateWifiGenerators() {
165 guard let manager = measurementManager else { return }
167 // [swift_MeasurementManager_addWifiGenerator]
168 // Add Wi-Fi generator
169 let wifiId = manager.addWifiGenerator(
170 mac: "AA:BB:CC:DD:EE:FF",
175 print("Added Wi-Fi generator with ID: \(wifiId)")
176 // [swift_MeasurementManager_addWifiGenerator]
178 // [swift_MeasurementManager_removeWifiGenerator]
179 // Remove specific Wi-Fi generator
180 manager.removeWifiGenerator(id: wifiId)
181 print("Removed Wi-Fi generator: \(wifiId)")
182 // [swift_MeasurementManager_removeWifiGenerator]
184 // [swift_MeasurementManager_removeWifiGenerators]
185 // Remove all Wi-Fi generators
186 manager.removeWifiGenerators()
187 print("Removed all Wi-Fi generators")
188 // [swift_MeasurementManager_removeWifiGenerators]
192 * Demonstrate Wi-Fi RTT generators
194 private func demonstrateWifiRttGenerators() {
195 guard let manager = measurementManager else { return }
197 // [swift_MeasurementManager_addWifiRttGenerator]
198 // Add Wi-Fi RTT generator
199 let wifiRttId = manager.addWifiRttGenerator(
200 mac: "11:22:33:44:55:66",
209 print("Added Wi-Fi RTT generator with ID: \(wifiRttId)")
210 // [swift_MeasurementManager_addWifiRttGenerator]
212 // [swift_MeasurementManager_removeWifiRttGenerator]
213 // Remove specific Wi-Fi RTT generator
214 manager.removeWifiRttGenerator(hash: wifiRttId)
215 print("Removed Wi-Fi RTT generator: \(wifiRttId)")
216 // [swift_MeasurementManager_removeWifiRttGenerator]
218 // [swift_MeasurementManager_removeWifiRttGenerators]
219 // Remove all Wi-Fi RTT generators
220 manager.removeWifiRttGenerators()
221 print("Removed all Wi-Fi RTT generators")
222 // [swift_MeasurementManager_removeWifiRttGenerators]
226 * Demonstrate location generators
228 private func demonstrateLocationGenerators() {
229 guard let manager = measurementManager else { return }
231 // [swift_MeasurementManager_addLocationGenerator]
232 // Add location generator
233 let locationId = manager.addLocationGenerator(
242 print("Added location generator with ID: \(locationId)")
243 // [swift_MeasurementManager_addLocationGenerator]
245 // [swift_MeasurementManager_removeLocationGenerator]
246 // Remove specific location generator
247 manager.removeLocationGenerator(id: locationId)
248 print("Removed location generator: \(locationId)")
249 // [swift_MeasurementManager_removeLocationGenerator]
251 // [swift_MeasurementManager_removeLocationGenerators]
252 // Remove all location generators
253 manager.removeLocationGenerators()
254 print("Removed all location generators")
255 // [swift_MeasurementManager_removeLocationGenerators]
259 * Demonstrate sensor measurements
261 func demonstrateSensorMeasurements(_ sensors: [SensorType: SensorMeasurement]) {
262 sensors.forEach { (sensorType, measurement) in
263 // [swift_SensorMeasurement_getType]
265 let type = measurement.type
266 print("Sensor type: \(type)")
267 // [swift_SensorMeasurement_getType]
269 // [swift_SensorMeasurement_getValues]
271 let values = measurement.values
272 print("Sensor values - X: \(values.x), Y: \(values.y), Z: \(values.z)")
273 // [swift_SensorMeasurement_getValues]
275 // [swift_SensorMeasurement_getTime]
276 // Get measurement timestamp
277 let time = measurement.time
278 print("Measurement time: \(time) ms")
279 // [swift_SensorMeasurement_getTime]
281 // Demonstrate Vector3d properties
282 demonstrateVector3d(values)
287 * Demonstrate signal measurements
289 func demonstrateSignalMeasurements(_ signals: [String: SignalMeasurement]) {
290 signals.forEach { (signalId, measurement) in
291 // [swift_SignalMeasurement_getType]
293 let type = measurement.type
294 print("Signal type: \(type)")
295 // [swift_SignalMeasurement_getType]
297 // [swift_SignalMeasurement_getId]
298 // Get signal identifier
299 let id = measurement.id
300 print("Signal ID: \(id)")
301 // [swift_SignalMeasurement_getId]
303 // [swift_SignalMeasurement_getRssi]
305 let rssi = measurement.rssi
306 print("Signal RSSI: \(rssi) dBm")
307 // [swift_SignalMeasurement_getRssi]
309 // [swift_SignalMeasurement_getDistance]
310 // Get estimated distance
311 let distance = measurement.distance
312 print("Signal distance: \(distance) meters")
313 // [swift_SignalMeasurement_getDistance]
315 // [swift_SignalMeasurement_getTime]
316 // Get measurement timestamp
317 let time = measurement.time
318 print("Signal measurement time: \(time) ms")
319 // [swift_SignalMeasurement_getTime]
324 * Demonstrate Vector3d properties
326 private func demonstrateVector3d(_ vector: Vector3d) {
327 // [swift_Vector3d_getX]
330 print("Vector X: \(x)")
331 // [swift_Vector3d_getX]
333 // [swift_Vector3d_getY]
336 print("Vector Y: \(y)")
337 // [swift_Vector3d_getY]
339 // [swift_Vector3d_getZ]
342 print("Vector Z: \(z)")
343 // [swift_Vector3d_getZ]
347 * Main demonstration method
350 print("=== MeasurementManager Example ===")
352 demonstrateMeasurementManagerMethods()
354 // Wait a bit for measurements
355 DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
356 print("=== Example completed ===")
362 * MeasurementListener implementation
364class MeasurementListenerImpl: NSObject, MeasurementListener {
365 private weak var example: MeasurementManagerExample?
367 init(example: MeasurementManagerExample) {
368 self.example = example
372 // [swift_MeasurementListener_onSensorMeasurementDetected]
373 func onSensorMeasurementDetected(_ sensors: [SensorType: SensorMeasurement]) {
374 print("Sensor measurements detected")
375 example?.demonstrateSensorMeasurements(sensors)
377 // [swift_MeasurementListener_onSensorMeasurementDetected]
379 // [swift_MeasurementListener_onSignalMeasurementDetected]
380 func onSignalMeasurementDetected(_ signals: [String: SignalMeasurement]) {
381 print("Signal measurements detected")
382 example?.demonstrateSignalMeasurements(signals)
384 // [swift_MeasurementListener_onSignalMeasurementDetected]
388 * Function to run the example
391 let example = MeasurementManagerExample()
394 // Keep the app running for a while to see the output
395 RunLoop.main.run(until: Date().addingTimeInterval(10.0))