저는 며칠 동안이 문제로 어려움을 겪었습니다. Android의 AccountManager
을 통한 인증을 사용하여 Google 캘린더에 전화를 걸려고합니다. 그 토큰으로,이 같은 Calendar
인스턴스를 만든 다음AccountManager를 사용하여 Google API로 인증
AccountManager manager = AccountManager.get(this);
String authToken = manager.getAuthToken(account, AUTH_TOKEN_TYPE, true, null, null).getResult().getString(AccountManager.KEY_AUTHTOKEN);
그리고 : 나는 일반적인 방법을 사용하여 인증 토큰을 검색
그러나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();
, 내가 이것을 사용하여 API 호출을, I 아래 표시된 401 Unauthorized
오류가 발생합니다. 만료 된 인증 토큰을 무효화하는 코드가 포함되어 있으므로 여기에 문제가 있다고 생각하지 않습니다.
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"
}
내가 잘못하고있는 것에 대한 의견이 있으십니까?
좋아요, 저는 현재 setGoogleLogin()을 호출하지 않고'((GoogleHeaders) transport.defaultHeaders) .setGoogleLogin (authToken)'을 호출하는 샘플 코드를보고 있지만, 나를 위해 컴파일해라. 나는 google-http-client-1.6.0-beta를 사용하고있다. 'HttpTransport'는'defaultHeaders' 필드를 더 이상 가지고 있지 않습니다. –