Z tym problemem zmagam się już od kilku dni. Próbuję dzwonić do Kalendarza Google za pomocą uwierzytelniania za pomocą Androida AccountManager
. Odzyskać tokenu uwierzytelniania przy użyciu zwykłej metody:Uwierzytelnianie za pomocą interfejsu API Google za pomocą konta AccountManager
AccountManager manager = AccountManager.get(this);
String authToken = manager.getAuthToken(account, AUTH_TOKEN_TYPE, true, null, null).getResult().getString(AccountManager.KEY_AUTHTOKEN);
a następnie, z tego powodu, utworzyć instancję Calendar
tak:
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();
Jednak, kiedy wykonywanie połączeń API za pomocą tego, ja otrzymać błąd 401 Unauthorized
przedstawiony poniżej. Zauważ, że umieściłem kod, aby unieważnić wygasłe tokeny uwierzytelniania, więc nie sądzę, że to jest problem.
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"
}
Jakieś myśli o tym, co robię źle?
Okej, obecnie nie nazywam 'setGoogleLogin()', ale szukam przykładowego kodu, który wywołuje '((GoogleHeaders) transport.defaultHeaders) .setGoogleLogin (authToken)', ale to nawet nie działa skompilować dla mnie. Używam google-http-client-1.6.0-beta. "HttpTransport" nie ma już pola 'defaultHeaders'. –