2013-12-20 10 views
6

Ich graben durch die GitHub android app source code.Wie erzwingt die GitHub Android App die Authentifizierung?

Ich versuche herauszufinden, wie sie die LoginActivity erzwingen, wenn die App zum ersten Mal gestartet wird. In ihrem Manifest they seem to have HomeActivity as the MAIN und LoginActivity is only launched explicitly.

Das bedeutet also, dass immer HomeActivity gestartet wird, wenn die App zum ersten Mal geöffnet wird. Aber ich sehe keine Logik in HomeActivity, das zeigt, dass sie prüfen, ob das Konto vorhanden ist oder nicht, wenn sie nicht vorhanden dann gehen Sie zu LoginActivity

Im Code LoginActivity ist only launched from here.

+0

SharedPreferences, wenn ein Konto gespeichert ist, melden Sie sich an, wenn die Aktivität nicht angezeigt wird. Ich weiß nicht, wie sie es machen, aber es ist ein Weg, wie es gemacht werden kann. –

Antwort

6

Okay, der gesamte Android-Account-Authentifizierungs- und Sync-Adapter-Mechanismus kann auf den ersten Blick ziemlich kompliziert sein, und GitHub Android-App fügt eine weitere Ebene der Komplexität hinzu, aber ich werde versuchen, Ihnen den ganzen Fluss zu erklären (ich hoffe, dass meine Verständnis ist richtig).

Zuerst würde ich Ihnen this article über Android Authenticator empfehlen, wenn Sie mit dem Thema noch nicht vertraut sind. GitHub Android verwendet genau den gleichen Mechanismus, der in diesem Artikel beschrieben wird.

Sie haben recht, HomeActivity wird zuerst gestartet. Es startet dann OrganizationLoader, um eine Liste von Organisationen zu laden. Dieser Loader ruft die Methode von OrganizationService auf, die ein Teil von GitHub Java API ist. GitHub Android verwendet RoboGuice, um das Injizieren der am häufigsten verwendeten Klassen wie GitHub API-Dienste zu konfigurieren. Sie können sehen, dass OrganizationService in ServicesModule erstellt wird. Es dauert GithubClient als Konstruktor Parameter und es gibt auch eine GitHubModule, die konfiguriert ist, um AccountClient zurückgeben, wenn eine Instanz von GitHubClient benötigt wird. AccountClient überschreibt configureRequest() Methode und

String token = account.getAuthToken();

Dies ist eine Methode der GitHubAccount Klasse aufruft, das AccountManager eine Methode aus dem internen Android aufruft. Und AccountManager ist konfiguriert, das AccountAuthenticator zu verwenden, über das Sie gesprochen haben, das LoginActivity Intent zurückgibt, wenn es kein Konto auf Gerät gibt.

Hoffe das hilft :)

+0

Großartig! Ich glaube Link für 'diesen Artikel' ist kaputt. Kannst du bitte den Artikellink posten? Danke nochmal für Hilfe. – birdy

+1

@birdy Entschuldigung, ich habe den Link aktualisiert – atermenji

2

Die App verwendet das Android-Konto-System, das tatsächlich in der Klasse implementiert ist, die Sie bereits gefunden haben. Dieses Kontosystem ruft irgendwann getAuthToken(), und dort ist es eine einfache Überprüfung whether the password is empty, die den Intent für die LoginActivity an das Kontoverwaltungssystem zurückgibt. Mit dieser Absicht ruft das Kontoverwaltungssystem die App erneut auf und ruft schließlich die LoginActivity auf.

Verwandte Themen