2012-04-03 6 views
0

Nehmen wir an, Sie haben eine Web-App für Android-Anwendungen, bei denen sich der Benutzer anmelden muss, um sie verwenden zu können. Der Benutzer meldet sich in der Anmeldebildschirm-Aktivität an und geht dann zu anderen Aktivitäten über. Jedes Mal, wenn der Benutzer eine Aktivität startet, überprüft die App seine Anmeldeinformationen erneut (die Anmeldeinformationen werden irgendwo in einer zentralen Datenbank gespeichert).Wie man Benutzer zum Login-Bildschirm kickt Aktivität durch alle anderen App-Aktivitäten im Stapel?

Wenn der Benutzer von einer Aktivität zu einer anderen springt, können Sie so tun, als ob die Anmeldeinformationen des Benutzers vom Dienst widerrufen werden. Wenn der Benutzer das nächste Mal eine Aktivität besucht, erkennt die App, dass er keinen Zugriff mehr hat. Die App sollte nun den Benutzer zurück zum Anmeldebildschirm Activity führen.

Aber da es bereits einen Stapel von Aktivitäten gibt, die die App erstellt hat, als der Benutzer die App verwendet hat, wie erhalten Sie den Anmeldebildschirm. Töten/zerstören Sie alle Aktivitäten, bis Sie den Anmeldebildschirm Activity erreichen (was die Aktivität am unteren Ende des Stacks für die App sein sollte)?

Oder starten Sie eine neue Anmeldebildschirm Aktivität und gehen Sie direkt zu diesem?

Oder sollte ich die Login-Bildschirm-Aktivität mit der FLAG_ACTIVITY_CLEAR_TOP durch die Absicht übergeben aufrufen?

Nachdem sich der Benutzer das zweite Mal anmelden konnte (sagen wir, er hat seine Anmeldeinformationen wiederhergestellt), wenn die Aktivität jetzt die einzige im Stapel ist, wird er durch Drücken der Zurück-Taste aus der App entfernt zurück zu dem, was er getan hat, bevor er seine Beglaubigung widerrufen hat. Was ist der beste Ansatz dafür?

+0

Es gibt keine einzige Antwort auf Ihre Frage. Es hängt sehr viel von vielen Designentscheidungen ab. – Falmarri

+0

Ja, das ist mir jetzt klar. Ich war mir nicht sicher, ob es eine Best Practice gab, die Leute dafür benutzen oder nicht. –

Antwort

2

Meine persönliche Wahl ist, alle Ihre Aktivitäten (neben der Login-Aktivität, natürlich) einzurichten, um die Anmeldeinformationen des Benutzers in onResume() zu überprüfen (ich mache dies durch Vererbung, mit allen meinen Aktivitäten erbt von einem abstrakten AuthorizedActivity, aber mach was für dich funktioniert). Wenn der Benutzer keine Anmeldeinformationen hat (entweder, weil er sie nicht hat oder sie widerrufen wurden), dann I startActivityForResult() die Login-Aktivität. Wenn die LoginActivity einen gültigen Benutzer zurückgibt, ist alles in Ordnung. Wenn der Benutzer ein gültiger, aber anderer als der ist, der zuvor angemeldet war, nehme ich ihn zu meiner Root-Aktivität mit FLAG_ACTIVITY_CLEAR_TOP. Das Drücken der Zurück-Taste von der loginActivity tut ihnen nicht gut, da die App sie direkt nach Hause abwirft.

Ich finde, dass der Ansatz gibt mir Flexibilität bei der Entscheidung, wann und wie ich Anmeldeinformationen überprüfen/entziehen werde, auch wenn sie (kurz) die Anwendung verlassen.

+0

Danke. Du meinst 'FLAG_ACTIVITY_CLEAR_TOP' nehme ich an? –

+0

@Jakobud oops ... ja – JRaymond

0

Login-Bildschirm Aktivität mit FLAG_ACTIVITY_CLEAR_TOP wird funktionieren, aber wird den gesamten Verlauf des Benutzers entfernen. Interessiert es Sie, wenn sie ihre Anmeldeinformationen erneuern und dann zurück drücken? Sollte das ihre Geschichte bewahren?

Sie können FLAG_ACTIVITY_SINGLE_TOP und FLAG_ACTIVITY_NO_HISTORY für die Anmeldeaktivität in Betracht ziehen.

Wenn Sie möchten, dass alle vorherigen Aufgaben auf den Anmeldebildschirm umgeleitet werden, müssen Sie sicherstellen, dass Sie die Prüfung unter onResume durchführen, damit sie nicht zurück durch den Stapel gehen können, nachdem die Berechtigung widerrufen wurde.

Beachten Sie, dass Sie diese Flags auch auf dem Element <activity> im manifest festlegen können.