現在、地域に入るときにユーザーにローカル通知を送信しています。しかし、私はすぐに通知したくない場合もあります。なぜなら、時にはこれらの地域を過ぎて運転し、いつもそれらについて通知を受けたくないからです。30秒〜1分後にユーザーがまだCLRegion内にいるかどうかを確認してください
ユーザーがリージョンに入るたびに、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)
}
}
}
リージョンの監視だけでは、この操作を行うことはできません。バックグラウンドでアプリを起動させるには、何か別のものが必要です。地域にいたら完全な位置更新を開始することも、サーバーを使用してサイレントプッシュ通知を送信することもできます。訪問の監視を開始することもあります – Paulw11