notificación push basada en la location cuando la aplicación no se está ejecutando?

¿Es posible cuando su aplicación no se está ejecutando pero el usuario todavía puede recibir una notificación push cuando está cerca de una location particular. Esto requerirá la comprobación de la latitud y longitud actuales del usuario (incluso la aplicación no se está ejecutando).

Si es posible, ¿puede dar algunas pautas sobre cómo puedo lograrlo?

Hay dos methods que puede usar para rastrear la location del usuario incluso cuando la aplicación no se está ejecutando:

  1. Servicio de cambio de location significativa.

    Llame al método startMonitoringSignificantLocationChanges en una instancia de CLLocationManager. Esto ayudará significativamente a ahorrar energía, pero no proporciona una gran precisión en comparación con el segundo método a continuación.

    No es necesario que establezca la key de location en UIBackgroundModes si opta por este método.

  2. Servicio de location estándar.

    Llame al método startUpdatingLocation en una instancia de CLLocationManager. Esto requiere una gran cantidad de energía del dispositivo pero proporciona una mayor precisión. Recuerde establecer location key de location en UIBackgroundModes para asegurarse de que el seguimiento sigue funcionando incluso si la aplicación se elimina.

Puede usar uno de los methods anteriores. Utilizo el primer método combinado con la supervisión de la región para activar la notificación local.

Puede consultar la siguiente documentation de Apple para get explicaciones y ejemplos más detallados:

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html

Notificaciones basadas en la región (CLRegion) incluso cuando la aplicación no se está ejecutando en absoluto

Bueno, esta respuesta no es rápida, pero Apple introdujo un nuevo concepto en UILocalNotification. No es obligatorio enviar una notificación push, iOS mostrará automáticamente una notificación local cuando el usuario ingrese / salga del área geográfica CLRegion . Desde iOS 8 y posteriores, podemos progtwigr una notificación local basada en la location no mediante la configuration de la propiedad fireDate .

  let localNotification = UILocalNotification() localNotification.alertTitle = "Hi there" localNotification.alertBody = "you are here" let region = CLCircularRegion(center: CLLocationCoordinate2D(latitude: 4.254, longitude: 88.25), radius: CLLocationDistance(100), identifier: "") region.notifyOnEntry = true region.notifyOnExit = false localNotification.region = region localNotification.timeZone = NSTimeZone.localTimeZone() localNotification.soundName = UILocalNotificationDefaultSoundName UIApplication.shanetworkingApplication().scheduleLocalNotification(localNotification) 

Aquí hay más detalles de Apple .

Necesitas hacer 2 cosas:

  1. startMonitoringSignificantLocationChanges con CLLocationManager. Eso está en el lado del código. Probablemente quiera escuchar la notificación y hacer lo que sea con la información que está recibiendo. Pero, si la aplicación no se está ejecutando, no obtendrá esta información a less que haga dos:
  2. En Capacidades: habilita los modos de background y los modos: actualizaciones de location. De esa forma, creo que siempre recibirá notifications, incluso si su aplicación se desmarca de la list inactiva.

Sin embargo, el usuario todavía puede desactivarlo (Configuración-> General-> Actualización de la aplicación en segundo plano).

Puedes hacerlo cuando la aplicación esté en segundo plano. en primer lugar … llame a CLLocationManager deleagte cada vez que la aplicación vaya al background. Cada vez que el dispositivo obtenga una nueva latitud y longitud … Este deleagte será despedido. – (void) locationManager: (CLLocationManager *) manager didUpdateLocations: (NSArray *) ubicaciones; Ahora llama a un service web y actualiza tu location actual. Luego envíe una notificación push.