ios - usage - Ubicación de usuario de fondo cuando la aplicación se termina/suspende
startupdatinglocation swift (6)
De los docs
Seguimiento de la ubicación del usuario
Hay varias formas de rastrear la ubicación del usuario en segundo plano, la mayoría de las cuales no requieren que su aplicación se ejecute continuamente en segundo plano:
The significant-change location service (Recommended) Foreground-only location services Background location services
Y para los detalles - Obtención de la ubicación del usuario
He estado tratando de averiguar cómo obtener la ubicación del usuario cuando la aplicación finaliza, como lo hace la aplicación Se mueve. La única forma que conozco de hacerlo es con cambios significativos de ubicación. Sin embargo, con cambios de ubicación significativos, la aplicación solo se activa cada 500 metros y solo si han pasado unos 5 minutos desde la última actualización.
Según Apple:
Las aplicaciones pueden esperar una notificación tan pronto como el dispositivo se mueva 500 metros o más de su notificación previa. No debe esperar notificaciones más de una vez cada cinco minutos. Si el dispositivo es capaz de recuperar datos de la red, es mucho más probable que el administrador de ubicación envíe notificaciones de manera oportuna.
En la aplicación Moves, incluso con la finalización de la aplicación, es capaz de recuperar la ubicación del usuario con mucha precisión sin tener que drenar la batería. Tampoco parece tener la ubicación de fondo activada, ya que su motivo en la lista de uso de la batería solo muestra "Actividad de fondo". Así que me pregunto cómo una aplicación como Moves está haciendo esto. Cualquier ayuda sería genial! Gracias.
Desde mi experiencia actual, tienes 3 opciones para hacer que esto funcione. El primero es tener una notificación silenciosa que requiere un esfuerzo realizado por el backend. La notificación silenciosa es una especie de notificación de inserción, pero notifica a su aplicación sin una alerta. La segunda solución son las recuperaciones de fondo. Las recuperaciones en segundo plano no requieren una solución de fondo, pero lamentablemente no se pueden controlar los intervalos necesarios para crear una instancia. El tercero es tener notificaciones locales programadas sin mensajes.
En caso de que necesite actualizaciones de ubicación con frecuencia pero aún quiera ahorrar batería, pruebe esto:
- Agregue los permisos necesarios para utilizar la ubicación en segundo plano.
- Iniciar las actualizaciones utilizando
startUpdatingLocation
- Comience a diferir las actualizaciones cuando
allowDeferredLocationUpdatesUntilTraveled:timeout:
en segundo plano utilizandoallowDeferredLocationUpdatesUntilTraveled:timeout:
especifique los filtros de tiempo y distancia en este método. - Asegúrese de leer los documentos here y especifique todas las propiedades correctamente para que funcione.
En iOS 8, son nuevos pasos a los que debemos prestar atención para que la búsqueda de ubicación funcione. El primer paso es agregar una o dos claves en la lista de proyectos en función de la funcionalidad principal de la aplicación. Las dos claves son NSLocationWhenInUseUsageDescription y NSLocationAlwaysUsageDescription, luego deberá agregar un String que explique al usuario por qué la aplicación necesita acceder a su ubicación, algo entre las líneas de "Esta aplicación usa la ubicación en segundo plano / primer plano debido a A, B y C ”. Cada una de estas cadenas tiene un método de autorización correspondiente que debe llamarse, WhenInUse o Alway (es decir, Fondo).
- (void)startStandardUpdates
{
// Create the location manager if this object does not
// already have one.
if (nil == locationManager)
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
// Set a movement threshold for new events.
locationManager.distanceFilter = 500; // meters
[locationManager startUpdatingLocation];
}
La única solución es utilizar el modo de fondo con CoreLocation. Si su aplicación requiere iOS 8, el sistema relanzará su aplicación, incluso si el usuario la obliga a cerrarla. Esto está documentado en Apple Docs :
En la mayoría de los casos, el sistema no vuelve a iniciar las aplicaciones una vez que el usuario las ha forzado a salir. Una excepción son las aplicaciones de ubicación, que en iOS 8 y posteriores se relanzan después de que el usuario las haya forzado a salir. En otros casos, sin embargo, el usuario debe iniciar la aplicación explícitamente o reiniciar el dispositivo antes de que el sistema pueda iniciar la aplicación automáticamente en segundo plano.
Puede registrarse para regiones en un área de 500 m y registrarse para recibir notificaciones de las regiones en ellas. Cuando llega a uno de ellos, su aplicación se inicia en segundo plano. Luego, vuelva a registrarse para obtener otros nuevos manteniendo esa ubicación en el centro.
De la documentación de Apple :
Las aplicaciones que admiten la ejecución en segundo plano pueden ser relanzadas por el sistema para manejar eventos entrantes. Si una aplicación se termina por cualquier motivo que no sea el forzado por el usuario que la cierra, el sistema inicia la aplicación cuando ocurre uno de los siguientes eventos:
Para aplicaciones de localización:
El sistema recibe una actualización de ubicación que cumple con los criterios configurados para la entrega de la aplicación.
El dispositivo entró o salió de una región registrada. (Las regiones pueden ser regiones geográficas o regiones de iBeacon).