如何在 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的主要内容,如果未能解决你的问题,请参考以下文章