質問: お世話になります iOSで、定期的にサーバに新着がないか確認して、新着データがあれば、取得するという仕様のものを実行しようとしています 例えば、16時から、1時間毎なら、16時、17時、18時みたいな感じです。 もし、16時から、2時間ごとなら、16時、18時、20時みたいな感じです。 アプリがフォアグラウンドにいる場合は、NSTimerでなんとでもなりそうなのですが、 バックグラウンドに入った場合には、background fetchで一定間隔での実行は可能のように見えます。 ``` application.setMinimumBackgroundFetchInterval(900) ``` が、例えば、16時基準で、2時間毎という設定(実行する時間は予め決まっている)といった実装は可能なのでしょうか 2時間毎なら ``` application.setMinimumBackgroundFetchInterval(7200) ``` でOKだとは思いますが、上記が呼ばれてからの一定時間処理を実行するように見えるのですが。。。 (上記の場合は2時間) 今回はリモートプッシュは使わない(正確にはサーバが足りないので使えない)想定で作っているので、 どうしようかと悩み中です どなたかお分かりになる方いらっしゃいますでしょうか よろしくお願いします。 また、NSTimerIntervalを900にしても、きっちり15分で来ないっぽいです。 いくつかのサイト見たところ、そんなもんですという感じっぽいですが、 そんなもんですか?
回答: Background fetchの実行間隔はそういうもので、ある一定の時間ごとに実行する、といった制御はできません。 フェッチの実行間隔は、システムが利用状況などを考慮してヒューリスティックに決定します。(通常は`UIApplicationBackgroundFetchIntervalMinimum`を指定しますが)おっしゃられているように`900`などの値やあるいはそれ以下の値を指定したとしても、その間隔で実行されるわけではなく、あくまで参考情報として扱われます。 > > Enabling this mode is not a guarantee that the system will give your app any time to perform background fetches. The system must balance your app’s need to fetch content with the needs of other apps and the system itself. After assessing that information, the system gives time to apps when there are good opportunities to do so. > > > 今回は使えないとのことですが、必ず16時など、決まった時間で実行したいのであれば、サイレントプッシュ通知が適していると思います。 ただし、サイレントプッシュ通知によるバックグラウンド実行も、あまり頻繁に通知を送ると制限がかかるので、1時間ごとや、15分ごと、のように短い間隔で繰り返すことはできません。