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

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

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


person jackson89    schedule 24.07.2020    source источник
comment
Это может вам помочь: Как обновить данные виджета?   -  person pawello2222    schedule 22.09.2020
comment
Отвечает ли это на ваш вопрос? Обмен данными между основным приложением и виджетом в SwiftUI для iOS 14   -  person pawello2222    schedule 06.11.2020


Ответы (2)


Да, это возможно с помощью одного из 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

person Taylor Johnson    schedule 24.07.2020
comment
Я не уверен, что этот принятый ответ действительно отвечает на этот вопрос. Или, по крайней мере, то, что я понимаю из вопроса, заключается в том, что человек запрашивает данные через вызов API, а затем он хочет отправить эти данные из основного приложения в widgetExtension, чтобы он мог отображать их в своем виджете. - person J Arango; 14.08.2020
comment
Это будет обрабатывать этот случай, пока разработчик хранит данные из вызова API в общем хранилище с помощью групп приложений. Виджеты не запускают процессы постоянно, поэтому я не верю, что есть способ отправить данные из приложения в виджет без использования общего хранилища. - person Taylor Johnson; 19.08.2020

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

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

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

person Artem Kirillov    schedule 11.09.2020