在特定时间获取背景

时间:2018-03-19 17:24:59

标签: ios swift xcode9.2 background-fetch

我正在寻找在后台模式下获取数据的解决方案,即使应用已终止。 这个问题有很多教程和答案,但我的问题与其他问题不同。我还没有在stackoverflow上找到任何合适的解决方案,所以发布了这个问题。

我有可以解释的场景。我正在使用存储事件日期,名称,时间,地址等的realm数据库。现在问题是,我想编写一个在后台执行的代码,在这段代码中我想获取所有事件数据并进行比较他们与今天约会的日期。根据这些天之间的剩余天数,发出本地通知,提醒用户特定事件剩余的天数。

  

我想在每天当地时间早上8点调用此后台获取方法。

由于与后台获取和实现混淆,我无法编写任何代码。有谁知道如何实现这个?

帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

我有解决问题的解决方案。据我所说,

  

我想写一个在后台执行的代码,在这个代码中   想要获取所有事件数据并将其日期与今天的日期进行比较。   并根据这两天之间的剩余天数触发本地通知   提醒用户特定事件还有多少天。

因此,当我从API获得响应时,我会为所有具有唯一ID的事件创建本地通知,这些事件会在每天的特定时间触发并重复,在该时间我会显示事件时间和事件的剩余天数。

答案 1 :(得分:2)

Apple文档指出,无法保证何时执行后台获取。由系统决定。

  

系统等待网络和电源状况良好,因此您应该能够快速检索足够数量的数据。

保证唤醒应用程序的方法是从服务器在上午8点发送VoIP推送通知。确保可以在收到推送后唤醒应用程序,并且您将能够执行所需的作业。有关更多详细信息,请https://medium.com/ios-expert-series-or-interview-series/voip-push-notifications-using-ios-pushkit-5bc4a8f4d587

答案 2 :(得分:1)

除了通过推送通知(因为该服务器必须发送推送通知)之外,无法从iOS中的挂起模式唤醒应用程序。

答案 3 :(得分:0)

这是任何地方都没有记录的东西。恕我直言和iOS的经验,自iOS时代开始以来,Apple必须记录用户的活动。 ScreenTime是这些录音的产物,只有Apple能够创建和可视化数据以呈现面向用户的应用程序,该应用程序非常精美地限制,管理和显示您的活动。在WWDC 2018中,甚至引用了苹果甚至会检测到,如果用户每天睡觉前打开晚上9点的应用程序,iOS将允许该应用程序访问该应用程序的所有可能资源(电池,互联网,处理时间等)晚上9点。但是在执行此操作之前,您需要了解您的用户活动。让我们举个例子:

新闻应用: 大多数用户会在早上查看新闻(如果他们不是instagram成瘾者)。目前,即使是苹果也应该偏向于使用后台抓取功能打开您的应用。当然,除非有太多的资源紧缩

游戏:许多游戏允许在用户可以玩另一回合之前将其“充电”或“重新填充”角色的能量来提供限制时间。这样做是为了使上瘾的人可以购买宝石来消除这种限制,从而从中获利。但是,如果您知道重新填充过程是在早上8:00 AM之前完成的,或者用户每天在8:00 AM玩游戏,请相应地配置后台获取。

背景获取是按时间间隔而不是特定时间进行的。

// Fetch data once an hour.
   UIApplication.shared.setMinimumBackgroundFetchInterval(3600)

最后,为什么您不尝试silent push notifications?根据您的问题,我认为无提示通知足以在从服务器发出推送通知后唤醒您的应用程序,下载一些数据并进行计算并提供本地通知。