Связь между приложением 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
который генерирует временную шкалу, состоящую из записей временной шкалы. Каждая запись указывает дату и время для обновления содержимого виджета и самого содержимого. Если необходимо получить контент с сервера, вы можете использовать стандартные
URLSession
API в методах поставщика временной шкалы и прикрепите данные к записи временной шкалы. Вот почему поставщик временной шкалы имеет обработчик завершения в качестве параметра в своем методе:
func getTimeline(in: Self.Context, completion: (Timeline<Self.Entry>) -> Void)
WidgerCenter
API (recloadAllTimelines()
или же
reloadTimelines(ofKind:)
) предполагается использовать для информирования
WidgetKit
когда меняется временная шкала. Например, когда пользователь что-то меняет в основном приложении, отправляет запрос в серверную часть, обновляет базу данных новой информацией, вам необходимо инициировать обновление виджета, а также получить обновленные данные и обновить.