Le Capsule Temporali Geofenced permettono agli utenti di "lasciare" una registrazione sonora, un messaggio o una cartolina multimediale in un luogo fisico preciso (es. una piazza, un sentiero di montagna o un monumento), che potrà essere sbloccata e ascoltata da altri utenti solo quando si troveranno fisicamente entro un raggio di prossimità definito (es. 50 metri).
1. Monitoraggio delle Regioni Geografiche con CoreLocation
Utilizziamo CLCircularRegion per impostare il recinto virtuale (geofence) che notifica l'ingresso o l'uscita anche in background:
import CoreLocation
import SwiftUI
public final class GeofenceManager: NSObject, ObservableObject, CLLocationManagerDelegate {
private let locationManager = CLLocationManager()
@Published public var unlockedCapsules: Set = []
public override init() {
super.init()
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
}
public func registerGeofence(id: UUID, coordinate: CLLocationCoordinate2D, radius: Double = 50.0) {
guard CLLocationManager.isMonitoringAvailable(for: CLCircularRegion.self) else { return }
let region = CLCircularRegion(
center: coordinate,
radius: radius,
identifier: id.uuidString
)
region.notifyOnEntry = true
region.notifyOnExit = false
locationManager.startMonitoring(for: region)
}
public func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
if let uuid = UUID(uuidString: region.identifier) {
DispatchQueue.main.async {
self.unlockedCapsules.insert(uuid)
UINotificationFeedbackGenerator().notificationOccurred(.success)
}
}
}
}
Vuoi creare un'esperienza basata sulla geolocalizzazione o realtà aumentata sonora?
Progettiamo applicazioni geospaziali su misura con CoreLocation, MapKit, Geofencing a basso consumo energetico e SwiftData.