He estado luchando con esto por un par de días. Intento hacer llamadas a Google Calendar usando la autenticación a través del AccountManager
de Android. Puedo recuperar un token de autenticación utilizando el método habitual:Autenticando con Google API usando AccountManager
AccountManager manager = AccountManager.get(this);
String authToken = manager.getAuthToken(account, AUTH_TOKEN_TYPE, true, null, null).getResult().getString(AccountManager.KEY_AUTHTOKEN);
Y entonces, con esa manera, se crea una instancia de Calendar
así:
HttpTransport transport = AndroidHttp.newCompatibleTransport();
JacksonFactory jsonFactory = new JacksonFactory();
GoogleAccessProtectedResource accessProtectedResource = new GoogleAccessProtectedResource(accessToken);
Calendar calendar = Calendar.builder(transport, jsonFactory).setApplicationName("MyApp/1.0").setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
@Override
public void initialize(JsonHttpRequest request) {
CalendarRequest calendarRequest = (CalendarRequest) request;
calendarRequest.setKey(API_KEY);
}
}).setHttpRequestInitializer(accessProtectedResource).build();
Sin embargo, cuando la API con esto, reciba el error 401 Unauthorized
que se ve a continuación. Tenga en cuenta que he incluido el código para invalidar tokens de autenticación vencidos, por lo que no creo que ese sea el problema aquí.
com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
{
"code" : 401,
"errors" : [ {
"domain" : "global",
"location" : "Authorization",
"locationType" : "header",
"message" : "Invalid Credentials",
"reason" : "authError"
} ],
"message" : "Invalid Credentials"
}
¿Alguna idea de lo que podría estar haciendo mal?
Bien, actualmente no estoy llamando a 'setGoogleLogin()', pero estoy viendo el código de ejemplo que llama '((GoogleHeaders) transport.defaultHeaders) .setGoogleLogin (authToken)', pero eso ni siquiera compilar para mi Estoy usando google-http-client-1.6.0-beta. 'HttpTransport' ya no parece tener el campo' defaultHeaders'. –