Как обеспечить актуальность данных, полученных с сервера расширения IOS

ios ios-extensions

371 просмотра

1 ответ

3168 Репутация автора

Этот вопрос относится к приложению:

  1. Это обеспечивает расширение в качестве единственной функции.
  2. Полагается на удаленные данные, полученные с сервера.
  3. Не предлагает ничего полезного в пользовательском интерфейсе, чтобы пользователи регулярно открывали его.

Прекрасным примером для такого приложения могут служить приложения расширения блокировщика контента Safari (iOS 9+), но я считаю, что они не ограничиваются этими приложениями.

Проблема с существующими блокировщиками контента заключается в том, что данные расширения (правила блокировки) обновляются только из основного приложения (например, один раз открывается пользователем). Поскольку расширение включается один раз во время установки, пользователи не собираются регулярно открывать приложение. Таким образом, локальные данные устаревают или устаревают - правила блокировки устаревают, агрессивные рекламодатели адаптируются, а ваше расширение внезапно не блокируется. Я думаю, что смешно говорить пользователю, чтобы приложение продолжало работать, просто чтобы иметь возможность загружать новые правила.

Итак, есть ли законный способ поддерживать актуальность данных для приложений на основе расширений без пользовательского интерфейса:

Вещи, о которых я читаю онлайн, похоже, не работают на самом деле:

  • Фоновая выборка - требует, чтобы приложение запускалось хотя бы в фоновом режиме
  • тихие push-уведомления (с content-available = 1) - кажется, что приложение должно работать хотя бы в фоновом режиме. Может быть перезапущен iOS из завершенного состояния, если пользователь явно не удалял это из списка задач.
  • PushKit (работает и может перезапускать убитые приложения) - подходит только для приложений VoIP
Автор: yurgis Источник Размещён: 18.07.2016 11:08

Ответы (1)


0 плюса

2590 Репутация автора

Упоминаемое вами «тихое push-уведомление» является наиболее многообещающим (и «законным») вариантом. Приложение не требует запуска в фоновом режиме. Push-уведомление заставит систему запустить приложение в фоновом режиме , а когда оно будет завершено, убить приложение. Устройство будет испытывать некоторое мгновенное давление памяти при запуске приложения, но так как вы не планируете делать это часто, это нормально.

Без Push: UI или нет UI не проблема. Даже если расширение не показывает пользовательский интерфейс, расширение должно быть запущено, чтобы что-то сделать, в какой-то момент - и в этот момент вы можете обновить данные с сервера. Когда это зависит от расширения . Настоятельно рекомендуется использовать встроенный в сервер способ быстрой проверки необходимости обновления данных, например, поиск If-Modified-Sinceзаголовка HTTP, чтобы его можно было часто проверять при очень низких затратах.

Блокировщики содержимого Safari кажутся исключением - во время блокировки Safari не выполняет код из расширения. Вместо этого список действий JSON используется и компилируется как одноразовое событие. Поэтому для обновления приложения потребуется вызвать reloadContentBlocker(withIdentifier: completionHandler:) ссылку на класс SFContentBlockerManager .

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

Автор: Mike Sand Размещён: 25.07.2016 10:46
Вопросы из категории :
32x32