iPhoneとiPadでの挙動の違いについて(再起動後の位置情報取得)
30秒毎にサーバーへ端末の位置情報を送信するアプリを作成しています。
アプリが終了されない限り送り続けたく、
電源OFF→ON後もアプリはバックグラウンドに存在する状態であれば
送信し続けたいと考えております。
ただ、下記パターンのOFF方法から復帰(電源ON)時、
iPhone、iPadとで挙動の違いがあるようです。
1.アプリがフォアグラウンド状態で電源OFF(スリープボタン長押し)
2.アプリがバックグラウンド状態で電源OFF
3.アプリがフォアグラウンド状態で強制電源OFF(ホーム+スリープボタン長押し)
4.アプリがバックグラウンド状態で強制電源OFF
これらを行った後の再起動後、
iPhone、iPad共にバックグラウンドにはアプリが存在し、
iPhoneはサーバーへ位置情報を送信するのですが、
iPadは1の手順以外、バックグラウンドにはアプリは居るものの、
送信されたり、されなかったりします。
考えられる原因や、問題点などご教示いただけないでしょうか。
AppDelegate内では以下を行ってます。
applicationWillResignActive
stopUpdatingLocationでStandard Location Service停止。
startMonitoringSignificantLocationChangesで基地局ベースに切り替え。
applicationDidEnterBackground
stopMonitoringSignificantLocationChangesで停止
stopUpdatingLocationでStandard Location Service停止。
startLocationServiceでモニタリング開始
applicationWillTerminate
stopUpdatingLocationでStandard Location Service停止。
startMonitoringSignificantLocationChangesで基地局ベースに切り替え。
willFinishLaunchingWithOptions
[[CLLocationManager alloc] init]を行い、
startMonitoringSignificantLocationChangesを実施。
[NSTimer scheduledTimerWithTimeInterval:30.0f … にて、30秒毎にメソッドを呼び出しています。
iPhoneでは、didUpdateLocationsも呼び出され、30秒毎に該当の処理をしてくれます。
参考サイトとして、
applicationDidEnterBackground、applicationWillTerminate
に関しては下記を参考にし、
http://mb.cloud.nifty.com/doc/tutorial/geolocation-push-notification2.html
applicationWillTerminateが呼ばれていないようにも見えたので(ログを仕込んで確認)、
applicationWillTerminateと同じことをapplicationWillResignActiveで実施してます。
willFinishLaunchingWithOptionsは、
iOSアプリ終了時の位置情報取得について。SignificantLocationChanges
を参考にしています。
iPhone、iPad共に、OSは9.3.5です。