Ingrese a la región de iBeacon con la aplicación en segundo plano y solicite la URL sin notificación

He hecho muchas búsquedas en SO y Google para tratar de get una respuesta para esto, pero no he podido juntar todas las piezas del rompecabezas, así que cualquier ayuda / puntero sería genial.

Me gustaría build una aplicación que compruebe un service web cuando ingresa a una región iBeacon. El ejemplo de uso de ejemplo simple sería este:

  1. el usuario entra en una tienda equipada con iBeacon con aplicación en segundo plano

  2. en lugar de notificar al usuario, la aplicación realiza una request a un server web para comprobar si el ID de usuario es miembro (la aplicación ha recibido permiso para enviar una identificación de usuario al server por parte del usuario).

3a el server devuelve la respuesta "verdadera"

4a. la aplicación envía una notificación de "Tenemos una promoción de miembros especiales hoy" para bloquear la pantalla.

O

3b. server devuelve una respuesta "falsa"

4b la aplicación permanece en silencio (sin notificación al usuario)

Para su información, esta respuesta parece sugerir que es posible enviar una request de URL en segundo plano: Ejecución de requestes de URL en segundo plano

Has identificado prácticamente todo lo que necesitas hacer.

Cuando se CLLocationManagerDelegate su CLLocationManagerDelegate , se didEnterRegion: método didEnterRegion: puede iniciar una tarea en segundo plano y luego iniciar una request de networking. Una vez que haya recibido una respuesta, puede enviar una notificación local si es necesario y luego finalizar la tarea de background.

 - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { // If not already performing a background task for this region... UIBackgroundTaskIdentifier bgTask = [[UIApplication shanetworkingApplication] beginBackgroundTaskWithExpirationHandler:^{ [[UIApplication shanetworkingApplication] endBackgroundTask:self.backgroundTask]; self.backgroundTask = UIBackgroundTaskInvalid; }]; // perform network request - if successful, display notification. when finished, end background task } 

Aunque debería tener en count que en realidad no ubicaría la gestión de tareas de background y el código de request web directamente dentro de mi método didEnterRegion: Tendría una class de API web independiente que realiza las requestes, y solo hago llamadas desde dentro de didEnterRegion:

Esto también podría ayudar (la respuesta corta es "sí", pero su lógica debe finalizar en 5 segundos): https://apple.stackexchange.com/questions/174787/can-ibeacon-range-region-monitoring-trigger-dynamic- notificación basada en datos / 174873 # 174873