son - ¿IOS lanzará mi aplicación en segundo plano si fue forzada por el usuario?




que son actualizaciones en segundo plano iphone (4)

Estoy activando una búsqueda en segundo plano mediante el uso del indicador de content-available en una notificación de inserción. Tengo habilitados los UIBackgroundModes fetch y remote-notification UIBackgroundModes .

Aquí está la implementación que estoy usando en mi AppDelegate.m:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"Remote Notification Recieved");
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.alertBody =  @"Looks like i got a notification - fetch thingy";
    [application presentLocalNotificationNow:notification];
    completionHandler(UIBackgroundFetchResultNewData);

}

Cuando la aplicación se ejecuta en segundo plano, funciona bien. (Se recibe la notificación y la aplicación activó la notificación local "parece que recibí una notificación", como debería hacer el código anterior).

Sin embargo, cuando la aplicación no se está ejecutando y se recibe una notificación de inserción con el indicador de content-available , la aplicación no se inicia y el método del delegado didRecieveRemoteNotification nunca se llama.

El video de la WWDC Qué hay de nuevo con la multitarea (# 204 de la WWDC 2013) muestra esto:

Dice que la aplicación se "inicia en segundo plano" cuando se recibe una notificación de inserción con el indicador de content-available .

¿Por qué mi aplicación no se inicia en segundo plano?

Así que la verdadera pregunta es:

¿IOS realizará tareas en segundo plano después de que el usuario haya forzado el cierre de la aplicación?


En realidad, si necesita probar la obtención de fondos, debe habilitar una opción en el esquema:

Otra forma en que puedes probarlo:

Aquí hay información completa sobre esta nueva función: http://www.objc.io/issue-5/multitasking.html


Esto podría ayudarte

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. Cuando la protección con contraseña está habilitada en el dispositivo, el sistema no ejecuta una aplicación en segundo plano antes de que el usuario desbloquee el dispositivo por primera vez.

Fuente: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html


La respuesta es SÍ, pero no debe usar 'Obtención en segundo plano' o 'Notificación remota'. PushKit es la respuesta que deseas.

En resumen, PushKit, el nuevo marco en ios 8, es el nuevo mecanismo de notificación de inserción que puede iniciar silenciosamente su aplicación en segundo plano sin aviso de alerta visual, incluso su aplicación fue eliminada al deslizar el interruptor de la aplicación, sorprendentemente ni siquiera puede verla desde el conmutador de aplicaciones.

Referencia de PushKit de Apple:

El marco PushKit proporciona las clases para que sus aplicaciones iOS reciban envíos de servidores remotos. Los impulsos pueden ser de uno de dos tipos: estándar y VoIP. Los empujes estándar pueden entregar notificaciones al igual que en versiones anteriores de iOS. Los empujes de VoIP proporcionan una funcionalidad adicional además del empuje estándar que se necesita para que las aplicaciones de VoIP realicen un procesamiento a pedido del empuje antes de mostrar una notificación al usuario.

Para implementar esta nueva función, consulte este tutorial: https://zeropush.com/guide/guide-to-pushkit-and-voip - Lo probé en mi dispositivo y funciona como se esperaba.


Puede cambiar la configuración de lanzamiento de su objetivo en "Administrar esquema" para Wait for <app>.app to be launched manually , lo que le permite depurar estableciendo un punto de interrupción en la application: didReceiveRemoteNotification: fetchCompletionHandler: y enviando la notificación de inserción para desencadenar el lanzamiento en segundo plano .

No estoy seguro de que solucione el problema, pero puede ayudarlo con la depuración por ahora.





apple-push-notifications