2016-05-10 26 views
0

我正在向用户发送本地通知,当他们进入区域时。不过,我不想立即通知他们,因为他们有时会赶过这些地区,不想一直通知他们。在30秒后检查用户是否仍在CLRegion中 - 1分钟

所以无论何时用户输入区域,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) 
     } 
    } 
} 
+0

你不能单独使用区域监控来做到这一点。你需要别的东西在后台触发你的应用。您可以在位于该地区后启动完整位置更新,也可以使用服务器发送静默推送通知。你也可以看看开始访问监测 – Paulw11

回答

1

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

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

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

+0

我其实很喜欢这个想法。这可能比我最终做的要好,那就是从iOS请求运行后台进程的时间。你的想法更简单,可能更有效。我会牢记这一点。谢谢! –

相关问题