android tutorial Firebase addValueEventListener funktioniert nur für ein paar Stunden



react native firebase (1)

Hat jemand dieses Problem erlebt? Mein Firebase-Code funktioniert nur für ein paar Stunden (voll funktionsfähig und alle), und wenn ich es erneut versuche, funktioniert es nicht mehr. Siehe unten Code für wie ich es nenne:

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

Die Linien:

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

Führen Sie jedes Mal aus. UserId und getReference geben korrekte Werte zurück. Der addValueEventListener scheint den Listener jedoch erst einige Stunden später hinzuzufügen. Die einzige Möglichkeit, dies zu beheben, besteht darin, sich abzumelden und erneut anzumelden.

BEARBEITEN:

Mein Authentifizierungsstatus-Listener-Code:

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

Dieses Problem wird dadurch verursacht, dass Firebase-Auth-Token sich nicht ordnungsgemäß aktualisieren, was wiederum auf eine zugrunde liegende Fehlkonfiguration in Ihrem Firebase-Projekt zurückzuführen ist.

Sie können feststellen, ob die Token-Aktualisierung fehlschlägt, indem Sie das folgende Snippet aufrufen, nachdem Sie einen Benutzer unter folgenden Bedingungen signiert haben:

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

(Wenn ein Problem auftritt, erhalten Sie eine Ausnahme).

Sie können diesem Leitfaden folgen, den wir im Firebase-Team zusammengestellt haben, um Probleme mit der Konfiguration zu beheben und zu beheben, die dieses Problem verursachen können.

Die oben genannten Schritte sollten eine dauerhafte Lösung für das Problem sein. Wir arbeiten jedoch auch hart daran, eine Möglichkeit zu implementieren, Fehlkonfigurationen automatisch zu erkennen und sie für Sie transparent zu machen. Entschuldigung für jedes Problem, das Sie möglicherweise verursacht haben.





firebase-database