Удаленное тихое уведомление IOS не работает во время телефонных звонков / колебаний сети

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

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

Я делаю следующие вещи:

1: Enabled 2 background mode
   i) Background fetch.
   ii)Remote notification. 

2: Sending notification as:

   { 
  aps: {
          content-available: 1,
          sound: ""
          message:"background fetch"
       }
    } 

and 
3)
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
     UALogFull(@"\n\n BACKGROUND NOTIFICATION \n\n\n");
     completionHandler(UIBackgroundFetchResultNewData);

}

Мое наблюдение: приложение не падает. Он не регистрирует «ФОНОВОЕ УВЕДОМЛЕНИЕ» даже во время телефонного звонка (мобильный телефон подключен к Wi-Fi).

Подскажите, пожалуйста, как добиться точности?


person Uttam Kadam    schedule 18.11.2014    source источник
comment
Пожалуйста, дайте мне знать решение.   -  person Uttam Kadam    schedule 24.11.2014
comment
Вы слышите звук при получении push-уведомления во время телефонного звонка/когда приложение находится в фоновом режиме?? Попробуйте эту полезную нагрузку: { "aps": { "alert": "Hello World", "sound": "default", "content-available": 1 } } чтобы убедиться, что вы видите оповещение и получаете push-уведомление.   -  person iMemon    schedule 25.11.2014
comment
Устройство получает уведомление и работает, но какое-то время устройство не может перейти из режима ожидания в фоновый режим.   -  person Uttam Kadam    schedule 25.11.2014
comment
Я предполагаю, что ваше приложение убито, когда вы получаете уведомление. Если это так, вам также необходимо обрабатывать уведомления в application:didFinishLaunchingWithOptions:. Подробности здесь и здесь некоторые похожие вопросы, если это проблема: Сбой при обработке удаленного уведомления когда приложение не запущено ПЛЮС параметры запуска iPhone   -  person iMemon    schedule 25.11.2014
comment
Нет видимого уведомления, оно в фоне.   -  person Uttam Kadam    schedule 25.11.2014
comment
Да, я знаю. Я просто говорю, что вы попробуйте это, чтобы отладить проблему. Если вы можете получать видимые уведомления, вы также будете получать тихие уведомления. Вы обработали уведомление в application:didFinishLaunchingWithOptions:, как было предложено?   -  person iMemon    schedule 25.11.2014
comment
Да, я тоже этим занимаюсь. приложение начинает работать после некоторой задержки.   -  person Uttam Kadam    schedule 25.11.2014
comment
Давайте продолжим обсуждение в чате.   -  person iMemon    schedule 25.11.2014
comment
Все еще с той же проблемой. Есть ли что-то, чего мне не хватает?   -  person Uttam Kadam    schedule 25.11.2014


Ответы (1)


Я считаю, что то, что вы отправляете тихое уведомление, не означает, что приложение сразу же получит уведомление.

Из моих наблюдений с использованием GSM iPhone. Всякий раз, когда я разговариваю по телефону, тип сотовых данных сбрасывает диапазон, например. LTE -> 3G, 3G -> EDGE и т. д. Таким образом, сеть передачи данных ненадежна.

Вы также заявляете, что это не происходит во время колебаний сети, система получила уведомление, а не передала его в целях экономии заряда батареи. Чем медленнее сотовое соединение для передачи данных, тем больше разряжается батарея.

Что касается телефонного звонка по Wi-Fi, до сих пор не получено тихое уведомление. Сотовый чип работает, использование Wi-Fi еще больше разряжает батарею.

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

При телефонном звонке -> Сотовый чип используется для передачи голоса. Передача данных — это дополнительная работа для чипа, которая может значительно сократить срок службы батареи.

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

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

слишком рано: контент все еще относительно свежий. долгое время: пользователь мало использует приложение. Экономьте ресурсы.

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

Наконец, чтобы процитировать документацию:

Важно: доставка уведомлений является «максимальным усилием», а не гарантируется. Он не предназначен для доставки данных в ваше приложение, а только для уведомления пользователя о наличии новых доступных данных.

Найти здесь

person Naughty_Ottsel    schedule 26.11.2014
comment
Я отправляю уведомление каждые 5 мин. и он падает всего 6-8 раз за 24 часа. - person Uttam Kadam; 26.11.2014
comment
Вы не можете гарантировать, что каждое уведомление будет доставлено. 2% отказов — это очень хорошо. Как я уже сказал, система определяет, пропускать ли уведомление, исходя из разных факторов. Кроме того, добавление в систему APNS является максимальным усилием, и нет никаких гарантий для 100% доставки. Если бы вы запускали свое приложение на устройстве с низким, средним и высоким уровнем использования, у вас были бы разные показатели успеха. - person Naughty_Ottsel; 26.11.2014
comment
Я обобщил это, но проблема в том, что некоторое время он не будет работать с серией уведомлений (отбрасывать от 2 до 3 уведомлений подряд). - person Uttam Kadam; 26.11.2014
comment
Тот факт, что одно уведомление не было отправлено/обработано, не означает, что следующее будет отправлено. Если это до APNS, будет отправлено только самое последнее уведомление. Если это связано с тем, что система не обрабатывает / не пропускает уведомление, я полагаю, что оно просто терпит неудачу и оставляет его в покое, система не знает, действительно ли беззвучное уведомление, и поскольку оно молчит, оно не критично для пользователя, таким образом, забудьте об этом и дождитесь обработки. - person Naughty_Ottsel; 26.11.2014
comment
Проблема не в том, что уведомление не получено, а в том, что приложение не просыпается... см. похожий вопрос... - person Baris Akar; 06.08.2015