2016-06-20 8 views
5

Sto lavorando su Firebase per la prima volta, leggere su funzionalità offline di Firebase, testati due scenari:come gestire il database Firebase offline quando viene uccisa un'app per Android?

scenario 1 (lavoro):

  1. modalità offline, la scrittura dei dati nel database Firebase .

  2. premere il pulsante (app chiuso)

  3. è andato online indietro, i dati ricevuti aggiunti al database Firebase.

scenario 2 (non funziona):

  1. modalità offline, la scrittura dei dati nel database Firebase
  2. stretta applicazione
  3. rimuovere app dalla sfondo (ucciso l'applicazione)
  4. andato online, i dati non vengono aggiunti

Ho aggiunto questa riga:

Firebase.getDefaultConfig().setPersistenceEnabled(true); 

come gestire lo scenario 2? Devo gestire questo scenario attraverso il database locale?

+1

Quando si attiva la persistenza con Firebase, persisterà operazioni locali di scrittura (ma le transazioni non locali) sul disco in modo che possano sopravvivere riavvio app. Ma nello scenario 2 i dati non verranno inviati al server fino al riavvio dell'app. Se ciò non lo risolve, mostra una riproduzione minima e completa del problema. Le descrizioni del codice sono più ambigue del codice reale. –

+0

sto affrontando questo stesso problema qualsiasi soluzione hai alka aswal, per favore aiuto –

+0

In riferimento al tuo commento @FrankvanPuffelen significa che i valori impostati usando metodi come 'setValue()' o 'updateChildren()' sono persistenti localmente prima di scrivere a db remoto mentre lo stesso non è fatto per il metodo 'runTransaction()' È corretto? – Droidwala

risposta

0

Immagino che utilizzando un servizio per sincronizzare i dati, non funzionerà per il secondo scenario. Per questo, quando l'utente attiva i servizi di dati, riceverai un ricevitore di trasmissione, dal momento che il servizio di controllo non è in esecuzione, quindi avvia il servizio.

0

Stai utilizzando Firebase.getDefaultConfig().setPersistenceEnabled(true); e keepSynced(true)?

Perché in Firebase documentation dice che keepSynced(true) è che fanno la "magia" avviene (insieme con setPersistenceEnabled(true)):

Chiamando keepSynced (vero) in una posizione, verranno automaticamente scaricati i dati per quella posizione e mantenuto sincronizzato, anche quando nessun ascoltatore è collegato per quella posizione. Inoltre, mentre una posizione viene mantenuta sincronizzata, non verrà sfrattata dalla cache persistente del disco.

Quindi, se non lo stai usando, non stai persistendo il tuo database localmente e poi quando "uccidi" l'applicazione, non ci sarà alcun database da interrogare da quando la tua app verrà riaperta.

0

Non è necessario gestire lo scenario 2 utilizzando il database locale. Usa Firebase.getDefaultConfig(). SetPersistenceEnabled (true) nella classe dell'applicazione e rendi android: name = "yourapplicationclass" nel file manifest. per gestire la sincronizzazione mentre si cambia rete, ad esempio online/offline, utilizzare il gestore transazioni per gestire la sincronizzazione locale nel database Firebase poiché alcuni dati tomo non vengono trasferiti al server Firebase.Ti piace questa Ho usato all'interno metodo di modifica della rete e risolto questo problema:

mDatabase.runTransaction(new Transaction.Handler() { 
      @Override 
      public Transaction.Result doTransaction(MutableData mutableData) { 
       if(mutableData.getValue() == null) { 
        mutableData.setValue(1); 
       } else { 
        mutableData.setValue((Long) mutableData.getValue() + 1); 
       } 
       return Transaction.success(mutableData); //we can also abort by calling Transaction.abort() 
      } 

      @Override 
      public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) { 

      } 
     });