iOS14 小部件可以请求主应用程序更新其数据吗?
Posted
技术标签:
【中文标题】iOS14 小部件可以请求主应用程序更新其数据吗?【英文标题】:Can iOS14 widget requests main app to update its data? 【发布时间】:2020-10-08 06:21:08 【问题描述】:我的应用需要最新数据,但主应用可能有旧数据。
所以我想请求主应用更新其数据。
有可能吗?
如果不是,我想知道任何替代方法。
(小部件是否应该向服务器请求最新数据??)
谢谢
=== 更新
我发现了很多教程,它们都使用来自 getTimeline
的 http 请求方法来获取最新数据(而不是来自主应用程序)。这不是我想要的。
有人说在主应用程序和小部件之间共享数据的最简单方法是使用 UserDefaults。但是如果主应用程序不更新用户默认值或使用旧数据更新值,则数据可能是旧的。 (除了服务器数据总是最新的数据)
所以我想知道的是“小部件使主应用程序更新其数据并更新用户默认值并调用reloadTimelines
”的方式。所以小部件可以使用最新数据。
【问题讨论】:
【参考方案1】:Widget 无法告诉其父 App 刷新其数据。
您可以:
直接在 Widget 中获取数据 - 请参阅:How to refresh Widget data? 在应用中启用后台通知(请参阅How to run code when your app is terminated),并在收到通知时强制小部件刷新其时间线,使用:WidgetCenter.shared.reloadAllTimelines()
实际上,直接在 Widget 中获取数据可能会更好。这样您就可以只获取必要的数据 - 小部件视图通常比应用视图显示的信息少得多。
【讨论】:
经过几天的研究,我从小部件代码中编写了所有服务器通信代码。哈哈。谢谢【参考方案2】:是的,你可以喜欢这个; 当你创建一个用于小部件更新的 TimelineProvider 时,你必须实现这个函数,
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ())
此函数等待创建您的小部件更新时间线。您可以发送请求,响应后,您可以创建时间线并返回 func 的完成。
【讨论】:
谢谢。但我想知道的有点不同。我编辑了我的问题。再次感谢。 Widget 就像您 iPhone 上的一个“独立”应用程序。它不能要求其父应用程序唤醒并获取新数据。您要么直接从小部件获取新数据,要么等到用户打开父应用程序,获取新数据,然后将其保存到UserDefaults(suiteName: "your.suiteName")
是的。现在我很确定如果我真的需要使用最新数据,我必须直接向服务器请求。谢谢以上是关于iOS14 小部件可以请求主应用程序更新其数据吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 14 中的主应用程序和小部件之间共享 UserDefaults
通过服务更新 Android 小部件,即执行 http 请求
App Store Connect 是不是会跟踪小部件在 iOS 14 上的安装情况?