そこで、didEnterRegion に関連するコードについて質問しましたが、具体的すぎたのかもしれません。したがって、特にアプリがバックグラウンドにある場合に、リージョン モニタリングのより一般的な用語でメソッド呼び出しの順序を明確にするよう誰かに依頼できますか。
私の理解は次のとおりです。
- アプリは startMonitoringForRegion を呼び出してリージョンを登録します。
- ユーザーがホームボタンをタップするかデバイスをロックすると、アプリはバックグラウンドに入ります。
- デバイスの場所は、アプリとは別に OS レベルで監視されます。ユーザーの現在の場所を確認するためにアプリが OS によって起動されることはありません。
- ユーザーが境界を越えてリージョンに入ると、OS は最初にリージョンを登録したアプリを探し、そのアプリを起動します。
- アプリはバックグラウンドで起動され (didFinishLaunchingWithOptions: は呼び出されません)、CLLocationManager デリゲートがセットアップされ、didEnterRegion デリゲート メソッドが呼び出されます。
- 私の場合、これはすぐに表示される UILocalNotification を設定します (バナーは、たとえば別のアプリが使用されている場合はホーム画面に表示され、電話が休止状態の場合はロック画面に表示されます)。
- ユーザーがロック画面でスワイプするか、バナーをタップして通知を操作すると、アプリが起動され、appWillEnterForeground/appWillBecomeActive が呼び出され、アプリのデリゲート didRecieveLocalNotification: メソッドが実装されている場合は呼び出されます。
これは私の理解ですが、アプリがバックグラウンドにある場合は UILocalNotification が起動されないため、おそらく間違っています。誰かがどのビットが間違っているかを明確にできますか?