Связь между приложением iOS и виджетами для iOS 14

В настоящее время я создаю свои первые виджеты для своих приложений. Данные получают через вызов API. Я хотел бы знать, можно ли сделать этот запрос из приложения, а затем отправить результат этого запроса в виджет? (немного похоже на WatchConnectivity для часов)

Спасибо за вашу помощь:-)

1 ответ

Решение

Да, это возможно с помощью одного из WidgetCenter API для перезагрузки вашей временной шкалы.

...
// make API call
// store data in shared storage that the Widget uses


WidgetCenter.shared.reloadAllTimelines()
// OR
WidgetCenter.shared.reloadTimelines(ofKind: "WidgetKind")

Обратите внимание, что, скорее всего, предпочтительнее использовать reloadTimelines(ofKind: "WidgetKind")поскольку он будет перезагружать только временные шкалы определенного виджета. "WidgetKind" можно найти в вашем определении WidgetConfiguration.

Как правило, виджеты не должны получать какие-либо данные непосредственно из приложения. У виджетов есть концепция TimelineProvider который генерирует временную шкалу, состоящую из записей временной шкалы. Каждая запись указывает дату и время для обновления содержимого виджета и самого содержимого. Если необходимо получить контент с сервера, вы можете использовать стандартные URLSessionAPI в методах поставщика временной шкалы и прикрепите данные к записи временной шкалы. Вот почему поставщик временной шкалы имеет обработчик завершения в качестве параметра в своем методе:

func getTimeline(in: Self.Context, completion: (Timeline<Self.Entry>) -> Void)

WidgerCenter API (recloadAllTimelines() или же reloadTimelines(ofKind:)) предполагается использовать для информирования WidgetKitкогда меняется временная шкала. Например, когда пользователь что-то меняет в основном приложении, отправляет запрос в серверную часть, обновляет базу данных новой информацией, вам необходимо инициировать обновление виджета, а также получить обновленные данные и обновить.

Другие вопросы по тегам