8
votes

Manipulation de la connexion et souvenez-vous de moi avec le confortManager

J'ai intégré la gestion de compte de Android dans ma demande et je peux gérer des comptes à partir des comptes comptes et synchronisation .

Je veux avoir l'activité de connexion classique qui transfère l'utilisateur à son activité à domicile sur une connexion réussie, auquel vous avez la possibilité de mémoriser le mot de passe de l'utilisateur. Toutefois, le CompteAuthenticatorCitoractimitoractimitoractimitoractimitoractivitor CompteManager avec les informations d'identification et le reste des informations du compte, appelant un explicite () et retourner l'intention.

Comment puis-je donner le CompteManager l'info dont il a besoin sans avoir à finition () mon activité de connexion?


1 commentaires

Alors, avez-vous finalement parvenu à gérer la connexion et souvenez-vous de moi avec le confortManager? J'ai eu du mal avec mon flux d'applications à cause de cela. Je veux déclencher la comptabilitéAuthentiCitoractivité lorsque je commence mon application uniquement s'il n'y a pas de compte sur l'appareil, mais je ne peux tout simplement pas réussir à obtenir une "meilleure pratique" pour le rendre correctement.


3 Réponses :


20
votes

CompteManager n'est pas censé être appelé par une application interactive, mais plutôt par un adaptateur de synchronisation. (Un excellent tutoriel est "Avez-vous déjà gagné?" Écrire un fournisseur de synchronisation Android " partie 1 et Partie 2 qui donne d'excellents exemples de code mais ne fait pas un excellent travail d'explication du flux de données.) C'est comme ceci:

Vous développez un fournisseur de contenu qui enveloppe une base de données. Vous construisez une synchronisation (ceci est un service d'arrière-plan) pour vous connecter à un serveur et récupérer des données et synchroniser le fichier de contenu pour correspondre au serveur. Ensuite, votre interface utilisateur interroge sur le fournisseur de contenu pour afficher les données récupérées. Il existe également des méthodes pour interroger directement pour des informations spécifiques, si vous souhaitez rechercher et mettre en cache les résultats, par exemple. Voir Développement des applications Android reposantes pour un Nice séance d'heure sur la façon dont le modèle de données devrait regarder. Ils donnent trois exemples d'architecture, à partir d'une mise en œuvre "naïve", passent ensuite au modèle de synchronisation approprié.

En ce qui concerne l'authentification elle-même, la manière dont Syncadapter utilise le compte de compte pour obtenir un jeton d'authentification. Ceci est un (souvent) une grande valeur hexidécimale, passée dans le cadre des en-têtes HTML au lieu d'une paire de nom d'utilisateur / mot de passe. Pensez-y comme une clé unique d'une session. La posession de la clé est la preuve de l'authentification et expire périodiquement. Quand ils expirent, vous ressentez et récupérez un nouveau. Syncadapater demande à CompteManager pour un jeton d'authentification pour une combinaison spécifique de type de compte / nom d'utilisateur. Auteurs de comptesManager avec le serveur (demandant à l'utilisateur un nouveau mot de passe si nécessaire en raison de la modification) et renvoie le jeton sur la synchronisation, qui l'utilise à partir de là.

Si ce modèle ne convient pas à votre application, vous devez gérer manuellement la connexion / la déconnexion dans votre code d'application. Une sorte de douleur, je sais.


4 commentaires

J'ai actuellement une configuration comme si vous avez mentionné, avec le fournisseur de contenu enracinant la base de données et l'utilisation d'adaptateurs de synchronisation (que Google Io Talk Rocks!). J'essaie simplement de réutiliser mon comptabilitéAuthenticitoractivité pour gérer des connexions régulières. Les tutoriels "avez-vous gagné?


D'accord, raison. Ainsi, l'exemple de code indique un écran de connexion, mais comme les autres comptes (compte Google, compte Facebook, etc.), l'écran affiche à partir du panneau Contrôle de comptes et de synchronisation, et non de votre application. (Essayez de trouver un endroit pour entrer un mot de passe dans l'application Gmail Android ... Vous ne pouvez pas! Seulement via les comptes et la synchronisation). Donc, le modèle ici est ici, vous entrez votre mot de passe sur la page de contrôle A & S, puis votre application demande à la comptabilitéAuthenticator comment entrer sur le serveur. L'authentificateur fournit un Autoken à votre Syncadapater et SyncAdapter fournit à AuthToken au serveur d'authentifier.


Eh bien, plus précisément, vous pouvez ajouter un compte, mais en appelant une intention de démarrer l'activité des comptes et de la synchronisation "Créer un compte" - pas en appelant directement quelque chose sur CompteAuthenticator ... puis une fois le compte créé, il est bloqué. En attendant que SyncAdapter fasse le sale travail pour cela, comme dans votre cas.


J'ai écrit un article de blog sur la synchronisation des données dans Android, y compris votre réponse et des articles! Vérifiez-le Naked-Code.Blogspot.com/2011 / 05 / ...



11
votes

@jcwenger qui n'est pas entièrement correct. Vous pouvez utiliser le CompteManager à partir d'une application interactive également. Par exemple, vous pouvez ajouter des comptes sans appeler l'interface de compte de compte à l'aide de CompteManager 'S addaccountSplicity () méthode.

sur le "Avez-vous déjà gagné?" Article Vous pouvez clairement voir que le gestionnaire de compte est invoqué à partir de l'activité de l'application . Ceci est utile si l'application a sa propre interface de gestion de compte.


0 commentaires

1
votes

Ma version du «flux classique» à l'aide de CompteManager:

J'utilise mon authentificateur d'authentification pour le cas normal où il est utilisé via. Comptes et paramètres de synchronisation, mais je l'ouvre également pour une utilisation par des applications qui s'appuient sur les mêmes comptes. J'ai une APK séparée avec l'authentificateur implémenté et d'autres applications (APKS séparées) qui s'appuient sur ces comptes.

cas traités:

  • Le cas normal: l'utilisateur ajoute / authentifie via. Comptes et synchronisation (selon le projet d'échantillon Android)

  • Gérer les demandes d'authentification des applications externes: Comment? Je fournis un filtre d'intention dans le manifeste de l'application d'authenticator afin que d'autres applications puissent instancier l'authentificateurActivité via. StartActivityForresult (ils doivent inclure une intention supplémentaire qui indique à qui ils sont (le paquet de leur application)). Dans l'authentificateurActivité, je détecte ce cas et je m'abstiens d'appeler SetAccountTuthenticatorResultorResultor lorsque le processus d'authentification s'est terminé car je me réservais qu'il est utilisé pour l'affaire normale ci-dessus. L'utilisateur entre dans leurs informations d'identification et appuie sur Connexion: CompteManger est vérifié pour un compte correspondant et si correspondance i Persisez le nom d'utilisateur de ce compte en tant qu'utilisateur actif pour le package de l'application d'appel. Je retourne ensuite une intention de l'application appelante via. SETRESULT indiquant le succès, le nom d'utilisateur et le type de compte. Dans le cas où le compte n'existait pas, je passe dans le processus que le cas normal passe, c'est-à-dire appelant addaccountExplicitement, puis définissez l'utilisateur actif, puis comme avant d'appeler SETRESULT et Terminer.

    J'espère que cela aide quelqu'un.


0 commentaires