AuthToken de AccountManager dans Android Client N'a Plus de Travail
Je suis assez exaspéré. Je suis d'essayer de construire une tour par tour multijoueur en ligne jeu pour Android à l'aide de Google App Engine Java en tant que serveur.
Ils semblent comme un ajustement parfait. Android nécessite un compte Google, et GAE utilise un compte Google pour l'authentification, tout en étant libre et évolutive.
Donc avant les vacances, j'ai été en mesure d'obtenir l'authentification à mon GAE application à partir de mon Android client à l'aide de la nouvelle AccountManager API Android 2.0. Le code suivant vous permet d'accéder à la AuthToken de l'utilisateur du compte Google et ensuite l'utiliser pour l'authentification, de sorte que l'utilisateur n'a pas à entrer manuellement leur compte nom d'utilisateur et le mot de passe:
AccountManager mgr = AccountManager.get(this);
Account[] accts = mgr.getAccountsByType("com.google");
Account acct = accts[0];
AccountManagerFuture<Bundle> accountManagerFuture = mgr.getAuthToken(acct, "ah", null, this, null, null);
Bundle authTokenBundle = accountManagerFuture.getResult();
String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();
J'étais alors en mesure d'ajouter le résultant AuthToken chaîne de caractères de l'URL appropriée et d'obtenir un cookie valide qui je pourrais ensuite utiliser pour toutes les autres demandes. La seule chose c'est, parfois, la semaine dernière il s'est juste arrêté de travailler pour moi. Maintenant, quand j'essaie d'utiliser le AuthToken du code ci-dessus, je ne suis pas un cookie est retourné et mon code génère une exception NullPointerException pour le cookie manquant.
Quand je reviens à l'ancienne manière, lorsque l'utilisateur a été saisie manuelle dans leur Google nom d'utilisateur et le mot de passe et je reçois le AuthToken de "https://www.google.com/accounts/ClientLogin", il fonctionne très bien.
S'il vous plaît dites-moi quelqu'un a construit un client Android pour Google App Engine application à l'aide de la AuthToken du compte Google sur le téléphone de l'utilisateur, et de me donner quelques indices quant à pourquoi cela ne fonctionne plus.
J'aimerais vraiment faire ce travail. Mes solutions sont à obliger l'utilisateur à entrer leurs informations d'identification (qui est maladroit, et qu'ils ne devraient pas avoir à le faire), ou aller avec une autre solution pour le serveur.
Merci d'avance.
- Peut-on le tester sur un émulateur de course Api Google?
- Pour ceux qui se demandent ce que "l'URL appropriée", et comment "obtenir un cookie valide," il est recouvert d'une manière ordonnée dans ce post, qui couvre également invalider la authToken
Vous devez vous connecter pour publier un commentaire.
Obtenu de l'aide pour ce à partir d'un ingénieur Google. S'avère que mon authToken était expiré. J'avais d'abord eu la mise en place de travail au début de décembre (le 9 pour être exact). Apparemment ce que le AccountManager ne se cache le authToken, si j'avais été en utilisant le même authToken depuis Déc. 9. Quand je suis rentré de vacances, il avait expiré.
Pour résoudre le problème, j'appelle maintenant getAuthToken, puis d'appeler invalidateAuthToken sur ce jeton, puis d'appeler getAuthToken de nouveau. Cela génère un valide authToken et fonctionne très bien, même si il est un peu maladroit et serait inutile si AccountManager viens de recevoir une nouvelle authToken à chaque fois, ou a fait une vérification pour voir si la mise en cache l'un était expiré.
Notez que vous ne devez pas mélanger type de jeton avec le type de compte: invalidateAuthToken doit être appelé "com.google" au lieu de "ah" ou il en silence à l'échec.
pas une réponse en soi, mais j'ai dû remplacer le "ah" avec "android" à la ligne 4 pour obtenir le jeton sur un android nexus one avec android v2.2.1. pas sûr au sujet d'autres appareils/versions.
ligne 4 puis se tourne à partir de :
dans :