当用户进入/退出iOS中的位置区域时,在后台执行任务(代码执行/网络调用)

时间:2018-12-31 11:50:01

标签: ios background-process geofencing ios-background-mode

系统:在我的应用程序中,我正在使用地理围栏(监视区域)。每当用户进入或退出监视区域或区域时,如果该应用程序在后台甚至终止,该应用程序都会显示本地通知。这工作得很好。该应用程序能够显示本地通知。

现在,我还需要通过HTTP POST调用向应用程序的后端服务器提交此信息(如果用户位于受监视区域之内或之外)。

问题::应用程序在LocationManager的委托方法中进行API调用,但有时可以,有时不能。如果应用程序未处于前台状态,则似乎代码执行会随机停止。

代码示例

// MARK: - Location Manager Delegate
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
    if region is CLCircularRegion {
        showLocalNotification(forRegion: region)// Works
        updateUserEntryAPICall(region: region) // Sometimes works
    }
}

func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
    if region is CLCircularRegion {
        showLocalNotification(forRegion: region) // Works
        updateUserExitAPICall(region: region) // sometime works
    }
}

我没有在iOS中打开后台模式功能。该应用仍然可以显示本地通知。我是否需要将其打开才能进行网络通话?

enter image description here

请帮助。

1 个答案:

答案 0 :(得分:0)

这似乎是您使用常规的URLSession来发出API请求。您需要确保正在处理后台运行的会话中执行此操作,例如像这样初始化它:

let session = URLSession(configuration: .background(withIdentifier: "foo"))