30秒后检查用户是否仍在CLRegion内 - 1分钟

时间:2016-05-10 20:01:43

标签: ios swift cllocationmanager

我目前在用户进入地区时向他们发送本地通知。但是,我不想立即通知他们,因为有时他们会开车经过这些地区,并且不想一直得到关于他们的通知。

因此,每当用户进入该区域时,都会调用didEnterRegion。我想等待30秒(或可配置的时间),然后检查用户是否仍在该区域(我知道该怎么做),如果用户仍在该区域,则通知用户。

Android有一种方法可以使用暂停属性。

我知道我可以使用dispatch_after(),但是当手机处于睡眠状态时(或暂停应用程序)我无法获得主线程。

当进入某个地区时,Apple的设计会自动唤醒手机。当发生这种情况时,我想等待30秒,然后再次检查用户是否仍然在位。这是一个目前无效的代码段:

// triggered when user enters monitored region.
func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion) {
    // Wait 60 seconds and if user is still within region, try to send notification 
    delay(60){
        self.locationManager.requestStateForRegion(region)
    }
}

func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) {
    // only notify user if user is still within this region.
    if state == CLRegionState.Inside{
        if region is CLCircularRegion {
            handleRegionEvent(region)
        }
    }
}

1 个答案:

答案 0 :(得分:1)

有办法做到这一点: 当应用程序收到用户已进入区域的通知时,应该在30秒之后安排本地通知。您需要在此通知中设置标识符。 现在,如果没有任何反应,该通知将被传递给用户。

可能会发生什么阻止这种情况? 用户离开该区域。

因此,当应用程序收到用户退出某个区域的通知时,它应该查找带有某个已知标识符的预定通知,并将其删除,因为它已不再相关。