Background location et push data IOS

Bonjour :-) 


 


Cela fait maintenant plusieurs jours que je rencontre des problème sur le fonctionnement du background sous IOS.


En gros je souhaite pouvoir récupérer la position GPS et exécuter un POST vers une URL en background (j'ai aucun problème en foreground). 


J'ai donc activer l'option location update et background fetch (un choix que j'ai un peu de mal à  comprendre car il semble s'activer n'importe quand) dans le background mode. 


La fonction suivante me permet de maintenir en vie mes NSTimer sur le MainThread et donc de récupérer les données GPS (partie tirée de la doc Apple) :



- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@Enter Background);
_bgTask = [application beginBackgroundTaskWithName:@MyTask expirationHandler:^{
[application endBackgroundTask:_bgTask];
_bgTask = UIBackgroundTaskInvalid;
}];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
while(TRUE)
{
NSLog(@Background time Remaining: %f,[[UIApplication sharedApplication] backgroundTimeRemaining]);
[NSThread sleepForTimeInterval:1]; //wait for 1 sec
}
[application endBackgroundTask:_bgTask];
_bgTask = UIBackgroundTaskInvalid;
});
}


Le problème est qu'au bout de 180s -> FINIT ! Plus rien en background... Bon j'ai pu lire dans la doc Apple que c'était volontaire de leur part afin de gérer plus "intelligemment" notre app en background.


Ma question est donc comment je peux faire pour dépasser cette limite de temps ? (Si par ailleurs je peux avoir une explication claire sur le déclenchement background fetch)


 


Merci pour votre aide.


A+ 


 


 


Réponses

  • Bon il s'agissait d'un paramètre manquant pour IOS 9 :



    [locationManager setAllowsBackgroundLocationUpdates:YES];

    Donc le background fonctionne !! :-) Aucun besoin du contenu de applicationDidEnterBackground (cité plus haut).


    Par contre tous mes NSTimer fonctionnent désormais en background, que ce soit pour stocker les datas, les push et même d'autres qui n'ont rien à  voir... Cela me semble vraiment bizarre à  moins que la notion Background ne soit pas la bonne (je parle background lorsque mon APP est switchée via le bouton Home). 


    Donc ma question est à  quoi sert Background Fetch ? Car même quand je le désactive j'arrive à  pusher des datas.


    Si vous avez également un ou deux conseils sur les bonnes pratiques sur le background je suis preneur.


     


    Merci. 

Connectez-vous ou Inscrivez-vous pour répondre.