ios 定期背景更新

fgw7neuy  于 2023-08-08  发布在  iOS
关注(0)|答案(2)|浏览(87)

这个问题是对一些过时问题的更新,例如:

我目前正在使用Swift 4为iOS开发一个简单的移动的应用程序。
这是一个类似e.g. WhatsApp的信使应用程序,因为新消息必须立即交付,应用程序必须能够通过JSON请求每分钟为用户检查新消息。

var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid

func registerBackgroundTask() {
    backgroundTask = UIApplication.shared.beginBackgroundTask { endBackgroundTask() }
    assert(backgroundTask != UIBackgroundTaskInvalid)
}

func endBackgroundTask() {
    print("Background task ended.")
    UIApplication.shared.endBackgroundTask(backgroundTask)
    backgroundTask = UIBackgroundTaskInvalid
}

字符串
到目前为止-当应用程序处于后台模式时,大约2分钟后应用程序终止,getnewmessages-timer interval停止并打印出"Background task ended"

如何使用Swift注册一个无限运行的定时器(后台取数),调用update messages函数

iOS后台取 *:定期下载和处理新内容的应用-->我的信使应用

d8tt03nd

d8tt03nd1#

你说:
应用程序必须能够每分钟通过Json请求检查用户的新消息
这是不可取的。如果你这样做,你会耗尽设备的电池,并破坏用户的数据计划。苹果不会让你的应用程序运行超过30秒,他们允许应用程序finish finite-length background tasks
Configuring background execution modes中,Apple列举了允许应用在后台主动运行的特定任务(例如:VOIP、音乐、导航等)。聊天不是其中一项任务。和App Store Review Guidelines都清楚,后台操作模式只能用于它们各自的指定目的。
因此,这就引出了一个正确的问题,即当某个服务器上有数据可用时,应用程序在未激活时,如何正确地告诉用户。答桉是push notifications。是的,它涉及到比您可能想象的更复杂的服务器架构,但这是实现您所期望的UX的唯一方法,即及时通知用户一些传入的聊天消息。(后台获取是另一种方法,但它的调用频率不会接近用户对聊天应用的期望。)
顺便说一句,这种反复轮询某个Web服务的技术在应用程序处于活动状态时也不应该被鼓励。通常会使用套接字,而不是你的应用反复询问是否有可用的数据,服务器会告诉你的应用,当有数据可用于该开放的套接字。它的效率要高得多,并将提供一个更响应的用户体验,太。当套接字可以立即告诉你的时候,为什么要等待周期性的轮询(即使是几秒钟)呢?

rryofs0p

rryofs0p2#

而不是后台应用程序刷新。你应该做的是使用后通知。

1. A user X sends a message to Server to send to Y (Payload)

2. The server has a unique reference to the phone that user Y has 
and sends a notification to him, that he has received a new message from X.

3. If user opens the app, he will then download the new message.

字符串
如果认为这就是WhatsApp的工作原理,那是合理的,因为每分钟都在刷新后台,这会消耗电池。
这样,用户就不会每分钟都轮询消息,当新消息到达时,他将收到新的通知。
这可以用amazon的SNS服务来实现,文档中写得相当清楚。

相关问题