2

Je travaille sur une application Google Tasks avec la nouvelle API, mais je ne peux pas obtenir l'autorisation de travailler. J'utilise Android AccountManager pour obtenir une authToken, la chose étrange est que je reçois une erreur indiquant que je utilise les informations d'identification: mauvaisesAccountManager semble retourner une erreur authToken

{ 
    "error": { 
     "errors": [ 
      { 
       "domain": "global", 
       "reason": "invalid", 
       "message": "Invalid Credentials", 
       "locationType": "header", 
       "location": "Authorization" 
      } 
     ], 
     "code": 401, 
     "message": "Invalid Credentials" 
    } 
} 

Mon code:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    transport = AndroidHttp.newCompatibleTransport(); 
    transport.defaultHeaders = new GoogleHeaders(); 

    gotAccount(false); 
} 

private void authenticated(String authToken) { 
    ((GoogleHeaders) transport.defaultHeaders).setGoogleLogin(authToken); 
    Tasks service = new Tasks(transport, new GsonFactory()); 

    try { 
     TaskLists taskLists = service.tasklists.list().execute(); 
    } catch (Exception e) { 
     handleException(e); 
    } 

} 

private void gotAccount(final AccountManager manager, final Account account) { 
    new Thread() { 

     @Override 
     public void run() { 
      try { 
       final Bundle bundle = manager.getAuthToken(account, AUTH_TOKEN_TYPE, true, 
         null, null).getResult(); 
       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         if (bundle.containsKey(AccountManager.KEY_INTENT)) { 
          Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT); 
          int flags = intent.getFlags(); 
          flags &= ~Intent.FLAG_ACTIVITY_NEW_TASK; 
          intent.setFlags(flags); 
          startActivityForResult(intent, REQUEST_AUTHENTICATE); 
         } else if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) { 
          authenticated(bundle.getString(AccountManager.KEY_AUTHTOKEN)); 
         } 
        } 

       }); 
      } catch (Exception e) { 
       handleException(e); 
      } 
     }; 
    }.start(); 
} 

private void gotAccount(boolean tokenExpired) { 
    AccountManager manager = AccountManager.get(this); 
    Account account = manager.getAccountsByType("com.google")[0]; 
    if (tokenExpired) { 
     manager.invalidateAuthToken("com.google", mAuthToken); 
    } 
    gotAccount(manager, account); 
} 

J'ai essayé d'utiliser un HttpRequestInitializer et appliquer le authToken dans un HttpExecuteInterceptor au lieu d'utiliser le HttpTransport.defaultHeaders (obsolète) mais cela ne fonctionne pas non plus.

new Tasks(transport, initializer, new GsonFactory()); 

Qu'est-ce que je fais mal? Mes références sont évidemment correctes, GMail fonctionne bien.

Répondre

2

J'ai trouvé le problème: J'utilisais authTokenType goanna_mobile, que j'ai trouvé dans une autre application. Même si AccountManager me demande d'autoriser mon application à accéder aux tâches Google, il s'agit du type authTokenType incorrect. La bonne est cl pour Google Agenda.

Questions connexes