iOS: CoreLocation y geofencing mientras la aplicación está cerrada
objective-c core-location (3)
Algunas formas de actualización de ubicación requieren que la aplicación se ejecute en segundo plano, y otras no. Si desea actualizaciones de ubicación "constantes", entonces la aplicación debe ejecutarse en segundo plano. Si solo desea cambios significativos (y creo que también funciona para el monitoreo de la región, aunque los documentos no son tan explícitos), la aplicación se relanzará si se terminó:
Si inicia este servicio y su aplicación se cancela posteriormente, el sistema relanza automáticamente la aplicación en segundo plano si llega un nuevo evento ...
(desde CLLocationManager documentos )
He leído muchos tutoriales sobre geofencing de mi aplicación iOS (es decir, here ), pero ninguno menciona si iOS permite o no manejar datos de ubicación específicos de la aplicación cuando se cierra la aplicación.
Por ejemplo, entiendo que cuando la aplicación está en segundo plano, estos servicios aún persistirán (si están codificados correctamente), pero ¿qué ocurre cuando el usuario toca dos veces el botón de inicio y cierra la aplicación? ¿Se pueden obtener datos de ubicación?
De acuerdo con la Documentación de Apple , en la sección Uso de las regiones para monitorear los pasos fronterizos :
En iOS, las regiones que registra con el administrador de ubicación persisten entre los lanzamientos de su aplicación. Si ocurre un cruce de región mientras su aplicación iOS no se está ejecutando, el sistema la activará automáticamente (o la relanzará) en segundo plano para que pueda procesar el evento . Cuando se relanza, todas las regiones que configuró previamente están disponibles en la propiedad deRegions supervisada de cualquier objeto de administrador de ubicación que cree.
Así que sí, su aplicación se activará (o se relanzará) cuando la ubicación del sistema detecte que ingresó / salió (según su configuración) de la región deseada, por lo que esto es incluso si su aplicación no se está ejecutando, por supuesto. Solo necesita manejarlo correctamente en el delegado de la aplicación, cuando la aplicación se relanza se le pasa una clave UIApplicationLaunchOptionsLocationKey
en el diccionario de opciones. Ver el enlace de documentación a continuación para más detalles.
Recuerde que el -startMonitoringForRegion:desiredAccuracy:
está en desuso en iOS 6, por lo que no debe utilizarse. En su lugar, use -startMonitoringForRegion
.
Para saber cómo manejar cuándo se relanza su aplicación después de un evento de ubicación, consulte la documentación here , esa información, como verá, está en la discusión del método obsoleto, pero aún debe ser relevante, creo que Apple olvidó migrar esta información a la nuevo método cuando desaprovechó el anterior. Les archivé un error al respecto.
ACTUALIZAR
Apple ha actualizado la documentación de CLLocationManager siguiendo mi informe de errores. La documentación ahora especifica para qué tipo de ubicación se monitorea la aplicación se inicia o no una vez que se ha terminado. Consulte Uso de los servicios de ubicación en segundo plano
Si usa capacidades de monitoreo de región, puede reanudar su aplicación de alguna manera incluso si está cerrada, por lo general creando una notificación local, de esta manera el usuario puede alquilar en la aplicación y realizar tareas específicas, mirando el diccionario de opciones en -applicationDidFinishLaunchingWithOptions: