Можно ли использовать push-уведомления для запуска кода без уведомления Пользователя?


У меня есть приложение, которое должно взаимодействовать с сервером (чтобы обновить его данные) каждые 24 часа. Это должно произойти, даже если приложение не открыто, ни в фоновом режиме.

В идеале мне бы хотелось:

  • каждые 24 часа мой сервер отправляет push-уведомление на iPad
  • это пробуждает приложение и запускает код, необходимый для обновления данных
  • уведомление затем отбрасывается

Возможно ли что-либо из этого?
Это приложение только проснулось После того, как пользователь нажмет на уведомление? Или я могу запустить некоторый код, прежде чем показывать уведомление? Могу ли я вообще отказаться от уведомления?

Если Push-уведомления не являются правильным способом сделать это, то что же???

Спасибо, ребята!

4 6

4 ответа:

С выпуском iOS 7 это, наконец, возможно с помощью удаленных / беззвучных уведомлений. Они работают так же, как и Push-уведомления, но вместо немедленного оповещения пользователя они могут запускать фоновый режим выборки и загружать/загружать новое содержимое.

Вот простой учебник: http://www.objc.io/issue-5/multitasking.html

Это возможно только в том случае, если ваше приложение является приложением газетного киоска, если это так, вы можете отправлять push-уведомление с помощью content-available: true один раз в 24 часа.

Если это не приложение для газетных киосков, вы можете вместо этого использовать GPS-ограждения для запуска кода. Разрешается разрешить пользователю устанавливать GPS-ограждения, если они хотят, чтобы приложение обновлялось, когда пользователь приближается к определенной области (т. е. их дом / работа). Это разбудит приложение,и вы сможете запустить фоновую загрузку. Instapaper, например, делает это.

Если период всегда будет составлять 24 часа, Вы можете использовать локальные уведомления вместо push-уведомлений.

Ваше приложение не сможет выполнить ни одного кода, если пользователь не откроет push-уведомление, push-уведомления обрабатываются ОС, и ваше приложение не имеет никакого контроля над ними, пока оно не активировано или в фоновом режиме вы должны взглянуть на руководство по программированию push-уведомлений

Альтернативный способ выполнить то, что вы пытаетесь сделать, - это получить данные. с сервера каждый раз, когда приложение запускается и последнее обновление произошло на 24 часа раньше,

  1. при каждом обращении к серверу сохраняйте дату в NSUserDefault
  2. каждый раз, когда пользователь открывает приложение, проверьте, произошел ли последний контакт с сервером до 24 часов, а затем обновите данные

Это возможно с помощью так называемого VOIP Push-уведомления. Это уведомление может запускать код в фоновом режиме, даже если приложение полностью закрыто.