Hat Probleme beim Entwerfen der Anmelde- / Anmeldelogik mit Firebase + Android

Ich bin relativ neu mit Android / Programmierung ... Ich versuche, eine App zu entwerfen, die Firebase als Backend verwendet (obwohl die Probleme, die ich habe, für jede App existieren würden, die versucht, sofort Entscheidungen basierend auf Remote-Daten zu treffen). .

Ich habe das Gefühl, dass es eine intelligentere Möglichkeit gibt, das zu tun, was ich versuche.

Die Anforderungen sind (wie ich das Problem sehe):

Entwerfen Sie eine App, in der sich neue Benutzer anmelden und registrieren (zwei verschiedene Dinge). Die App ermöglicht ihnen jedoch nicht, die App ordnungsgemäß zu verwenden, es sei denn, sie wurden ausdrücklich (manuell) von einem Benutzer über die Firebase-Datenbankkonsole autorisiert. Bestehende / genehmigte Benutzer umgehen diese Phasen.

So ... um das zu lösen habe ich gedacht:

Wenn sie die App zum ersten Mal öffnen und nicht angemeldet sind, präsentieren Sie ihnen eine SignIn-Aktivität.

Wenn nach erfolgreicher Anmeldung festgestellt wird, dass sie noch nicht registriert sind, legen Sie eine Registrierungsaktivität vor.

Wenn nach erfolgreicher Registrierung festgestellt wird, dass sie noch nicht vom Administrator genehmigt wurden, beenden Sie die App mit einem Warndialog, in dem Sie darauf hingewiesen werden, dass sie länger auf die Genehmigung warten müssen.

Sounds simple ... also könnten wir einfach eine MainActivity onResume () -Methode wie diese haben:

@Override
protected void onResume(){
    super.onResume();

    // if not signed in, go to signIn/Create account activity

    // (either we are signed in or we return from signin.java)

    // if not signedUP/registered, then we go to signUP/register activity

    // (either we are signed up or we return from register.java)

    //  is user admin-approved?  if not, then we exit.


}

Aber die Probleme treten auf, wenn wir versuchen, diese "Prüfungen" durchzuführen.

Wie überprüfst du, ob ein Benutzer bereits registriert ist? Ich dachte, wir können einfach die Firebase-Datenbank abfragen ... zum Beispiel:

Um herauszufinden, ob sich ein Benutzer bereits registriert hat, suchen wir im JSON-Baum der Firebase-Datenbank nach einem Zweig (Schlüssel), der mit der angemeldeten Benutzer-ID übereinstimmt. Dann wissen wir, dass er registriert ist (da die Registrierungsaktivität diesen Datensatz erstellt hätte) bereits

Um zu prüfen, ob sie vom Administrator genehmigt wurden, prüfen wir, ob ein Feld wie das folgende vorhanden ist:

'\firebase\user_id\isAllowed' = true. 

Dieses Feld wird standardmäßig auf "false" und nur dann auf "true" gesetzt, wenn ein Administrator den Wert in der Datenbank manuell festlegt.

Aber diese Art von Fernprüfungen werden einige Zeit in Anspruch nehmen, um ausgeführt zu werden ... und die Ergebnisse werden über Rückrufmethoden geliefert ... Wie können wir also die onresume-Methode anhalten, damit sie auf das Ergebnis wartet, bevor sie fortfährt? (Wir könnten Rückrufe in Rückrufe 'verschachteln':Firstcheck.onsuccess() { [Secondcheck.onsuccess() { [Thirdcheck.onsuccess() { // SUCCESS! }] } ] } ... aber das scheint eine schlechte Idee zu sein.

Alright ... warum also nicht stattdessen gemeinsame Einstellungen verwenden und die Registrierungsaktivität eine "user_progress" -Variable wie 1 speichern lassen, was bedeutet, dass sie die Registrierung abgeschlossen haben? Auf diese Weise wird der Fortschritt des Benutzers lokal gespeichert und kann sofort im @ überprüft werdeonresume() Logik

Aber dann entsteht ein neues Problem ... das ist was, wenn der Benutzer die App neu installiert? Dann werden die geteilten Einstellungen gelöscht und es wird angenommen, dass sie nicht registriert sind ... und sie werden versehentlich erneut bei der Registrierungsaktivität angezeigt.

Ich habe individuelle Lösungen für diese individuellen Probleme, aber das Ergebnis ist ein Nest schwer zu verfolgender Codes für Ratten ...

Hat jemand anderes mit dieser Art von Problem fest? Wo gehe ich falsch in meinem Denken? Ich habe das Gefühl, dass es eine grundlegend falsche Herangehensweise gibt ... wie prozedural oder objektorientiert ... und ich frage mich, ob jemand darauf eingehen kann.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage