Autenticação com a API do Google usando o AccountManager
Estou lutando com isso há alguns dias. Estou tentando fazer chamadas para o Google Agenda usando autenticação viaAccountManager
. Recupero um token de autenticação usando o método usual:
AccountManager manager = AccountManager.get(this);
String authToken = manager.getAuthToken(account, AUTH_TOKEN_TYPE, true, null, null).getResult().getString(AccountManager.KEY_AUTHTOKEN);
E então, com esse token, crio umCalendar
instância como esta:
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();
No entanto, quando faço chamadas de API usando isso, recebo o401 Unauthorized
erro visto abaixo. Observe que eu incluí o código para invalidar os tokens de autenticação expirados; portanto, não acredito que esse seja o 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"
}
Quaisquer pensamentos sobre o que eu posso estar fazendo de errado?