2016-05-10 4 views
0

現在、地域に入るときにユーザーにローカル通知を送信しています。しかし、私はすぐに通知したくない場合もあります。なぜなら、時にはこれらの地域を過ぎて運転し、いつもそれらについて通知を受けたくないからです。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) 
     } 
    } 
} 
+0

リージョンの監視だけでは、この操作を行うことはできません。バックグラウンドでアプリを起動させるには、何か別のものが必要です。地域にいたら完全な位置更新を開始することも、サーバーを使用してサイレントプッシュ通知を送信することもできます。訪問の監視を開始することもあります – Paulw11

答えて

1

これを行う方法があります: アプリは、ユーザーが領域に入ったことを通知されたとき、それは30秒後にローカル通知をスケジュールする必要があります。この通知で識別子を設定する必要があります。 何も起こらない場合、この通知はユーザーに配信されます。

これを防ぐために何が起こる可能性がありますか? ユーザーが地域を離れる。

したがって、ユーザーが地域から退出したことを通知されると、既知の識別子を持つ予定された通知が検索され、関連性のないものとして削除されます。

+0

私は実際にこの考えが本当に好きです。そして、おそらくiOSからバックグラウンドプロセスを実行するための時間を要求することになったのではないでしょうか。あなたのアイデアはずっと簡単で、おそらくもっと効率的です。私はこれを念頭に置いておきます。ありがとう! –

関連する問題