gpt4 book ai didi

ios - 如何在 iOS 应用程序后台发出间歇性 HTTP POST 请求 - Swift

转载 作者:行者123 更新时间:2023-11-30 11:42:47 25 4
gpt4 key购买 nike

您好,我正在制作一个将 POST 位置更新请求发送到 Web 应用程序的应用程序。我有一个名为 locationUpdate 的函数,我想在应用程序进入后台后间歇性地调用该函数,但我还没有找到一种方法来执行此操作。

我已设置“始终允许位置”等所有基础知识。由于 AppDelegate 文件中的以下代码,应用程序当前在进入后台时会立即发出一个 HTTP POST 请求:

 func applicationDidEnterBackground(_ application: UIApplication) {

sendLocation.determineCurrentLocation()
}

我在 AppDelegate 中也有这个,因为我在一些堆栈溢出答案中看到过它:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
return true
}

所有这一切,只是应用程序不会多次调用 sendLocation.defineCurrentLocation() (发出 POST 请求的函数),即应用程序关闭时。

谁能告诉我如何实现sendLocation函数的间歇调用?

已编辑以显示我的位置管理器:

 func determineCurrentLocation(){

locationManager.delegate = self
locationManager.allowsBackgroundLocationUpdates=true
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()


if CLLocationManager.locationServicesEnabled(){
DispatchQueue.main.async {

self.locationManager.requestLocation()
}

}
else if (!CLLocationManager.locationServicesEnabled())
{
print("You need to enable location services to use this app")

}




}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){
locationManager.stopUpdatingLocation()
userLocation = locations[0] as CLLocation
locationStruct.latitude=userLocation?.coordinate.latitude
locationStruct.longitude=userLocation?.coordinate.longitude



print(userLocation?.coordinate.latitude)
print(userLocation?.coordinate.longitude)

sendLocationPost()


}

最佳答案

除非您将应用设置为路线导航应用并请求许可以在后台获取位置更新,否则您将无法执行您想要执行的操作。

应用程序在挂起之前只会在后台运行很短的时间。

您可以通过 beginBackgroundTask(expirationHandler:) 调用请求更多后台时间,但这通常限制为最多 3 分钟的后台时间。 (搜索该方法以查找有关它的文档。)

仅允许某些类型的应用程序在后台无限期运行。 (逐向导航应用程序和流媒体音乐应用程序。)您必须设置 info.plist 来声明您的应用程序是这些类型的应用程序之一。 Xcode 附带的 iOS 文档对此进行了记录。

编辑:

正如保罗在评论中指出的那样,您可以请求“始终”位置更新权限,然后请求重大位置更改更新,尽管这些相当粗略,并且您无法控制位置更新之间的时间间隔(并赢得了在操作系统确定用户已经移动了很远的距离之前,不会获得任何更新。)

关于ios - 如何在 iOS 应用程序后台发出间歇性 HTTP POST 请求 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49163113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com