2012-05-18 4 views
0

J'écris une application Android qui utilise à la fois l'API Google Agenda et Google Tâches. Authentification à travers les tâches fonctionne parfaitement. Cependant, lorsque j'accède à l'API de l'agenda, un écran indique "Un problème est survenu lors de la communication avec les services Google. Veuillez réessayer plus tard". avec la rubrique "Impossible de se connecter". Si je clique sur suivant, un écran de connexion ... s'affiche pendant environ une demi-seconde, puis je suis renvoyé à l'écran "problème survenu".Authentification avec l'API Google Calendar

Le code où je m'authentifie auprès de l'API Calendar est ci-dessous. Notez que le code de l'API Tâches, qui fonctionne correctement, est presque identique.

GoogleAccountManager google_manager = new GoogleAccountManager(this); 
Account[] accounts = google_manager.getAccounts(); 
Account my_account; 
if (accounts.length > 1) my_account = selectWhichAccount(accounts); 
else { 
    if (accounts.length == 0) display_no_account_dialog(); 
    Log.v("account",accounts[0].toString()); 
    my_account = accounts[0]; 
} 
final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/calendar"; 
Log.v("schedule","getting auth token"); 
google_manager.manager.getAuthToken(my_account, AUTH_TOKEN_TYPE, null, this, new AccountManagerCallback<Bundle>() { 

     @Override 
     public void run(AccountManagerFuture<Bundle> future) { 
      try { 
       String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN); 
       Log.d("schedule","starting scheduletask"); 
       start_ScheduleTask(t, token); 
      } catch (OperationCanceledException e) { 
       Log.v("accounts","denied access to account"); 
       handleException(e); 
      } catch (Exception e) { 
       handleException(e); 
      } 
     } 
    }, null); 

Répondre

0

jetons de OAuth2 spécifiés en utilisant le « oauth2: » préfixe ne sont que partiellement pris en charge par AccountManager et certains d'entre eux ne fonctionnent pas. Malheureusement, ce qui est soutenu et ce qui ne l'est pas n'est actuellement pas documenté (AFAIK). Vous avez deux possibilités: utilisez ClientLogin (utilisez 'cl' comme type de jeton) ou obtenez un jeton en utilisant un WebView. Le ClientLogin devrait fonctionner correctement pour le moment, mais il est officiellement désapprouvé et disparaîtra dans environ un an.