Как вы управляете фоновыми запросами виджетов iOS?

#ios #widget #widgetkit

#iOS #виджет #widgetkit

Вопрос:

Я пытаюсь понять документацию Apple по фоновым сетевым запросам виджетов.

Чтобы обработать результат сетевого запроса, используйте модификатор onBackgroundURLSessionEvents(соответствующий:_:) конфигурации вашего виджета и выполните следующие действия:

  • Сохраните ссылку на completion параметр. Вы вызываете обработчик завершения после обработки всех сетевых событий.
  • Используйте identifier параметр, чтобы найти URLSession объект, который вы использовали при инициировании фонового запроса. Если расширение вашего виджета было прекращено, используйте идентификатор для повторного создания URLSession .

Что касается первого пункта, о каком completion параметре здесь идет речь? Это completion параметр onBackgroundURLSessionEvents(matching:_:) функции или, возможно, это обработчик завершения IntentTimelineProvider ‘s getTimeline(for:in:completion:) ? Если это первое, не означает ли это сохранение нескольких обработчиков завершения на случай нескольких событий? И какова цель вызова этого обработчика завершения?

Что касается второго пункта, как вы используете identifier для воссоздания URLSession ? getTimeline(for:in:completion:) Следует ли сохранять конфигурацию на диск для последующего доступа при повторном создании сеанса?

Чтобы обновить временную шкалу вашего виджета после завершения сетевого запроса, вызовите методы WidgetCenter из реализации urlSessionDidFinishEvents вашего делегата.

В этой части кажется, что они имеют в виду вызов метода WidgetCenter.shared.reloadTimelines(ofKind:) . Однако не приведет ли это к обновлению всех экземпляров вашего виджета? Или система знает, что нужно обновлять только тот, который его вызвал?

Комментарии:

1. Дескриптор завершения — это второй параметр, передаваемый вашему urlSessionEvent: закрытию (закрытие, которое вы передаете в качестве второго параметра onBackgroundURLSessionEvents(matching:_:) )

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

3. @GilBirman вы когда-нибудь выясняли, как правильно использовать фоновые загрузки с виджетом?