

30秒毎にサーバーへ端末の位置情報を送信するアプリを作成しています。  
アプリが終了されない限り送り続けたく、  
電源OFF→ON後もアプリはバックグラウンドに存在する状態であれば  
送信し続けたいと考えております。

ただ、下記パターンのOFF方法から復帰（電源ON）時、  
iPhone、iPadとで挙動の違いがあるようです。

１．アプリがフォアグラウンド状態で電源OFF（スリープボタン長押し）  
２．アプリがバックグラウンド状態で電源OFF  
３．アプリがフォアグラウンド状態で強制電源OFF（ホーム＋スリープボタン長押し）  
４．アプリがバックグラウンド状態で強制電源OFF

これらを行った後の再起動後、  
iPhone、iPad共にバックグラウンドにはアプリが存在し、  
iPhoneはサーバーへ位置情報を送信するのですが、  
iPadは１の手順以外、バックグラウンドにはアプリは居るものの、  
送信されたり、されなかったりします。  
考えられる原因や、問題点などご教示いただけないでしょうか。

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](https://ja.stackoverflow.com/questions/7404/)  
を参考にしています。

iPhone、iPad共に、OSは9.3.5です。


CC BY-SA 3.0
2016-11-25T09:38:41.957
30666
2016-11-25T09:38:41.957
2017-04-13T12:52:38.920
-1
19714
question
ios xcode objective-c iphone ios9
iPhoneとiPadでの挙動の違いについて（再起動後の位置情報取得）