iOS如何安排任务并在应用关闭后随机执行

3
我在Android上创建了一个应用程序,其中使用了FCM Job Dispatcher。现在我正在开发iOS应用程序,但没有从FCM中找到类似的东西。
然后我尝试查看类似于“Android服务”的内容,以便在应用程序关闭时执行后台任务。但不幸的是,在iOS中没有找到类似的内容。
因此,我只能使用iOS中的本地通知。但我不知道如果我的用例如下是否有帮助:
1.仅在连接互联网(WiFi而非移动数据)且设备处于空闲状态时,应用程序才能运行服务。 2.如果满足上述条件,则必须运行服务,无论应用程序是否正在运行。
所以我很困惑,应该选择什么来执行这种类型的任务。我真的很困惑,像WhatsApp等应用程序如何在后台未运行时接收呼叫和消息。
请分享您的观点,应该在这些情况下使用什么?

1
请在目标设置的“功能”选项卡下查看“后台模式”。 - Malik
@Malik,我不明白你在说什么? - A.s.ALI
您可以使用后台刷新功能定期将数据从您的应用程序发送到服务器。像WhatsApp这样的VoIP应用程序使用PushKit接收传入消息和呼叫的通知。 - Paulw11
@Paulw11 什么是后台刷新?请具体说明,我是安卓新手。 - A.s.ALI
https://developer.apple.com/documentation/uikit/core_app/managing_your_app_s_life_cycle/preparing_your_app_to_run_in_the_background/updating_your_app_with_background_app_refresh - Paulw11
2个回答

4

在应用程序不在前台执行任务的情况下:

1) 应用在后台 - 简单的后台获取将起作用

2) 应用已经终止 -

注意 - 如果用户强制退出应用程序,则除了 VOIP 服务外,其他任何服务都无法使用,但是仅对具有音频/视频通话功能的应用程序提供 VOIP 服务。

案例1 - 用户强制退出应用

您无法做任何事情。

案例2 - 系统基于某些原因终止了应用程序

以下情况下,后台获取将起作用:

  • 与位置相关的服务
  • 音频相关服务
  • 蓝牙/外围设备数据同步
  • 通过静默通知(推送消息在负载中具有 content-available 关键字)进行的后台下载

有关更多参考,请阅读此处


后台获取是用于具有特定执行时间的短期任务。在许多地方,我读到这个时间介于15秒到10分钟之间。假设我有太多数据要发送备份到服务器,它仍然适用于我吗? - A.s.ALI
后台获取功能为您提供了30秒的时间窗口。应用程序仅在30秒内执行任务。 - Ankit Jayaswal
假设我在iOS应用中使用后台获取功能,用户使用我的应用并创建了一些数据,现在我想将备份发送到服务器,但是用户关闭了应用而不是将我的应用放入后台,然后过了一天再次打开应用,并且再次直接关闭应用。这样的话,数据备份将永远不会发送到服务器?你怎么看? - A.s.ALI
你可以在数据库/用户默认设置/钥匙串中保留一个关于“lastBackUpTime”的标志。每当用户进入应用程序时,例如在appDidBecomeActive方法中检查lastBackUpTime和当前时间之间的差异是否大于24小时。在后台静默调用数据备份API。 - Ankit Jayaswal

1
在iOS中,应用程序只能在一些特定的情况下被唤醒,例如:推送通知、后台获取、位置更新等。因此,根据您的需求,您应该检查背景模式并在项目设置中激活所需的模式:
项目编辑器->功能->背景模式。

Background Modes Options

希望这有所帮助。

不,我的问题很简单。假设我想将备份发送到我的服务器,而我的应用程序已关闭(甚至未在后台运行)。现在我想随时将备份发送到服务器,我该怎么做? - A.s.ALI
@SharartiKAKI:我认为在iOS上你做不到那个。唯一的方法是通过我的回答中的某种方法唤醒应用程序,然后你只有非常有限的时间(通常为30秒)将数据发送到服务器。 - qtngo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接