es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

(iOS) ¿Cómo funciona el despertar por iBeacon?

Estoy probando con iBeacon para realizar algunas tareas relacionadas con Bluetooth en una aplicación de iOS después de cerrarla.

Realmente funciona muy bien, pero todavía tengo curiosidad por cómo funciona.

Aquí hay un código que utilicé.

private func startMonitoring() {
    if CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self) {
        self.log("startMonitoring")
        let region = CLBeaconRegion(...)
        self.locationManager.startMonitoring(for: region)
    }
}

func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
    if let region = region as? CLBeaconRegion {
        if CLLocationManager.isRangingAvailable() {
            self.log("didEnterRegion")
            self.locationManager.startRangingBeacons(satisfying: region.beaconIdentityConstraint)
        }
    }
}

func locationManager(_ manager: CLLocationManager, didRange beacons: [CLBeacon], satisfying beaconConstraint: CLBeaconIdentityConstraint) {
    if !beacons.isEmpty {
        self.log("didRange")
        self.doSomething()
    }
}

Llamé a startMonitoring() una vez cuando la aplicación se inició inicialmente y utilicé dos métodos del delegado de CLLocationManager. Y también añadí log() para la prueba.

Esperaba que después de cerrar la aplicación, se llame a didEnterRegion primero y luego a didRange y finalmente se realice la tarea.

Pero resulta que sólo veo 3 registros sobre “startMonitoring”, lo que significa (supongo) que iBeacon llama a startMonitoring() de alguna manera.

¿Cómo es posible? ¿Por qué la aplicación no llama a los métodos del delegado y por qué funciona tan bien?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que iBeacon está haciendo algo detrás de escena. ¿Alguien puede explicarlo?

    Es posible que iBeacon esté haciendo algo detrás de escena. Cuando la aplicación se cierra, el sistema operativo seguirá monitoreando por regiones iBeacon y llamará a los métodos de delegado apropiados cuando detecte un beacon. Es por eso que estás viendo el registro de startMonitoring(), pero no los demás métodos de delegado.

    El sistema operativo también continuará buscando beacons y llamará al método de delegado didRange cuando detecte un beacon. Es por eso que estás viendo el comportamiento esperado, aunque la aplicación se haya cerrado.

Comments are closed.