iOS14 小部件可以请求主应用程序更新其数据吗?

Can iOS14 widget requests main app to update its data?

我的应用需要最新数据,但主应用可能有旧数据。

所以我想请求主应用更新它的数据。

可能吗?

如果不是,我想知道任何替代方法。

(widget应该向服务器请求最新数据吗??)

谢谢

=== 更新

我找到了很多教程,它们都使用来自 getTimeline 方法的 http 请求来获取最新数据(不是来自主应用程序)。这不是我想要的。

有人说在主应用程序和小部件之间共享数据的最简单方法是使用 UserDefaults。但是如果主应用程序不更新 userdefaults 值或使用旧数据更新值,则数据可能是旧的。 (旁边的服务器数据总是最新的数据)

所以我想知道的是“小部件使主应用程序更新其数据并更新 userdefault 并调用 reloadTimelines 的方式。所以小部件可以使用最新数据。

是的,你可以喜欢这个; 当你创建一个 TimelineProvider 用于 widget 更新时,你必须实现这个函数,

 func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ())

此函数等待创建您的小部件更新时间轴。您可以发送请求,响应后,您可以创建时间线和 return 功能的完成。

Widget 无法通知其父 App 刷新其数据。

您可以:

  • 直接在小部件中获取数据 - 参见:
  • 在应用程序中启用后台通知(参见 How to run code when your app is terminated),并在收到通知时强制 Widget 使用以下方式刷新其时间线:
WidgetCenter.shared.reloadAllTimelines()

实际上,直接在 Widget 中获取数据可能会更好。这样您就可以只获取 必要的 数据 - 小部件视图通常比应用程序视图显示的信息少得多。