2016-10-30 12 views
4

iOSプログラミングにはかなり新しいので、定期的なバックグラウンド同期を実装して、クライアントデータとサーバーデータを同期させたい。私が達成したいのはAndroids SyncAdapterに匹敵し、時間間隔(例えば30分ごと)を定義することができ、システムは定義されたタスクをバックグラウンドで自動的にトリガーします。周期的なバックグラウンド同期

今まで私はSwift 3.0のためのそのような仕組みを見つけることができなかったので、私はsomoneが私にこれを達成する方法の経験やヒントを持っているかどうか尋ねる必要があります。私が何をしたいか

は非常に簡単に聞こえる:

アプリはアプリがセットアップ自動的にバックグラウンドタスクごとに30分をトリガーシンクマネージャをすべき初めて起動したとき。バックグラウンドタスクは、Alamofireを使用してサーバーとクライアントのデータを同期させる役割を担います。

どうすればいいですか?

答えて

6

iOSの機能がありますが、あなたが

定期的にダウンロードを設定し、セットアップminimumBackgroundFetchIntervalすることができますネットワーク

から少量のコンテンツを処理することができた、BackgroundFetchと呼ばれます。

前述のAndroid機能とは対照的に、この間隔は保証されません。

OSは、ブラックボックスでヒューリスティックを実行します。これは、 "合理的な"(OSに)CPU時間/消費電力を使用し、またユーザーが頻繁に使用するためにあなたに報酬を与えます。一方、あなたのアプリが一度も使用されていない場合は、バッテリーを消耗してしまった場合、さらに悪いことに処罰されます。

参照:Apple Documentation


また、あなたのニーズに応じて、サーバー側のSilent (push) Notificationたびのユーザーデータの変更を投稿することができます。サイレントプッシュは、ユーザーに通知せずにアプリを起動させるため、データを取得したり、ローカル通知をスケジュールしてユーザーに知らせることができます。

参照:Apple Documentation

+0

あなたは罰を受けるのですか? –

+0

@AkashRajput時間が短くなることで罰せられます。つまり、バックグラウンドフェッチが頻繁に行われません。 – shallowThought

1

できません。アップル社は、サードパーティーのアプリがそのような通常のバックグラウンドタイムを持つことを許可していません。新しいコンテンツが利用可能になったらサーバーからsilent push notificationを実装するような別のアプローチを考え出す必要があります。

+0

WOW!あなたはそれについて真剣ですか?そのような機能を持たない私には信じられないように聞こえる。私はGoogleでそれを見つけた 'NSBackgroundActivityScheduler'はどうですか?Swift 3.0ではそれが存在しません。 – Mulgard

+0

「NSBackgroundActivityScheduler」はiOSではなく、MacOS用であることがドキュメント(https://developer.apple.com/reference/foundation/nsbackgroundactivityscheduler)から確認できます。 iOSの場合は、バックグラウンドフェッチまたはサーバープッシュを使用する必要があります。 – Paulw11

関連する問題