代码之家  ›  专栏  ›  技术社区  ›  Ankush

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

  •  1
  • Ankush  · 技术社区  · 7 年前

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

    现在我还需要通过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 回复  |  直到 7 年前
        1
  •  0
  •   Gereon    7 年前

    看起来你用的是普通的 URLSession 提出你的api请求。您需要确保在处理后台运行的会话上执行此操作,例如按如下方式初始化:

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