如何在 iOS 中以终止/终止模式调用 API

Posted

技术标签:

【中文标题】如何在 iOS 中以终止/终止模式调用 API【英文标题】:How to call API in terminated/Killed mode in iOS 【发布时间】:2019-06-10 07:36:21 【问题描述】:

我尝试在应用程序终止的情况下调用 api。

我的要求是通过 api 调用发送位置(经纬度)。我可以在前台和后台模式下发送位置,但不能在应用程序终止模式下发送,比如用户杀死了应用程序。

我知道 Apple 不会允许这样做,因为我在这个主题中找到了很多答案。但我的问题是有一些应用程序可以做到这一点。就像 Life360 一样。如果应用程序终止模式,此应用程序可以发送位置。

我在地图位置看到我的家人,但他的应用程序没有运行。

【问题讨论】:

【参考方案1】:

保持 BackgroundModes 开启以通过 XCode 设置更新位置。

然后使用startMonitoringSignificantLocationChanges()regionMonitoring的组合。

当您的应用程序进入后台模式/被终止时创建一个区域。

在 didExitRegion 中,开始更新位置。

每当位置发生重大变化时,您的应用都会通过委托方法接收更新

当您的应用处于终止模式并且应用接收到位置更新时,会在didFinishLaunching 方法的launchOptions?[UIApplicationLaunchOptionsKey.location] 中收到它?[UIApplicationLaunchOptionsKey.location]

【讨论】:

你能指导我一步一步吗?我知道这看起来很奇怪,但我很困惑。后台位置获取功能现已开启。 @Raj_Ogma :我理解你很困惑,但这里没有人会一步一步地指导你解决问题。相反,可以尝试使用上述解决方案一步一步,您将非常接近解决方案。 谢谢山图努。我有两个问题:#1- 如果我打开 startMonitoringSignificantLocationChanges 那么会调用 didUpdateLocations 委托吗?和#2 - 你能详细说明你的第 5 点吗【参考方案2】:

好吧,这并不可取,但您可以通过添加观察员来使用NotificationCenter,或者您可以使用UserNotifications 并安排您的具体交付时间请求。

【讨论】:

你能指导我一些代码吗?它会帮助我。我是本节的新手。 您可以执行类似NotificationCenter.default.addObserver(self, selector: #selector(self.applicationSetup), name: UIApplication.willTerminateNotification, object: nil) 的操作,并在函数 applicationSetup 上执行您想做的任何事情 我希望这是重复的工作。它似乎会调用一次。 那么你将不得不使用UserNotifications推迟本地通知并开启重复 @Raj_Ogma 快速浏览以下文章,了解如何在 Swift 中使用本地通知。 medium.com/quick-code/…

以上是关于如何在 iOS 中以终止/终止模式调用 API的主要内容,如果未能解决你的问题,请参考以下文章

如何正确停止线程

并发设计模式 | 两阶段终止模式:如何优雅地终止线程?

C语言如何终止线程

当应用程序处于终止模式时,如何从推送通知重定向到特定的视图控制器

在后台模式和终止模式下获取位置更新 IOS

即使在异常终止时,如何确保调用 UnhookWindowsHookEx?