Geofencing e Capsule Temporali Audio con CoreLocation & SwiftData

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.