Wofür soll ich Android AccountManager verwenden?


154

Ich habe AccountManager im Android SDK gesehen und es wird zum Speichern von Kontoinformationen verwendet. Daher kann ich keine allgemeine Diskussion darüber finden, wofür es bestimmt ist. Kennt jemand hilfreiche Diskussionen darüber, was die Absicht hinter AccountManager ist und was es Ihnen kauft? Irgendwelche Meinungen darüber, für welche Art von Konten dies geeignet ist? Würden Sie hier die Kontoinformationen Ihres Benutzers für einen allgemeinen Webdienst ablegen?


Hinweis: Ich ziele auf 2.1 und höher ab, damit ich AccountManager verwenden kann, wenn dies eine vernünftige Wahl ist
Phil

7
Es gibt einen Abschnitt über diese Frage in diesem Beitrag: udinic.wordpress.com/2013/04/24/…
Udinic

@Udinic - Danke. Viel Hilfe!
Chad Bingham

Dieses Thema wird auf dieser Website behandelt: www.digigene.com/android/accounts-in-android/
Ali Nem

Es gibt auch eine Bibliothek für die Kontoverwaltung in Android hier .
Ali Nem

Antworten:


94

Diese Frage ist etwas alt, aber ich denke, sie ist immer noch von gutem Interesse.

AccountManager, SyncAdapterUnd ContentProvidergehen zusammen.

Doch kannst du:

Mit AccountManager/ SyncAdapter/ ContentProvider:

  • AccountManager gibt Benutzern einen zentralen Punkt (Einstellungen> Konten), um ihre Anmeldeinformationen zu definieren
  • Android entscheidet, wann die Synchronisation über erfolgen kann SyncAdapter. Dies kann hilfreich sein, um die Batterie zu optimieren (z. B. erfolgt keine Synchronisierung, wenn das Netzwerk ausfällt).
  • ContentProviderist eine bequeme Möglichkeit, Daten zwischen Anwendungen auszutauschen. Hinweis: Es gibt andere Methoden für die Kommunikation zwischen Prozessen unter Android .
  • ContentProviderPlanen des Datenbankzugriffs in einem Hintergrundthread Die AsyncQueryHanlderHilfe zum Abfragen ContentProviderin einem Hintergrundthread verhindert ANR-Fehler (Application Not Responsive), ohne dass Sie das Threading explizit behandeln müssen.
  • ContentProviderbindet an ContentResolverden Beobachter: Dies bedeutet, dass es einfach ist, Ansichten zu benachrichtigen, wenn Inhalte geändert werden

Unterm Strich : das Framework AccountManager/ SyncAdapter/ ContentProviderhilft , wenn Sie Daten synchronisieren aus einer Web - Ressource wollen. Für API 7 sind gefälschte / dumme Implementierungen erforderlich

  • Wenn Sie nur Daten speichern möchten, sollten Sie einen einfacheren Mechanismus für die Datenspeicherung in Betracht ziehen
  • Wenn Sie nur eine einzige Ressource abrufen müssen, können Sie eine verwenden AsyncTaskLoader
  • Wenn Sie Bilder asynchron laden möchten, können Sie spezielle Bibliotheken wie Square Picasso verwenden
  • Wenn Sie nur einen bestimmten Code zu einem bestimmten Zeitpunkt ausführen möchten, können Sie einen Service / Alarm in Betracht ziehen
  • nur verfügbar über API> = 7 (das spielt keine Rolle mehr)

Wenn Sie eine verwenden SyncAdapter, sollten Sie Firebase Cloud Messaging (früher Google Cloud Messaging), auch bekannt als "Push-Benachrichtigungen" , ernsthaft in Betracht ziehen , um aktuellere Updates und eine optimierte Akkunutzung zu erhalten.


1
Im SDK-Beispiel ist die AccountAuthentificatorActivity das einzige optionale Element .
rds

Ich bin mit diesen Klassen noch nicht vertraut, aber können diese Klassen ohne Benutzerinteraktion ein Konto mit Funktionsaufrufen hinzufügen? Wie zum Beispiel das Hinzufügen eines Microsoft Exchange-Kontos, eines Google-Kontos oder eines POP3 / IMAP-Kontos. Vielen Dank.
dackyD


danke @rds, aber basierend auf Ihrer Erklärung scheint es nicht, dass der Beispielcode ausreicht. Es scheint, dass ich auch einen SyncAdapter und einen ContentProvider implementieren muss, um meine Ziele zu erreichen. Korrigieren Sie mich, wenn ich falsch
liege

Absolut korrekt. Es war die Bedeutung meines ersten Absatzes, sie gehören zusammen und es ist unmöglich, einen ohne die anderen zu verwenden.
rds

23

Die AccountManager-Klasse ist in Ihre Telefonkonten integriert. Wenn Sie also alle Anleitungen befolgen und es richtig funktionieren lassen, werden Ihre Konten unter dem Menü "Einstellungen-> Konten und Synchronisierung" angezeigt. Von dort aus können Sie sie anpassen oder sogar löschen. Darüber hinaus verfügt der accountManager über einen Cache mit den Authentifizierungstickets für Ihre Konten. Dies kann auch verwendet werden, wenn Sie nicht vorhaben, Ihr Konto zu synchronisieren (soweit ich weiß).

Wenn Sie nicht möchten, dass Ihre Konten in diesem Menü angezeigt werden, sollten Sie den AccountManager nicht verwenden und die Kontodaten an anderer Stelle speichern (möglicherweise in den freigegebenen Einstellungen). Http://developer.android.com/guide/topics/data/data -storage.html


14

Von http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/ :

Das erste Puzzleteil heißt Account Authenticator und definiert, wie das Konto des Benutzers in den Einstellungen für "Accounts & Sync" angezeigt wird. Das Implementieren eines Kontoauthentifizierers erfordert drei Teile: einen Dienst, der eine Unterklasse von AbstractAccountAuthenticator von der onBind-Methode zurückgibt, eine Aktivität, mit der der Benutzer zur Eingabe seiner Anmeldeinformationen aufgefordert wird, und eine XML-Datei, die beschreibt, wie Ihr Konto aussehen soll, wenn es dem Benutzer angezeigt wird. Sie müssen auch die Berechtigung android.permission.AUTHENTICATE_ACCOUNTS zu Ihrer AndroidManifest.xml hinzufügen.


3
Das ist ein guter Artikel, aber denken Sie, dass der AccountManager nur für Konten gedacht ist, die Kontakte und E-Mails synchronisieren, oder können / sollten wir ihn für alles verwenden, das Benutzer-IDs und Kennwörter hat?
Phil

@Phil: Ich habe AccountManager noch nie verwendet, daher kann ich es Ihnen nicht sagen. Denken Sie daran, dass dies mit 2.0 geliefert wird. Wenn Sie also bereit sind, auf Geräten mit niedrigerem SDK ausgeführt zu werden, müssen Sie einen anderen Weg finden, um die Anmeldung zu handhaben.
Macarse

6
Sie können den Account Manager für jede Art von Konto verwenden und jede Art von Daten synchronisieren, die Sie auf irgendeine Weise speichern. Unter github.com/maxpower47/PinDroid finden Sie ein Beispiel für die Verwendung zum Synchronisieren von Lesezeichen mit einer SQLite-Datenbank.
Maxpower47

7

Das AccountManagerist aus folgenden Gründen gut:

  • Zunächst müssen mehrere Kontonamen mit unterschiedlichen Zugriffsebenen auf die Funktionen der App unter einem einzigen Kontotyp gespeichert werden. In einer Video-Streaming-App kann beispielsweise einer zwei Kontonamen haben: einer mit Demo-Zugriff auf eine begrenzte Anzahl von Videos und der andere mit monatlichem Zugriff auf alle Videos. Dies ist jedoch nicht der Hauptgrund für die Verwendung Accounts, da Sie dies in Ihrer App problemlos verwalten können, ohne dass Sie dieses ausgefallene AccountsDing benötigen .
  • Der andere Vorteil der Verwendung Accountsbesteht darin, die herkömmliche Autorisierung mit Benutzername und Kennwort jedes Mal zu entfernen, wenn eine autorisierte Funktion vom Benutzer angefordert wird, da die Authentifizierung im Hintergrund stattfindet und der Benutzer nur unter bestimmten Bedingungen nach seinem Kennwort gefragt wird Ich werde später darauf zurückkommen.
  • Durch die Verwendung der AccountsFunktion in Android entfällt auch die Notwendigkeit, den eigenen Kontotyp zu definieren. Sie sind wahrscheinlich auf die Apps gestoßen, die Google-Konten für die Autorisierung verwendet haben. Dies erspart Ihnen den Aufwand, ein neues Konto zu erstellen und die Anmeldeinformationen für den Benutzer zu speichern.
  • Accounts kann unabhängig über Einstellungen → Konten hinzugefügt werden
  • Die plattformübergreifende Benutzerautorisierung kann einfach mit verwaltet werden Accounts. Beispielsweise kann der Client auf seinem Android-Gerät und PC gleichzeitig auf geschütztes Material zugreifen, ohne dass wiederholte Anmeldungen erforderlich sind.
  • Unter Sicherheitsgesichtspunkten ermöglicht die Verwendung des gleichen Kennworts bei jeder Anforderung an den Server ein mögliches Abhören bei nicht sicheren Verbindungen. Die Passwortverschlüsselung reicht hier nicht aus, um Passwortdiebstahl zu verhindern.
  • Schließlich ist ein wichtiger Grund für die Verwendung der AccountsFunktion in Android die Trennung der beiden an einem Geschäft beteiligten Parteien, die vom Accountssogenannten Authentifikator und Ressourcenbesitzer abhängig sind , ohne die Anmeldeinformationen des Clients (Benutzers) zu beeinträchtigen. Die Begriffe mögen ziemlich vage erscheinen, aber geben Sie nicht auf, bis Sie den folgenden Absatz gelesen haben… 😉

Lassen Sie mich letzteres anhand eines Beispiels für eine Video-Streaming-App näher erläutern. Unternehmen A ist Inhaber eines Video-Streaming-Geschäfts im Vertrag mit Unternehmen B, um seinen bestimmten Mitgliedern Premium-Streaming-Dienste anzubieten. Unternehmen B verwendet eine Benutzername- und Kennwortmethode zur Erkennung seines Benutzers. Damit Unternehmen A die Premium-Mitglieder von B erkennt, besteht eine Möglichkeit darin, die Liste von B zu erhalten und einen ähnlichen Mechanismus zum Abgleichen von Benutzername und Passwort zu verwenden. Auf diese Weise sind der Authentifikator und der Ressourcenbesitzer identisch (Firma A). Abgesehen von der Verpflichtung der Benutzer, sich ein zweites Passwort zu merken, ist es sehr wahrscheinlich, dass sie dasselbe Passwort wie das Profil ihres Unternehmens B für die Nutzung der Dienste von A festlegen. Dies ist offensichtlich nicht günstig.

Um die oben genannten Mängel zu beheben, wurde OAuth eingeführt. Als offener Standard für die Autorisierung fordert OAuth im obigen Beispiel, dass die Autorisierung von Unternehmen B (Authentifikator) durchgeführt wird, indem ein Token namens Access Token für die berechtigten Benutzer (Dritte) ausgestellt und dann Unternehmen A (Ressourcenbesitzer) bereitgestellt wird das Zeichen. Kein Token bedeutet also keine Berechtigung.

Ich habe mehr dazu und mehr AccountManagerauf meiner Website hier näher ausgeführt .

Dies ist eine einfache App mit AccountManager

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.