Pour quoi dois-je utiliser Android AccountManager?


154

J'ai vu AccountManager dans le SDK Android et qu'il est utilisé pour stocker les informations de compte. Ainsi, je ne trouve aucune discussion générale sur ce à quoi il est destiné. Quelqu'un a-t-il connaissance de discussions utiles sur l'intention derrière AccountManager et ce qu'il vous achète? Avez-vous des opinions sur le type de comptes auquel cela convient? Serait-ce là où vous mettriez les informations de compte de votre utilisateur pour un service Web général?


Remarque Je cible 2.1 et au-dessus, donc je peux utiliser AccountManager si c'est un choix judicieux
Phil

7
Il y a une section sur cette question dans cet article: udinic.wordpress.com/2013/04/24/…
Udinic

@Udinic - Merci. Beaucoup d'aide!
Chad Bingham

Ce sujet est traité dans ce site: www.digigene.com/android/accounts-in-android/
Ali Nem

Il existe également une bibliothèque pour la gestion de compte sous Android ici .
Ali Nem le

Réponses:


94

Cette question est un peu ancienne, mais je pense qu'elle est toujours d'un bon intérêt.

AccountManager, SyncAdapteret ContentProviderallez ensemble.

Mais tu peux:

Avec AccountManager/ SyncAdapter/ ContentProvider:

  • AccountManager donne aux utilisateurs un point central (Paramètres> Comptes) pour définir leurs informations d'identification
  • Android décide quand la synchronisation peut être effectuée via SyncAdapter. Cela peut être utile pour optimiser la batterie (aucune synchronisation n'est effectuée lorsque le réseau est en panne, par exemple)
  • ContentProviderest un moyen pratique de partager des données entre les applications Remarque: il existe d' autres méthodes de communication inter-processus sur Android .
  • ContentProviderles horaires d' accès de thread - base de données en arrière - plan L' AsyncQueryHanlderaide à interroger le ContentProviderdans un thread d'arrière - plan, ce qui empêche les erreurs d'application ne répond pas (ANR) sans vous obliger à gérer explicitement le filetage.
  • ContentProviderest lié à ContentResolverl'observateur de: cela signifie qu'il est facile de notifier les vues lorsque le contenu est modifié

Bottom line : le framework AccountManager/ SyncAdapter/ vous ContentProvideraide si vous souhaitez synchroniser les données d'une ressource Web. Des implémentations fausses / stupides sont requises sur l'API 7. Aussi

  • Si vous souhaitez uniquement stocker des données, vous devez envisager un mécanisme plus simple de stockage de données
  • Si vous n'avez besoin de récupérer qu'une seule ressource, vous pouvez utiliser un AsyncTaskLoader
  • Si vous souhaitez charger des images de manière asynchrone, vous pouvez utiliser des bibliothèques spécialisées comme Square Picasso
  • Si vous ne souhaitez exécuter que du code à un moment donné, vous pouvez envisager un service / alarme
  • uniquement disponible depuis l'API> = 7 (cela n'a plus d'importance)

Enfin, si vous utilisez un SyncAdapter, envisagez sérieusement Firebase Cloud Messaging (anciennement Google Cloud Messaging), également appelé «notifications push», pour bénéficier de mises à jour plus récentes et d'une utilisation optimisée de la batterie.


1
Dans l'exemple du SDK, AccountAuthentificatorActivity est le seul élément facultatif.
rds

Je ne suis pas encore familier avec ces classes, mais est-il possible pour ces classes d'ajouter un compte avec des appels de fonction sans interaction de l'utilisateur? Comme par exemple l'ajout d'un compte Microsoft Exchange, d'un compte Google, d'un compte POP3 / IMAP. Merci.
dackyD

@dackyD oui, vous pouvez ajouter un compte par programme
rds

merci @rds mais d'après votre explication, il ne semble pas que l'exemple de code soit suffisant. Il semble que je doive également implémenter un SyncAdapter et un ContentProvider pour atteindre mes objectifs. Corrigez-moi si je me trompe :)
dackyD

Absolument correct. C'était le sens de mon premier paragraphe, ils vont de pair et il est impossible d'en utiliser l'un sans les autres.
rds

23

La classe AccountManager est intégrée à vos comptes téléphoniques. Donc, si vous suivez tous les guides et que cela fonctionne correctement, vous verrez vos comptes dans le menu "Paramètres-> comptes et synchronisation". De là, vous pouvez les personnaliser ou même les supprimer. De plus, le accountManager a un cache des tickets d'authentification pour vos comptes. Cela peut également être utilisé si vous ne prévoyez pas de synchroniser votre compte (pour autant que je sache).

Si vous ne voulez pas que vos comptes apparaissent dans ce menu, vous ne devez pas utiliser le AccountManager et stocker les données des comptes ailleurs (peut-être dans les préférences partagées) http://developer.android.com/guide/topics/data/data -storage.html


14

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

La première pièce du puzzle est appelée un authentificateur de compte, qui définit comment le compte de l'utilisateur apparaîtra dans les paramètres «Comptes et synchronisation». La mise en œuvre d'un authentificateur de compte nécessite 3 éléments: un service qui renvoie une sous-classe de AbstractAccountAuthenticator à partir de la méthode onBind, une activité pour inviter l'utilisateur à entrer ses informations d'identification et un fichier xml décrivant à quoi votre compte doit ressembler lorsqu'il est affiché à l'utilisateur. Vous devrez également ajouter l'autorisation android.permission.AUTHENTICATE_ACCOUNTS à votre AndroidManifest.xml.


3
C'est un bon article, mais pensez-vous que le AccountManager est uniquement destiné aux comptes qui synchronisent les contacts et les e-mails, ou pouvons-nous / devrions-nous l'utiliser pour tout ce qui a des identifiants d'utilisateur et des mots de passe?
Phil

@Phil: Je n'ai jamais utilisé AccountManager donc je ne peux pas vous le dire. N'oubliez pas que cela vient avec 2.0, donc si vous êtes prêt à exécuter sur des appareils avec un SDK inférieur, vous devrez trouver un autre moyen de gérer la connexion.
Macarse

6
Vous pouvez utiliser le gestionnaire de compte pour tout type de compte, synchronisant de quelque manière que ce soit tout type de données que vous stockez. Consultez github.com/maxpower47/PinDroid pour un exemple de son utilisation pour synchroniser des signets avec une base de données sqlite.
maxpower47

7

Le AccountManagerest bon pour les raisons suivantes:

  • La première consiste à stocker plusieurs noms de compte avec différents niveaux d'accès aux fonctionnalités de l'application sous un seul type de compte. Par exemple, dans une application de streaming vidéo, l'un peut avoir deux noms de compte: l'un avec un accès de démonstration à un nombre limité de vidéos et l'autre avec un accès d'un mois complet à toutes les vidéos. Ce n'est pas la principale raison d'utiliser Accounts, cependant, car vous pouvez facilement gérer cela dans votre application sans avoir besoin de cette Accountschose sophistiquée ….
  • L'autre avantage de l'utilisation Accountsest de se débarrasser de l'autorisation traditionnelle avec nom d'utilisateur et mot de passe à chaque fois qu'une fonctionnalité autorisée est demandée par l'utilisateur, car l'authentification a lieu en arrière-plan et l'utilisateur n'est demandé son mot de passe que dans certaines conditions, ce qui J'y reviendrai plus tard.
  • L'utilisation de la Accountsfonctionnalité dans Android supprime également la nécessité de définir son propre type de compte. Vous avez probablement rencontré des applications utilisant des comptes Google pour l'autorisation, ce qui évite d'avoir à créer un nouveau compte et à mémoriser ses informations d'identification pour l'utilisateur.
  • Accounts peut être ajouté indépendamment via Paramètres → Comptes
  • L'autorisation utilisateur multiplateforme peut être facilement gérée à l'aide de Accounts. Par exemple, le client peut accéder à du matériel protégé en même temps sur son appareil Android et son PC sans avoir besoin de connexions récurrentes.
  • Du point de vue de la sécurité, l'utilisation du même mot de passe dans chaque demande au serveur permet une éventuelle écoute clandestine dans les connexions non sécurisées. Le cryptage du mot de passe n'est pas suffisant ici pour empêcher le vol de mot de passe.
  • Enfin, une raison importante pour utiliser la Accountsfonctionnalité dans Android est de séparer les deux parties impliquées dans toute entreprise dépendante Accounts, soi-disant authentificateur et propriétaire de la ressource, sans compromettre les informations d'identification du client (utilisateur). Les termes peuvent sembler assez vagues, mais n'abandonnez pas avant d'avoir lu le paragraphe suivant… 😉

Permettez-moi de développer ce dernier avec un exemple d'application de streaming vidéo. La société A est titulaire d'une entreprise de streaming vidéo en contrat avec la société B pour fournir à ses certains membres des services de streaming premium. La société B utilise une méthode de nom d'utilisateur et de mot de passe pour reconnaître son utilisateur. Pour que la société A reconnaisse les membres premium de B, une façon serait d'obtenir la liste d'entre eux auprès de B et d'utiliser un mécanisme de correspondance nom d'utilisateur / mot de passe similaire. De cette façon, l'authentificateur et le propriétaire de la ressource sont identiques (société A). Outre l'obligation des utilisateurs de se souvenir d'un deuxième mot de passe, il est très probable qu'ils définissent le même mot de passe que le profil de leur entreprise B pour utiliser les services de A. Ce n'est évidemment pas favorable.

Pour pallier les lacunes ci-dessus, OAuth a été introduit. En tant que norme ouverte d'autorisation, dans l'exemple ci-dessus, OAuth exige que l'autorisation soit effectuée par la société B (authentificateur) en émettant un jeton appelé jeton d'accès pour les utilisateurs éligibles (tiers), puis en fournissant à la société A (propriétaire de la ressource) le jeton. Donc pas de jeton signifie pas d'éligibilité.

J'ai développé plus à ce sujet et plus AccountManagersur mon site Web ici.

Ceci est une application simple utilisant AccountManager

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.