检测用户在后台状态 iOS 中何时杀死应用程序

Detect when app killed by user in background state iOS

提问人:tauheed 提问时间:1/7/2020 最后编辑:Tharindu Ketipearachchitauheed 更新时间:1/6/2022 访问量:4794

问:

我正在一个聊天应用程序中工作,我需要显示用户状态(离线/在线)。 当我的应用程序处于前台和后台时,我需要将用户显示为在线(通过 VoIP 管理)。 但是当用户终止应用程序时,它应该进入离线状态。

我必须维护一个标志来显示我在委托函数中管理的离线状态,但此函数仅在应用程序处于前台状态时调用,并且用户通过双击主页按钮并向上滑动来杀死它。 当应用处于后台状态时,不会调用此函数。我的意思是只需单击按主页(应用程序将在后台运行),然后再次双击向上滑动。applicationWillTerminate

是否有任何功能可以让我获得 100% 调用,无论应用程序处于后台/前台状态并且用户杀死应用程序?

iOS Objective-C Swift iPhone Cocoa-Touch

评论


答:

8赞 matt 1/7/2020 #1

是否有任何功能可以让我获得 100% 调用,无论应用程序处于后台/前台状态并且用户杀死应用程序?

不。恰恰相反。如果您的应用程序在后台运行时被终止,如果它被暂停(即由于特殊授权而未在后台运行),则 100% 确定您不会收到任何事件。你不能。您已暂停且未运行。应用程序在睡眠中死亡。

评论

1赞 tauheed 1/7/2020
保持挂起状态。如果您在后台推送应用程序,然后立即从后台杀死应用程序(使用双倍并向上滑动)怎么办?在这种情况下,您的应用在终止之前处于后台状态。然后,您将在任何委托/函数中获得确定的调用。
0赞 5/1/2021
除了(静默推送通知)之外,@matt有什么想法,因为我的应用程序不使用互联网,它会更新应用程序中的健康结果。
0赞 matt 5/1/2021
为什么?如果它已暂停,则无需更新任何内容。您在取消挂起时进行更新。
0赞 Aleem 1/7/2020 #2

不,根据 Apple 文档

https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623111-applicationwillterminate?language=objc

对于支持后台执行的应用,当用户退出应用时,通常不会调用此方法,因为在这种情况下,应用只是移动到后台。

你可以做什么 当你的应用程序进入后台时,在几秒钟后(无论你找到什么合适的时间)执行一个方法(它击中了一个 API 以保持在线状态),如果方法在特定秒后成功调用,则用户保持在线,如果在指定的秒后没有调用,则服务器将其状态更新为离线。因此,它需要服务器和客户端处理。

评论

0赞 tauheed 1/7/2020
实际上,我们已经实现了VoIP(静默通知)来获取回调,并在该委托中向应用程序发送ping(响应服务器)以获得后台支持。只有当应用程序从后台正确杀死时,我才需要显示离线。即使应用程序被杀死,它也会收到回调,因此无法避免该ping,直到我不会设置标志来了解应用程序是否被用户从后台终止。