Estou acionando uma busca em segundo plano usando o content-available
sinalizador em uma notificação por push. Eu tenho o fetch
e remote-notification
UIBackgroundModes
ativado.
Aqui está a implementação que estou usando no meu 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);
}
Quando o aplicativo está sendo executado em segundo plano, ele funciona bem. (A notificação é recebida e o aplicativo acionou a notificação local "parece que recebi uma notificação", como o código acima deve fazer).
No entanto, quando o aplicativo não está em execução e uma notificação por push é recebida com o content-available
sinalizador, o aplicativo não é iniciado e o didRecieveRemoteNotification
método delegado nunca é chamado.
O vídeo da WWDC O que há de novo na multitarefa (nº 204 da WWDC 2013) mostra isso:
Ele diz que o aplicativo é "iniciado em segundo plano" quando uma notificação por push é recebida com o content-available
sinalizador.
Por que meu aplicativo não está sendo iniciado em segundo plano?
Portanto, a verdadeira questão é:
O iOS executará tarefas em segundo plano depois que o usuário forçar o encerramento do aplicativo?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions