4 * ZoneManager usage example for Swift
5 * Demonstrates working with zone detection, event handling, and zone management
7class ZoneManagerExample: NSObject {
8 private var sdk: NavigineSdk?
9 private var locationManager: LocationManager?
10 private var navigationManager: NavigationManager?
11 private var zoneManager: ZoneManager?
12 private var zoneListener: ZoneListener?
21 * Initialize SDK and get managers
23 private func initializeSdk() {
25 // [swift_NavigineSdk_getInstance]
27 sdk = NavigineSdk.getInstance()
28 // [swift_NavigineSdk_getInstance]
30 // [swift_NavigineSdk_setUserHash]
32 sdk?.setUserHash("USER-HASH-HERE")
33 // [swift_NavigineSdk_setUserHash]
35 // [swift_NavigineSdk_setServer]
36 // Set server URL (optional)
37 sdk?.setServer("https://custom.navigine.com")
38 // [swift_NavigineSdk_setServer]
40 // [swift_NavigineSdk_getLocationManager]
41 // Get LocationManager for working with locations
42 locationManager = sdk?.getLocationManager()
43 // [swift_NavigineSdk_getLocationManager]
45 // [swift_NavigineSdk_getNavigationManager]
46 // Get NavigationManager for working with navigation
47 navigationManager = sdk?.getNavigationManager(locationManager)
48 // [swift_NavigineSdk_getNavigationManager]
50 // [swift_NavigineSdk_getZoneManager]
51 // Get ZoneManager for working with zones
52 zoneManager = sdk?.getZoneManager(locationManager, navigationManager: navigationManager)
53 // [swift_NavigineSdk_getZoneManager]
55 if let locationManager = locationManager, let navigationManager = navigationManager, let zoneManager = zoneManager {
56 print("LocationManager, NavigationManager and ZoneManager successfully initialized")
59 print("Error initializing SDK: \(error)")
66 private func setupZoneListener() {
67 zoneListener = ZoneListenerImpl(example: self)
71 * Demonstrate ZoneManager methods
73 func demonstrateZoneManagerMethods() {
74 guard let manager = zoneManager, let listener = zoneListener else {
75 print("ZoneManager not initialized")
79 // [swift_ZoneManager_addZoneListener]
81 manager.addZoneListener(listener)
82 print("Added zone listener")
83 // [swift_ZoneManager_addZoneListener]
85 // Simulate some time passing for zone events
86 DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
87 // [swift_ZoneManager_removeZoneListener]
88 // Remove zone listener
89 manager.removeZoneListener(listener)
90 print("Removed zone listener")
91 // [swift_ZoneManager_removeZoneListener]
96 * Demonstrate ZoneEvent usage
98 func demonstrateZoneEventUsage(_ zoneEvent: ZoneEvent) {
99 guard let zoneEvent = zoneEvent else {
100 print("ZoneEvent is nil")
104 // [swift_ZoneEvent_getType]
106 let type = zoneEvent.type
107 print("Zone event type: \(type)")
108 // [swift_ZoneEvent_getType]
110 // [swift_ZoneEvent_getLocationId]
112 let locationId = zoneEvent.locationId
113 print("Zone location ID: \(locationId)")
114 // [swift_ZoneEvent_getLocationId]
116 // [swift_ZoneEvent_getSublocationId]
117 // Get sublocation ID
118 let sublocationId = zoneEvent.sublocationId
119 print("Zone sublocation ID: \(sublocationId)")
120 // [swift_ZoneEvent_getSublocationId]
122 // [swift_ZoneEvent_getId]
124 let id = zoneEvent.id
125 print("Zone ID: \(id)")
126 // [swift_ZoneEvent_getId]
128 // [swift_ZoneEvent_getName]
130 let name = zoneEvent.name
131 print("Zone name: \(name)")
132 // [swift_ZoneEvent_getName]
134 // [swift_ZoneEvent_getAlias]
136 let alias = zoneEvent.alias
137 print("Zone alias: \(alias)")
138 // [swift_ZoneEvent_getAlias]
140 // [swift_ZoneEvent_constructor]
141 // Create new zone event
142 let newZoneEvent = ZoneEvent(type: .enter, locationId: 12345, sublocationId: 1, id: 100, name: "Test Zone", alias: "test_zone")
143 print("Created new zone event: \(newZoneEvent.name) (\(newZoneEvent.alias))")
144 // [swift_ZoneEvent_constructor]
148 * Demonstrate ZoneEventType enum values
150 func demonstrateZoneEventTypes() {
151 // [swift_ZoneEventType_values]
152 // Get all zone event type values
153 print("Available zone event types:")
154 print(" - ZoneEventType.enter: \(ZoneEventType.enter)")
155 print(" - ZoneEventType.exit: \(ZoneEventType.exit)")
156 // [swift_ZoneEventType_values]
160 * Demonstrate advanced zone management features
162 func demonstrateAdvancedZoneFeatures() {
163 print("=== Advanced Zone Features ===")
165 guard let manager = zoneManager else {
169 // Add multiple listeners
170 let listener1 = ZoneListenerImpl(example: self)
171 let listener2 = ZoneListenerImpl(example: self)
173 // [swift_ZoneManager_addZoneListener_2]
174 // Add first zone listener
175 manager.addZoneListener(listener1)
176 print("Added first zone listener")
177 // [swift_ZoneManager_addZoneListener_2]
179 DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
180 // [swift_ZoneManager_addZoneListener_3]
181 // Add second zone listener
182 manager.addZoneListener(listener2)
183 print("Added second zone listener")
184 // [swift_ZoneManager_addZoneListener_3]
186 DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
188 // [swift_ZoneManager_removeZoneListener_1]
189 // Remove first zone listener
190 manager.removeZoneListener(listener1)
191 print("Removed first zone listener")
192 // [swift_ZoneManager_removeZoneListener_1]
194 DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
195 // [swift_ZoneManager_removeZoneListener_2]
196 // Remove second zone listener
197 manager.removeZoneListener(listener2)
198 print("Removed second zone listener")
199 // [swift_ZoneManager_removeZoneListener_2]
206 * Demonstrate zone event simulation
208 func demonstrateZoneEventSimulation() {
209 print("=== Zone Event Simulation ===")
211 // Create different types of zone events
212 let simulatedEvents: [ZoneEvent] = [
213 ZoneEvent(type: .enter, locationId: 12345, sublocationId: 1, id: 100, name: "Entrance Zone", alias: "entrance"),
214 ZoneEvent(type: .exit, locationId: 12345, sublocationId: 1, id: 100, name: "Entrance Zone", alias: "entrance"),
215 ZoneEvent(type: .enter, locationId: 12345, sublocationId: 1, id: 101, name: "Meeting Room", alias: "meeting_room"),
216 ZoneEvent(type: .enter, locationId: 12345, sublocationId: 1, id: 102, name: "Cafeteria", alias: "cafeteria"),
217 ZoneEvent(type: .exit, locationId: 12345, sublocationId: 1, id: 101, name: "Meeting Room", alias: "meeting_room"),
220 // Simulate zone events
221 for (index, event) in simulatedEvents.enumerated() {
222 DispatchQueue.main.asyncAfter(deadline: .now() + Double(index + 1)) {
223 print("Simulated zone event: \(event.type) - \(event.name) (\(event.alias))")
224 self.demonstrateZoneEventUsage(event)
230 * Demonstrate zone listener management
232 func demonstrateZoneListenerManagement() {
233 print("=== Zone Listener Management ===")
235 guard let manager = zoneManager else {
239 // Create a test listener
240 let testListener = ZoneListenerImpl(example: self)
243 manager.addZoneListener(testListener)
244 print("Added test zone listener")
246 // Simulate some time passing
247 DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
249 manager.removeZoneListener(testListener)
250 print("Removed test zone listener")
258 if let manager = zoneManager, let listener = zoneListener {
259 // [swift_ZoneManager_removeZoneListener_3]
260 // Remove zone listener
261 manager.removeZoneListener(listener)
262 // [swift_ZoneManager_removeZoneListener_3]
267 * Main demonstration method
270 print("=== ZoneManager Example ===")
272 demonstrateZoneManagerMethods()
273 demonstrateZoneEventTypes()
274 demonstrateZoneListenerManagement()
275 demonstrateAdvancedZoneFeatures()
276 demonstrateZoneEventSimulation()
278 // Wait a bit for zone events
279 DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
281 print("=== Example completed ===")
287 * ZoneListener implementation
289class ZoneListenerImpl: NSObject, ZoneListener {
290 private weak var example: ZoneManagerExample?
292 init(example: ZoneManagerExample) {
293 self.example = example
297 // [swift_ZoneListener_onZoneEvent]
298 func onZoneEvent(_ zoneEvent: ZoneEvent) {
299 print("Zone event detected")
300 example?.demonstrateZoneEventUsage(zoneEvent)
302 // [swift_ZoneListener_onZoneEvent]
306 * Function to run the example
309 let example = ZoneManagerExample()
312 // Keep the app running for a while to see the output
313 RunLoop.main.run(until: Date().addingTimeInterval(10.0))