2016-04-06 5 views
1

В моем приложении я использую ежедневный тихий push для запуска некоторых вычислений внутри моего приложения и на основе результата вычисления. Я запускаю локальное уведомление.iOS: Проблема с молчаливым нажатием на запуск Локальное уведомление

Скажите, например: ежедневная цель.

После того, как тихие уведомления достигли моего приложения, я запускаю метод фона для расчета пользовательских данных и сравниваю, достигли ли его данные цели, и если да, я вызываю локальное уведомление, чтобы пользователь мог открыть приложение и проверить.

Не работает последовательно, иногда я получаю его, а иногда и нет. Когда я отлаживался, я видел, что выполнение приостанавливается между ними, и выполнение возобновляется только в том случае, если пользователь снова открывает приложение или снова запускает молчание. Не уверен, почему фоновое выполнение (расчет) приостанавливается, и если я запускаю push или если я вручную попытаюсь открыть приложение, я вижу, что точка останова возвращается и продолжается с места, где она была приостановлена.

Мне интересно, из-за какого-то временного предела ???

UPDATE:

Я использую UrbanAirshipSDK и у них есть некоторые обработчики переопределены, и я использую метод ниже обрабатывать уведомления. Это написано в appdelegate и вызывается, когда я получаю уведомление, когда приложение находится в фоновом режиме.

/** 
* Called when a push notification is received while the app is running in the background 
* for applications with the "remote-notification" background mode. 
* Overridden by receivedBackgroundNotification:fetchCompletionHandler. 
* 
* @param notification The notification dictionary. 
*/ 
- (void)receivedBackgroundNotification:(NSDictionary *)notification; 

Сначала я проверяю содержание, доступное в полезной нагрузке, и обрабатываю как молчание и выполняю вычисления. Это работает прерывисто, но не последовательно. Я закрываю дату выхода, и я действительно волнуюсь.

+0

Что включает в себя этот расчет? – Wain

+0

Извлечение Coredata и сравнение значений, полученных с пороговыми значениями цели. Размер данных записей очень мал – anoop4real

+1

показать код, который вы используете, у вас должно быть достаточно времени для выборки и локального сравнения – Wain

ответ

0

Я предполагаю, что вы используете:

- (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler 

В этом случае вы не должны забывать, звонить обработчик завершения и в соответствии с Apple docs у вас есть только 30 секунд, чтобы сделать так:

Как только вы завершите обработку уведомления, вы должны вызвать блок в параметре обработчика или ваше приложение будет прекращено. Ваше приложение имеет до 30 секунд времени настенного времени, чтобы обработать уведомление и вызвать указанный блок обработчика завершения. В практике вы должны вызвать блок обработчика, как только вы закончите , обрабатывая уведомление. Система отслеживает прошедшее время, мощность и затраты на данные для загрузки фонограмм вашего приложения. Приложения, которые используют значительное количество энергии при обработке удаленных уведомлений не всегда могут быть разбужены раньше, чтобы обрабатывать будущие уведомления.

+0

Привет, я обновил свой ответ несколькими подробностями – anoop4real