2016-06-03 2 views
6

Кто-нибудь испытал эту проблему? Мой код firebase работает только в течение нескольких часов (полностью функциональный и все), а затем, когда я пытаюсь снова, он больше не работает. Ниже код для того, как я называю это:Firebase addValueEventListener работает только пару часов

 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); 

линии:

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

Выполнить каждый раз. UserId и getReference возвращают правильные значения. Однако addValueEventListener, похоже, не добавляет слушателя через несколько часов спустя. Единственный способ исправить это - выйти из системы и снова войти в систему.

EDIT:

Мой Auth код состояния слушателя:

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

В 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

Вы используете аутентификацию? – Ymmanuel

+0

Yup, я могу подтвердить, что пользователь вступил в систему, и я могу получить подписанные идентификаторы пользователя. – lawonga

+0

Я получаю очень длинное сообщение: background_crash V/GoogleSignatureVerifier: подпись com.google.android.gms недействительна. Найдено:. MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMw EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29n .... – lawonga

ответ

14

Эта проблема вызвана Firebase Auth лексемы не освежает себя должным образом, что само по себе вызвано по причине неправильной конфигурации вашего проекта Firebase.

Вы можете сказать, если обновление маркера происходит сбой, вызвав следующий фрагмент кода после входа пользователя в систему:

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()); 
     } 
    } 
}); 

(если есть проблема, вы получите исключение).

Вы можете следить за this guide, что мы собрали в команде Firebase для устранения неполадок и устранения любых проблем с конфигурацией, которые могут вызвать эту проблему.

Вышеупомянутые шаги должны быть постоянным исправлением проблемы, однако мы также прилагаем все усилия, чтобы реализовать способ автоматического обнаружения неверных конфигураций и их прозрачной фиксации для вас. Извиняюсь за любую проблему, которая может быть вызвана вами.

Смежные вопросы