Cómo registrarse para un evento que restring a la aplicación en el time especificado en iOS

Tengo el requisito de iniciar la synchronization todas las noches a la 1 o cada 2 semanas. ¿Cómo lograré esto en iOS? ¿Hay alguna manera en iOS que mi aplicación pueda decir que me recuerde en este momento y mi aplicación debe recordarse en ese momento en particular.

Background Fetch es una oportunidad proporcionada por el sistema operativo ( iOS 7 en adelante ) a las aplicaciones que solicitaron realizar una operación en segundo plano, sin embargo, dejaron en el sistema operativo para decidir el momento. El sistema operativo despertará silenciosamente su aplicación (en realidad, un método de gestión) en segundo plano después de conocer el uso de una aplicación por parte del usuario.

Uso de las funciones : A partir de ahora, esta function se ha introducido en iOS7 para mejorar la usabilidad de las networkinges sociales, el periódico, las aplicaciones refrescantes diarias / frecuentes / de contenido pesado.

Nota : es solo una request que no se garantiza que se cumpla, sino un bash de SO subyacente para una mejor experiencia de usuario)

Desde la perspectiva de la encoding / implementación, hay principalmente 2-3 pasos key:

A) Activar los Background Modes de Background Fetch para el atributo Background Fetch ( Seleccionar destino de aplicación> Capacidades> Modos de background> Fetch de background ) introduzca la descripción de la imagen aquí

B) Implementar este método de delegado de aplicaciones:

 - (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler NS_AVAILABLE_IOS(7_0); 

C) Defina su intervalo de recuperación, generalmente cuando se inicia la aplicación, es decir, appDidFinishLaunchingWithOptions

 [[UIApplication shanetworkingApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]; 

Dado que es un evento que el SO dispara automáticamente, cómo probar este comportamiento durante el desarrollo:

Bueno, puedes simular / probar el comportamiento de búsqueda de background en tu aplicación a través de XCode 5+ usando el menu Depurar> Simular búsqueda de background

introduzca la descripción de la imagen aquí

Aquí está el enlace al tutorial con el proyecto de ejemplo.

Además, puede retirar la session 204 de los videos de la WWDC 2013 de Apple – Novedades de Multitasking

EDITAR:

A partir de hoy (iOS 7.0.3), en la falta de documentation oficial adecuada, el uso práctico dice que –

  1. El MinimumBackgroundFetchInterval obligatorio es de entre 5 y 15 minutos (cualquier cosa less de lo que no se cumple).
  2. La búsqueda de background no ocurre cuando el dispositivo está bloqueado.
  3. La búsqueda de background se activa inmediatamente después de que el usuario desbloquea el dispositivo.

Sin embargo, en las próximas versiones, creo que esta característica se mejorará y dará más poder a los desarrolladores / usuarios.

Puede usar NSLocalNotification . Vea un ejemplo (tomado de aquí ):

 UILocalNotification *notification = [[UILocalNotification alloc] init]; // Activate in 5 segundos notification.fireDate = [[NSDate alloc] initWithTimeIntervalSinceNow:5]; // message to show notification.alertBody = self.nameTextField.text; // default sound notification.soundName = UILocalNotificationDefaultSoundName; // button title notification.alertAction = @"Ahora te lo cuento"; notification.hasAction = YES; // activa la notificación [[UIApplication shanetworkingApplication] scheduleLocalNotification:notification]; 

El punto es que el comportamiento depende del estado de la aplicación cuando se dispara la notificación local. Si la aplicación se ejecuta en primer plano, puede manejar la notificación de forma silenciosa. Pero si la aplicación no se está ejecutando o está en segundo plano, se requiere interacción del usuario.

Es posible que desee probar una combinación de notifications push de Apple y service de transferencia de background. Si mira el video de WWDC 2013 al que se refería Ashok, en el video aludieron a que las notifications push en silencio despiertan la aplicación que luego le permitirá configurar una transferencia de background.

Puede registrar su aplicación para tener Notificaciones Push, hacer que su server envíe una request de notificación a Apple, luego cuando se recibe la notificación push, su aplicación se despierta de segundo plano, configura su descarga / carga usando NSURLSession y luego inicia la session. Cuando finalice la transferencia de datos, ejecute el código que necesite para sincronizar su aplicación y luego notifique al sistema operativo que la transferencia de background se ha completado para que pueda volver a poner la aplicación en modo de suspensión.

Tenga en count que el momento todavía no está realmente bajo su control, pero esto es lo más cercano que puedo ver para crear una solución a su problema.

Implementé con éxito la solución de @ Steve, por ejemplo, implementando notifications Apple Push sin el service de transferencia de background. Mi aplicación se basa en la creación de events EKCalendar, que luego activarán la creación de una notificación push para la date / hora de inicio / finalización específica. La aplicación utiliza el didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler en el delegado de la aplicación que maneja el recibo de la notificación remota y posteriormente ejecuta algún código para realizar la funcionalidad necesaria de la aplicación basada en el evento. Nota: el post de notificación remota debe include el set de content-available en 1. El único inconveniente es la dependencia de la entrega oportuna de las notifications remotas, que hasta ahora, durante mis testings, ha demostrado ser aproximadamente 95%% efectivo / preciso para dentro de 2 a 30 segundos, pero también he visto casos en los que las notifications nunca se reciben o se retrasan más de 1 a 5 minutos. Esto es infrecuente y para mis propósitos es aceptable para la funcionalidad de mi aplicación.