Я хочу вызвать запрос http, когда мое приложение находится в фоновом режиме - PullRequest
0 голосов
/ 28 сентября 2010

Я хочу установить будильник в то время, когда приложение уходит в фоновый режим, будильник должен продолжать работать. Когда время будильника истечет, я хочу инициировать http-запрос. Это возможно? Если это так, я должен использовать ASIHttprequest? Если я использую ASIHttprequest, будет ли мое приложение отклонено?

1 Ответ

0 голосов
/ 29 сентября 2010

Я не уверен, почему вам нужно выполнить стелс-загрузку, когда ваше приложение установлено на заднем плане.Что не так с этим, когда ваше приложение работает?Тем не менее ...

Да, это возможно.Существуют различные приемы, которые вы можете использовать, чтобы приложение работало в фоновом режиме;самые простые - это «voip», если у вас есть открытый сокет (или просто сокет UDP, или вы можете просто сказать, что у вас есть keepalive) и «audio» (но вы должны продолжать проигрывать аудио, даже если все, что вы играете, это тишина).

Я не рекомендую использовать «voip», если вы не проверили разрядку батареи (это может быть приемлемо, если вы подключаетесь / привязываетесь только к локальному хосту).AFAIK, Skype использует «voip»;это значительно сокращает срок службы батареи (около 16-24 часов на iPhone 4; я не ждал достаточно долго, чтобы выяснить это).

Я не рекомендую использовать «аудио» - я думаю,чтобы это работало, нужно что-то сыграть (например, тишина), что, вероятно, останавливает приложение iPod.Он почти наверняка разряжает батарею.

Если вы хотите отложить загрузку более чем на несколько минут, я не думаю, что будут работать простые «фоновые задачи», поскольку iOS дает ваммаксимальное время (если я не ошибаюсь, и оно основано на времени процессора, используемом вашим приложением, но я сомневаюсь в этом).Вы можете проверить что-то вроде этого:

-(void)applicationDidEnterBackground:(UIApplication*)application
{
  UIBackgroundTaskIdentifier taskId = [application beginBackgroundTaskWithExpirationHandler:^{NSLog(@"Task expired");}];
  NSTimeInterval backgroundTime = application.backgroundTimeRemaining;
  NSLog(@"Background task for %g seconds ...", (double)backgroundTime);
  [NSThread sleepForTimeInterval:backgroundTime - 1];
  NSLog(@"Background task finishing with %g seconds remaining ...", (double)application.backgroundTimeRemaining);
  [application endBackgroundTask:UIBackgroundTaskIdentifier];
}

Пожалуйста, подумайте о батарее children !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...