2016-06-03 9 views
6

qualcuno ha riscontrato questo problema? Il mio codice Firebase funziona solo per un paio d'ore (completamente funzionante e tutto), e poi quando riprovo non funziona più. Vedi sotto codice per come sto chiamandolo:Firebase addValueEventListener funziona solo per un paio d'ore

 ValueEventListener valueEventListener = new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Log.e(TAG, "onDataChange: Job found"); 
       for (DataSnapshot jobSnapShot : dataSnapshot.getChildren()) { 
        Log.e(TAG, "onDataChange: Job +1"); 
        Job job = jobSnapShot.getValue(Job.class); 
        // Add the ID into the job 
        job.setId(dataSnapshot.getKey()); 

        // Set the job 
        arrayList.add(job); 
        subscriber.onNext(job); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.e(TAG, "onCancelled: " + databaseError.getMessage()); 
      } 
     }; 
     Log.e(TAG, "call: id:" + userId + ", reference:" + FirebaseDatabase.getInstance().getReference().toString()); 
     Log.e(TAG, "call: Calling Jobs..."); 
     FirebaseDatabase.getInstance() 
       .getReference() 
       .child(context.getString(R.string.firebase_jobs)) 
       .child(userId). 
       addValueEventListener(valueEventListener); 

Le linee:

Log.e(TAG, "call: id:" + userId + ", reference:" + FirebaseDatabase.getInstance().getReference().toString()); 
    Log.e(TAG, "call: Calling Jobs..."); 

eseguire ogni singola volta. UserId e getReference restituiscono valori corretti. Tuttavia, addValueEventListener non sembra aggiungere il listener dopo alcune ore più tardi. L'unico modo per risolvere questo problema è disconnettersi e riconnettersi.

EDIT:

mio auth codice ascoltatore Stato:

firebaseAccount = getFirebaseAccount(); 
firebaseAccount.getAuth().addAuthStateListener(firebaseAccount.getAuthListener()); 

In firebaseAccount:

public FirebaseAuth.AuthStateListener getAuthListener() { 
    return authStateListener; 
} 

FirebaseAuth.AuthStateListener authStateListener = new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); 
     if (firebaseUser != null) { 
      String id = firebaseUser.getUid(); 
      // User is signed in 
      Log.e(TAG, "onAuthStateChanged: Signed in as " + id); 
      // Start loginActivity when signed in 
      loginActivity.onLoginSuccess(id); 
     } else { 
      // User is not signed in 
      Log.e(TAG, "onAuthStateChanged: Signed out"); 

      // User probably logged out. Finish the loginActivity and launch the login screen 
     } 
    } 
}; 
+0

stai usando l'autenticazione? – Ymmanuel

+0

Sì, posso confermare che l'utente ha effettuato l'accesso e sono in grado di recuperare gli ID utente registrati. – lawonga

+0

Sto ricevendo anche un messaggio molto lungo: background_crash V/GoogleSignatureVerifier: firma com.google.android.gms non valida. Trovato:. Firma MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMw EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29n .... – lawonga

risposta

14

Questo problema è causato da Firebase Auth non Token rinfrescante stessi correttamente, che a sua volta è causato da una errata configurazione sottostante nel progetto Firebase.

Si può dire se il token di aggiornamento sta fallendo chiamando il seguente frammento dopo l'accesso di un utente in:

FirebaseUser user = mAuth.getCurrentUser(); // mAuth is your current firebase auth instance 
user.getToken(true).addOnCompleteListener(this, new OnCompleteListener<GetTokenResult>() { 
    @Override 
    public void onComplete(@NonNull Task<GetTokenResult> task) { 
     if (task.isSuccessful()) { 
      Log.d(TAG, "token=" + task.getResult().getToken()); 
     } else { 
      Log.e(TAG, "exception=" +task.getException().toString()); 
     } 
    } 
}); 

(Se c'è un problema, si otterrà un'eccezione).

È possibile seguire this guide che abbiamo creato nel team di Firebase per risolvere e risolvere eventuali problemi di configurazione che possono causare questo problema.

I passaggi precedenti dovrebbero essere una soluzione permanente per il problema, tuttavia, stiamo anche lavorando per implementare un modo per rilevare automaticamente errate configurazioni e correggerle in modo trasparente. Ci scusiamo per qualsiasi problema questo possa averti causato.