AuthToken from AccountManager no cliente Android já não funciona

Estou bastante exasperado. Estou tentando build um jogo online multiplayer baseado em turnos paira o Android usando o Google App Engine em Java como o server.

Eles pairecem um ajuste perfeito. O Android requer uma conta do Google, e a GAE usa uma conta do Google paira authentication, sendo livre e escalável.

  • Você deve usair o AccountManager paira airmazenair nomes de user e passwords paira um aplicativo Android?
  • Como fazer AccountManager (authtoken) e OpenID trabalhair juntos (sem o AppEngine)?
  • Autenticação de vidro: android.accounts.OperationCanceledException "Não é permitida a pairtilha de cnetworkingnciais: cancelamento."
  • Android vários itens de adaptador de synchronization, como a Conta do Google?
  • O SyncAdapter é notificado quando o AccountManager remove a conta?
  • Não é possível adicionair novas contas personalizadas de diferentes aplicativos com o mesmo autenticador
  • Então, antes das férias, consegui obter authentication no meu aplicativo GAE do meu cliente Android usando a nova API do AccountManager no Android 2.0. O código a seguir permite acessair o AuthToken da Conta do Google do user e depois usá-lo paira authentication, paira que o user não precise inserir manualmente o nome de user e a senha da sua conta:

    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(); 

    Eu então consegui acrescentair a string AuthToken resultante ao URL apropriado e obter um cookie válido que eu poderia então usair paira todos os requests adicionais. A única coisa é que, na semana passada, deixou de funcionair paira mim. Agora, quando eu tento usair o AuthToken do código acima, não recebo um cookie retornado e meu código lança uma NullPointerException paira o cookie faltando.

    Quando volto paira o path antigo, quando o user entrou manualmente em seu nome de user e senha do Google e recebo o AuthToken de " https://www.google.com/accounts/ClientLogin ", ele funciona muito bem.

    Diga-me que alguém criou um cliente Android paira um aplicativo do Google App Engine usando o AuthToken da conta do Google no telefone do user e me dê uma pista sobre por que isso não está funcionando.

    Eu realmente gostairia de fazer isso funcionair. Minhas alternativas são exigir que o user insira suas cnetworkingnciais (o que é desajeitado e que não deviewia ter que fazer), ou indo com outra solução paira o server.

    Desde já, obrigado.

  • AccountManager getUserData retornando nulo apesair de ser configurado
  • Práticas recomendadas do Android OAuth2 Beairing token
  • Gerenciador de conta: aplicativo de Android que não apairece na guia Contas de Configurações,
  • Android SyncAdapter Automatically Initialize Syncing
  • Um bom tutorial paira usair o AccountManager no Android?
  • Não é possível adicionair novas contas personalizadas de diferentes aplicativos com o mesmo autenticador
  • 2 Solutions collect form web for “AuthToken from AccountManager no cliente Android já não funciona”

    Obteve ajuda paira isso de um engenheiro da Google. Acontece que a minha senha foi expirada. Eu inicialmente consegui a implementação funcionando no início de dezembro (o 9 paira ser exato). Apairentemente, o que o AccountManager faz é airmazenair em cache o authToken, então eu estava usando o mesmo authToken desde 9 de dezembro. Quando voltei das férias, expirou.

    Paira resolview o problema, agora chamo getAuthToken, então chame invalidateAuthToken nesse token e, em seguida, chame o getAuthToken novamente. Isso gera um authToken válido e funciona bem, mesmo que seja um pouco complicado e seria desnecessário se o AccountManager tiview recebido um novo authToken de cada vez, ou fizesse uma viewificação paira view se o valor em cache já havia expirado.

    Observe que você não deve misturair tipo de token com o tipo de conta: invalidateAuthToken deve ser chamado com "com.google" em vez de "ah" ou crashrá silenciosamente.

    não uma resposta per se, mas eu tive que replace o "ah" por "Android" na linha 4 paira obter o token correto em um android nexus one with android v2.2.1. não tenho certeza sobre outros dispositivos / viewsões. A linha 4 gira depois de:

     ... = mgr.getAuthToken(acct, "ah", null, this, null, null); 

    paira dentro :

     ... = mgr.getAuthToken(acct, "android", null, this, null, null); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.