Objective-c 位置情報BG処理について

このQ&Aのポイント
  • Objective-cを使い、位置情報を取得してNSTimerを用い、n(ユーザの選択した5~60)分後に位置情報を付与したURLへpostするアプリを開発中。
  • バックグラウンドでの位置情報取得は可能だが、他の処理は10分を過ぎると無効になるとの情報があるため、バックグラウンドでの処理方法について質問。
  • もしバックグラウンドでの処理が不可能な場合は、NSTimerなどを利用して数分おきにサーバのURLへアクセスするアプリを作る方法について知りたい。
回答を見る
  • ベストアンサー

Objective-c 位置情報BG処理について

お世話になっております。 現在、Objective-cを使い、位置情報を取得してNSTimerを用い、n(ユーザの選択した5~60)分後に位置情報を付与したURLへpostするというアプリを開発しています。 実際にバックグラウンド系に必要な設定(plistやios8より導入されたNSLocationAlwaysUsageDescriptionの追加等)は完了しており フォアグラウンドでの動作及び、10分程度のバックグラウンド処理は確認しています。 しかし、10分を過ぎてしまうとタイマーが止まってしまう様です。 ※呼び出し先のメソッドにNSLogを仕込んで確認済み 色々調べた所、位置情報の取得はバックグラウンドで動作するが その他の処理については10分間の猶予期間の様な物を過ぎると、すべて処理が無効になるといった記載が散見されました。 そこで質問ですが 1.なんとかバックグラウンドで処理出来るようにする方法はないでしょうか。 (ユーザにフォアグラウンドで使ってもらえば良い話なんですが…。) 2.上記が不可の場合には、NSTimer又はその他の方法を利用して、数分おきにサーバのURLへアクセスするといったアプリを作る方法はありますか? 開示出来る情報が少なく申し訳ございませんが、何卒ご教示頂けますと幸いです。 宜しくお願い致します。

  • va01
  • お礼率50% (1/2)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

No.1です。 > ご提示頂いたページは質問前にも確認したページでした。 紹介した記事に書いてある通りのことを実際に自分で 新規プロジェクトを作って試してみましたか? 私はこの補足を受けて、今さっき試しに紹介記事通りのコードをコピペして 若干のiOS8対応とタイプミス修正をしたら、ちゃんと10分以上たっても バックグラウンド動作しましたけど。 その記事通りやって10分以上バックグラウンド動作することが確認できたら、 あなたのプロジェクトのどこかに誤りがあることは間違いないですので、 後はプロジェクトを比較して原因調査すればよいとと思います。

va01
質問者

お礼

有難うございました。 当該ページを再度確認し、 locationManager.pausesLocationUpdatesAutomatically = NO; 上記を挿入することにより、バックグラウンドでもストップせずに処理が実行される事を確認しました。 プロジェクトを作ってまで試してまでいただき、本当に有難うございました。

その他の回答 (1)

回答No.1

http://grandbig.github.io/blog/2013/09/27/location-nstimer/ が参考になると思います。 ちょっと古い記事なので最新のXcode6と多少画面が違いますが、まぁだいたい同じはずです。 特に「Backgroundでも位置情報サービスを使えるように設定しよう!」 の説明にある「Location updates」のチェック項目はONにしていますか? これをONにしていないと最大10分で強制的に停止させられるはずです。

va01
質問者

補足

Lchan0211bさん ありがとうございます。 ご提示頂いたページは質問前にも確認したページでした。 再度確認したところ、plistの編集やcapabilitiesの設定も完了しています。 また、位置情報についても大幅位置情報ではなく、標準位置情報取得を利用していますので、その点についても問題無いかと思われます。。

関連するQ&A

  • バックグラウンド通信とは?

    バックグラウンド通信とはどのようなことをいうのでしょうか? また 「フォアグラウンドアプリだけでなくバックグラウンドで動作しているアプリも、最新情報の取得などのためにインターネットでの通信を行うことがある。」 とのことですが、フォアグラウンドアプリとは? またバックグラウンドで動作しているアプリとはどう違うのでしょうか?

  • iOSでシステム起動時に実行

    こんにちは。 iOSで位置情報を使用してバックグラウンドで動作するアプリを開発しようとしています。 いまのところ、バックグラウンドで実行するためには、一度フォアグラウンドで実行する必要があるのですが、一度、システムをシャットダウンしてしまいますと、改めてフォアグラウンドで実行する必要があります。 ここで、シャットダウンされても、次の起動時にバックグラウンドでの実行が継続できるようななにかうまい方法はありませんでしょうか? Appleですので、禁止されているという可能性もあると思います。その場合はそんな情報でも構いません。 よろしくお願いします。

  • バックグラウンド処理について(iOS)

    お世話になりまくっております。 道玄坂小五郎です。 iOSアプリ開発者用にSDKを作成しているのですが、有料の為、第3者に使われてしまった 場合の対策でとてもてこずっています。 ログインした時にサーバから使用できる残り時間をもらい、それを基にタイマーで管理した いのですが、バックグラウンド処理を調べた結果 ”ios7未満のデバイスだと、電話系、オーディオ系、位置情報系など以外はバックグラウンド 処理が、数秒~10分までしか動かない仕様で、ホームボタンを押しただけで数秒待機状態 になった後、バックグラウンド処理が止まってしまう”事がわかりました。 本来はホームボタンを押した後もずっとタイマーを回して、アプリをフォアグラウンドにする前 にタイマーが切れたら、その後再ログインしないと使えない。 という形にしたいのですが、現状だとホームボタンを押した時にタイマーは止まってしまい、 アプリをフォアグラウンドにする前に有効期限を迎えていても、フォアグラウンドにした時に タイマーが前回の続きから動き出し、残り時間まで使えてしまう状態になっています。 ※オフラインでも使えるようにするという考慮もある為、オンラインで都度確認というのは無し としております。 現在調べようとしている事 ・プッシュ通知機能などで何か対策できないか見ていますが、調べきれてません。 ・タイマー(アラーム)関係のアプリはどうやっているのか。 何か良い案をお持ちの方おりましたら、アドバイスお願いします。 つたない文章ですみません。

  • 位置情報

    Webで位置情報を取得し、その取得した位置情報を自分で作ったiアプリ内でJPEGファイルに組み込むことは可能なのでしょうか? もし可能であるのであれば、その方法が詳しく載っているサイト等を教えていただけないでしょうか? よろしくお願いいたします。

  • 位置情報をPOSTで取得する方法

    <a href="device:gpsone?url=http://sample.url&ver=1&datum=0&unit=0&acry=0&number=0"> 上記より取得した位置情報をGETではなくPOSTで取得することは可能でしょうか? ユーザーに故意に位置情報を書き換えられないようにしたいのです。 POSTじゃなくても、何か方法があれば教えていただけると幸いです。

    • 締切済み
    • PHP
  • iOS4のマルチタスクについて教えてください。

    iOS4のマルチタスクについて教えてください。 iOS4のマルチタスクについて、ウィキペディでは以下のように記述されています。 >原則としてバックグラウンドのアプリケーションはタスク切替後にスリープ状態となり、 >次回呼出時に切替直前の動作状態が復元されるが、 >アップルが許可するバックグラウンド動作に関するAPIを使用することで、 >オーディオ再生やVoIP、位置情報通知などiOSの一部機能を >バックグラウンドのアプリケーションからも利用可能となる。 オーディオ再生等以外に、フォアグラウンドのアプリがコピーしたテキストの内容を、バックグラウンドのアプリが取得することは可能でしょうか? ご存知の方がいらっしゃいましたら教えてください。 よろしくお願いします。

  • objective-cで終了時に処理

    お世話になっております。 objective-cでMacOS用のデーモンアプリを作成しております。 シャットダウン時に処理を行いたいのですが、 「applicationShouldTerminate」や「applicationWillTerminate」に処理を記述しても実行されません。 アプリが終了する際に呼び出されると思ったのですが、検証の結果からWindowが無い場合は上記のどちらも実行されないと予測されます。 同じコードでWindowを表示させるようにしてダブルクリックで起動した場合、アプリ終了時には実行されます。 最後のWindowが閉じられた際に「applicationShouldTerminate」が呼び出され「NSTerminateNow」で「applicationWillTerminate」が処理されると思われます。 Windowの有無に関わらず、アプリ終了時に動作する方法、もしくはシャットダウンを検知する方法をご存知の方が居られましたらご教授をお願いします。 お手数をお掛け致しますがよろしくお願いいたします。

  • iPhone 位置情報 GPS

    iPhone 位置情報iPhoneの位置情報についてなんですが、外にいるにも関わらず正確な位置情報を取得できません。Googleマップなどで見てみると、青い円の範囲がとても大きくなってしまい、かつ、おおよその位置も合ってないという具合になってしまいます。 普段は使わないのですがナビに使ったり、とあるアプリで使ったりするので使えないのはとても不便です。 解決方法を教えてください! 少し前までは家の中にいても正確に取得できてました。今はWi-Fiに繋がないと円の範囲が狭くなりません。 しばらく位置情報は切っていたのですがそれは原因になりますか?

  • Objective-c ロード画面の表示について

    いつもお世話になっております。 Objective-cでiPhoneアプリを作成しておりロード画面の表示で 表示したいタイミングで表示されず困っております。 UIActivityIndicator 、 SVProgressHUD 共に意図した動きになりませんでした。 具体的には、以下のイメージです。 希望: 処理前に、表示されて処理が終わると消えて欲しいです。 結果: なぜか、処理が終わったタイミングで表示され一瞬表示されて消えてしまいます。 基本的な所だと思いますが、どうぞよろしくお願い致します。 -(void)hoge{ [SVProgressHUD showWithStatus:@"重い処理中" maskType:SVProgressHUDMaskTypeCustom]; // 重い処理 for(int i = 0 , i < 1000000000000000 , i++){ NSLog(@"%i",i); } [SVProgressHUD dismiss]; }

  • バックグラウンドに回したExcelの処理速度を上げるには?

    windowsXPでExcel2000を使用しています。 そこで数分間走るマクロを毎日使用しているのですが、 この処理待ち中にIE等他のアプリをフォアグラウンドに持ってくると、 バックグラウンドに回ったエクセルのマクロ処理速度が 極端に下がってしまいます。(数十~数百倍の時間かかりそうな勢い) 何か設定でバックグラウンドに回ったエクセルのパフォーマンスを あげることはできるのでしょうか? CPUはCore2duo、メモリ2GBの環境での作業です。

専門家に質問してみよう