2016-05-10 57 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請求運行後臺進程的時間。你的想法更簡單,可能更有效。我會牢記這一點。謝謝! –

相關問題