2013-05-29 8 views
6

私は現在、Android/iOS用のテストアプリケーションを構築するために、angularJSとphonegapを使用しています。デバイスがオンラインのときに、オフラインデータベースとFirebaseを同期するにはどうすればよいですか?

このアプリは、Firebaseデータベースに保存されているテキストデータのみを使用します。私は、アプリケーションが独自のローカルデータベース(デバイスがオフラインのときに使用)といつか(デバイスがオンラインのとき) をFirebaseデータベースと同期させたい。

オフラインモードでは、PhoneGapの/コルドバのストレージAPIを使用しています。私はデバイスのオンライン状態を確認し、定期的にオンラインデータベースをバックアップできますか?

これを達成するための手掛かりはありますか?前回同様の質問があったとき、答えは "まだ"ではなかった... (here) ...仮想的なFirebase機能に焦点を当てたので。

答えて

10

Firebaseは、開始時にオンラインであり、一時的に接続を失った場合は、その後、それは、ローカルデータを同期します再接続します。したがって、多くの場合、Firebaseがオンラインになると、停止中にFirebaseに押し続けることができます。真のオフライン使用のために

、あなたはおそらく、デバイスの状態を監視し、またFirebaseが接続したときに知って.info/connectedを見たいと思うでしょう。

new Firebase('URL/.info/connected').on('value', function(ss) { 
    if(ss.val() === null) /* firebase disconnected */ 
    else /* firebase reconnected */ 
}); 

現在Firebaseツールセットでこれを達成するための方法、それは真のオフラインストレージをサポートするまでは、

  1. は、デバイスがオンラインになったとき、変換
  2. シンプルで小さなローカルデータを続けるだろうJSON
  3. にローカルに格納されたデータ
  4. 適切な経路
でFirebaseにデータを保存するために使用

さらに、デバイスがオフラインのときにアプリケーションが何らかの理由で読み込まれた場合、set()を呼び出してデータを初期化することでFirebaseをプライミングすることができます。それから、Firebaseは、いつかオンラインでオンラインになるまで(通常はオンラインであるかのように)、将来のある時点でオンラインになるまで使用できます。

明らかに、より簡単な方が良いでしょう。同時に行われる変更、ローカルストレージサイズの制限、その他多くの要因がすぐに蓄積され、オフラインストレージソリューションは複雑で時間がかかります。

+0

ヒントをありがとう、私はすぐにこれを実装しようとします。次の作業はオフラインで開始できるようにすることです... –

+0

Firebaseを "プライミング"することは何を意味するのですか?Thx – david

+0

Firebase認証を扱うソリューション?トークンをローカルにキャッシュし、アプリケーションを停止せずにログインできるようにしますか? – MrYellow

0

いくつかの時間後、私は加藤の答え@に0.02を追加したい:snapshot.val() === nullを呼び出すsnapshot.exists()の代わりを呼び出すために

オプトイン。 documentationが指摘するように、exists()はsnapshot.val()をnullと比較するよりも少し効率的です。

データを更新する場合は、最後にset()の代わりにupdate()メソッドを使用することをお勧めします。これは最後のFirebaseデータを上書きするためです。あなたはさらにhereを読むことができます。

関連する問題