Handhabung der Anmeldung und erinnere mich mit dem AccountManager

8
___ qstnhdr ___ Handhabung der Anmeldung und erinnere mich mit dem AccountManager ___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ answer16834464 ___

Meine Version des 'klassischen Ablaufs' mit AccountManager:

Ich benutze meine AuthenticatorActivity sowohl für den normalen Fall, in dem es verwendet wird. Konten & amp; Synchronisierungseinstellungen, aber ich öffne es auch zur Verwendung durch Anwendungen, die auf dieselben Konten angewiesen sind. Ich habe eine separate apk mit dem Authenticator implementiert und andere apps (separate apks), die auf diesen Konten beruhen.

Behandelte Fälle:

  • der Normalfall: Der Benutzer fügt hinzu / authentifiziert über. Konten & amp; Synchronisieren (gemäß dem Android-Beispielprojekt)

  • verarbeitet Authentifizierungsanforderungen von externen Apps: Wie? Ich stelle einen Intent-Filter im Manifest der Authenticator-App bereit, damit andere Apps die AuthenticatorActivity über die Instanz instanziieren können. startActivityForResult (sie müssen eine zusätzliche Absicht enthalten, die angibt, wer sie sind (das Paket ihrer App)). In der AuthenticatorActivity erkenne ich diesen Fall und lasse setCcountAuthenticatorResult nicht aufrufen, wenn der Authentifizierungsprozess zu Ende ist, weil ich ihn für den obigen Normalfall reserviert habe. Der Benutzer gibt seine Anmeldeinformationen ein und drückt "Anmelden": "AccountManger" wird auf ein übereinstimmendes Konto geprüft Behalte den Nutzernamen des Accounts als aktiven Nutzer für das Paket der anrufenden App. Ich übergebe dann eine Absicht an die anrufende App. setResult gibt den Erfolg, den Benutzernamen und den Kontotyp an. In dem Fall, in dem das Konto nicht existierte, gehe ich durch den Prozess, den der normale Fall durchläuft, d. H. Rufe addAccountExplicitely auf und setze dann den aktiven Benutzer und dann wie zuvor setResult aufrufen und beenden.

Hoffe das hilft jemandem.

    
___ tag123accountmanager ___ AccountManager verfolgt die Cloud-Anmeldeinformationen auf Android-Geräten. Es verwendet Plugins, um mit verschiedenen Arten von Diensten zu kommunizieren, und der Benutzer muss die Informationen nur einmal eingeben. Anwendungen müssen sich nicht mit Kennwörtern auseinandersetzen und können stattdessen um Erlaubnis bitten, Zugriff auf bestimmte Konten zu erhalten. ___ answer5324840 ___

Der AccountManager soll nicht von einer interaktiven Anwendung, sondern von einem Sync-Adapter aufgerufen werden. (Ein tolles Tutorial ist "Hast du schon gewonnen?" Einen Android Sync Provider schreiben " Teil 1 und Teil 2 , die großartige Codebeispiele liefert, aber den Datenfluss nicht so gut erklärt.) Es ist so:

Sie entwickeln einen ContentProvider, der eine Datenbank umschließt. Sie erstellen ein SyncAdapter (dies ist ein Hintergrunddienst), um eine Verbindung zu einem Server herzustellen und Daten abzurufen und den ContentProvider so zu synchronisieren, dass er mit dem Server übereinstimmt. Anschließend fragt Ihre Benutzeroberfläche den ContentProvider ab, um die abgerufenen Daten anzuzeigen. Es gibt einige Methoden, um direkt nach bestimmten Informationen zu suchen, wenn Sie beispielsweise Ergebnisse suchen und zwischenspeichern möchten. Sehen Sie RESTful Android Apps entwickeln für eine schöne, einstündige Sitzung wie das Datenmodell aussehen soll. Sie geben drei Architekturbeispiele, beginnend mit einer "naiven" Implementierung, bis hin zum richtigen SyncAdapter-Modell.

Wie bei der Authentifizierung selbst verwendet SyncAdapter den AccountManager, um ein Authentifizierungstoken zu erhalten. Dies ist ein (oft) großer Hexadezimalwert, der als Teil der HTML-Header anstelle eines Username / Passwort-Paares übergeben wird. Betrachten Sie es als einmaligen Schlüssel für eine Sitzung. Die Passion des Schlüssels ist der Nachweis der Authentifizierung und sie verfallen periodisch. Wenn sie ablaufen, authentifizieren Sie sich erneut und holen Sie eine neue. SyncAdapater fragt AccountManager nach einem Authentifizierungs-Token für eine bestimmte Account-Typ / Benutzername-Kombination. AccountManager authentifiziert sich mit dem Server (fragt den Benutzer bei Bedarf nach einem neuen Passwort aufgrund von Änderungen) und gibt das Token an den SyncAdapter zurück, der es von da an verwendet.

Wenn dieses Modell nicht für Ihre Anwendung geeignet ist, müssen Sie die Anmeldung / Abmeldung stattdessen manuell in Ihrem App-Code vornehmen. Eine Art Schmerz, ich weiß.

    
___ answer8320592 ___

@jcwenger Das ist nicht ganz richtig. Sie können das Accounts & Sync auch von einer interaktiven Anwendung verwenden. Sie können beispielsweise Konten hinzufügen, ohne die Benutzeroberfläche des Account Managers aufzurufen, indem Sie die AccountAuthenticatorActivity -Methode von AccountManager verwenden.

Auf der "Hast du schon gewonnen?" Artikel Sie können deutlich sehen, dass der Account-Manager von der eigenen finish() der Anwendung aufgerufen wird. Dies ist nützlich, wenn die Anwendung über eine eigene Kontoverwaltungsschnittstelle verfügt.

    
___
mgv 14.03.2011, 15:39
quelle

3 Antworten

19

Der AccountManager soll nicht von einer interaktiven Anwendung, sondern von einem Sync-Adapter aufgerufen werden. (Ein tolles Tutorial ist "Hast du schon gewonnen?" Einen Android Sync Provider schreiben " Teil 1 und Teil 2 , die großartige Codebeispiele liefert, aber den Datenfluss nicht so gut erklärt.) Es ist so:

Sie entwickeln einen ContentProvider, der eine Datenbank umschließt. Sie erstellen ein SyncAdapter (dies ist ein Hintergrunddienst), um eine Verbindung zu einem Server herzustellen und Daten abzurufen und den ContentProvider so zu synchronisieren, dass er mit dem Server übereinstimmt. Anschließend fragt Ihre Benutzeroberfläche den ContentProvider ab, um die abgerufenen Daten anzuzeigen. Es gibt einige Methoden, um direkt nach bestimmten Informationen zu suchen, wenn Sie beispielsweise Ergebnisse suchen und zwischenspeichern möchten. Sehen Sie RESTful Android Apps entwickeln für eine schöne, einstündige Sitzung wie das Datenmodell aussehen soll. Sie geben drei Architekturbeispiele, beginnend mit einer "naiven" Implementierung, bis hin zum richtigen SyncAdapter-Modell.

Wie bei der Authentifizierung selbst verwendet SyncAdapter den AccountManager, um ein Authentifizierungstoken zu erhalten. Dies ist ein (oft) großer Hexadezimalwert, der als Teil der HTML-Header anstelle eines Username / Passwort-Paares übergeben wird. Betrachten Sie es als einmaligen Schlüssel für eine Sitzung. Die Passion des Schlüssels ist der Nachweis der Authentifizierung und sie verfallen periodisch. Wenn sie ablaufen, authentifizieren Sie sich erneut und holen Sie eine neue. SyncAdapater fragt AccountManager nach einem Authentifizierungs-Token für eine bestimmte Account-Typ / Benutzername-Kombination. AccountManager authentifiziert sich mit dem Server (fragt den Benutzer bei Bedarf nach einem neuen Passwort aufgrund von Änderungen) und gibt das Token an den SyncAdapter zurück, der es von da an verwendet.

Wenn dieses Modell nicht für Ihre Anwendung geeignet ist, müssen Sie die Anmeldung / Abmeldung stattdessen manuell in Ihrem App-Code vornehmen. Eine Art Schmerz, ich weiß.

    
jcwenger 16.03.2011, 11:53
quelle
11

@jcwenger Das ist nicht ganz richtig. Sie können das AccountManager auch von einer interaktiven Anwendung verwenden. Sie können beispielsweise Konten hinzufügen, ohne die Benutzeroberfläche des Account Managers aufzurufen, indem Sie die AccountManager -Methode von addAccountExplicitly() verwenden.

Auf der "Hast du schon gewonnen?" Artikel Sie können deutlich sehen, dass der Account-Manager von der eigenen Activity der Anwendung aufgerufen wird. Dies ist nützlich, wenn die Anwendung über eine eigene Kontoverwaltungsschnittstelle verfügt.

    
J. Carlos Navea 30.11.2011 02:59
quelle
1

Meine Version des 'klassischen Ablaufs' mit AccountManager:

Ich benutze meine AuthenticatorActivity sowohl für den normalen Fall, in dem es verwendet wird. Konten & amp; Synchronisierungseinstellungen, aber ich öffne es auch zur Verwendung durch Anwendungen, die auf dieselben Konten angewiesen sind. Ich habe eine separate apk mit dem Authenticator implementiert und andere apps (separate apks), die auf diesen Konten beruhen.

Behandelte Fälle:

  • der Normalfall: Der Benutzer fügt hinzu / authentifiziert über. Konten & amp; Synchronisieren (gemäß dem Android-Beispielprojekt)

  • verarbeitet Authentifizierungsanforderungen von externen Apps: Wie? Ich stelle einen Intent-Filter im Manifest der Authenticator-App bereit, damit andere Apps die AuthenticatorActivity über die Instanz instanziieren können. startActivityForResult (sie müssen eine zusätzliche Absicht enthalten, die angibt, wer sie sind (das Paket ihrer App)). In der AuthenticatorActivity erkenne ich diesen Fall und lasse setCcountAuthenticatorResult nicht aufrufen, wenn der Authentifizierungsprozess zu Ende ist, weil ich ihn für den obigen Normalfall reserviert habe. Der Benutzer gibt seine Anmeldeinformationen ein und drückt "Anmelden": "AccountManger" wird auf ein übereinstimmendes Konto geprüft Behalte den Nutzernamen des Accounts als aktiven Nutzer für das Paket der anrufenden App. Ich übergebe dann eine Absicht an die anrufende App. setResult gibt den Erfolg, den Benutzernamen und den Kontotyp an. In dem Fall, in dem das Konto nicht existierte, gehe ich durch den Prozess, den der normale Fall durchläuft, d. H. Rufe addAccountExplicitely auf und setze dann den aktiven Benutzer und dann wie zuvor setResult aufrufen und beenden.

Hoffe das hilft jemandem.

    
fr1550n 30.05.2013 11:02
quelle

Tags und Links