0

자바 라이브러리 및 서비스 계정을 사용하여 Google 애널리틱스에서 데이터를 가져 오려고합니다. 모든 필수 설정을 완료했습니다. 클라우드 콘솔에서 Analytics API를 활성화하고, 서비스 계정을 생성하고, 개인 키를 얻고, GA 사용자 관리에서 읽기 권한이있는 생성 된 개발자 전자 메일을 추가합니다.Google Analytics 자바 API "401 Unauthorized Login Required"오류

내 로컬 구현으로이 잘 작동합니다. 하지만 서버 측에서 동일한 코드를 실행하려고하면 "401 Unauthorized Login Required"라는 상태가 나타납니다. 두 가지 구현 모두 Java 5 런타임, Google API 서비스 Java libs 버전 1.17.0 rev75를 사용합니다.

자격 증명 정의와 코드 :

HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); 
    JsonFactory JSON_FACTORY = new JacksonFactory();  

    GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(HTTP_TRANSPORT) 
    .setJsonFactory(JSON_FACTORY) 
    .setServiceAccountId("[email protected]") 
    .setServiceAccountScopes(Arrays.asList(AnalyticsScopes.ANALYTICS_READONLY)) 
    .setServiceAccountPrivateKeyFromP12File(new File("privatekey.p12")) 
    .build(); 

는 웹 로그 분석 개체 및 쿼리 빌더 :

Analytics analytics = new Analytics.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) 
.setApplicationName("MyApp") 
.build(); 

Get apiQuery = analytics.data().ga().get("ga:123", "2013-12-09","2013-12-09", "ga:visits"); 
HttpResponse response = apiQuery.executeUnparsed(); 

I`ve 트래픽을 비교 httpLogger을 추가했다. 로컬 및 서버 실행시 인증 흐름이 동일하며 액세스 토큰을 가져 오는 데 문제가 없음을 알았습니다.

CONFIG: -------------- RESPONSE -------------- 
    HTTP/1.1 200 OK 
    Alternate-Protocol: 443:quic 
    ETag: "xxxx" 
    Date: Mon, 30 Dec 2013 13:12:32 GMT 
    Content-Type: application/json; charset=UTF-8 
    X-Content-Type-Options: nosniff 
    Cache-Control: private, max-age=0, must-revalidate, no-transform 
    Content-Length: 1728 
    Content-Encoding: gzip 
    X-XSS-Protection: 1; mode=block 
    Expires: Mon, 30 Dec 2013 13:12:32 GMT 
    X-Frame-Options: SAMEORIGIN 
    Server: GSE 
{JSON BODY} 

그러나 상태 (401)와 서버 실행 I`ve 받았다 응답

가 :
CONFIG: -------------- RESPONSE -------------- 
401 Unauthorized 
date: Mon, 30 Dec 2013 13:17:32 GMT 
alternate-protocol: 443:quic 
server: GSE 
www-authenticate: Bearer realm="https://www.google.com/accounts/AuthSubRequest" 
transfer-encoding: chunked 
expires: Mon, 30 Dec 2013 13:17:32 GMT 
x-xss-protection: 1; mode=block 
x-content-type-options: nosniff 
x-frame-options: SAMEORIGIN 
content-type: application/json; charset=UTF-8 
cache-control: private, max-age=0 
    {"error":{"errors":[{"domain":"global","reason":"required","message":"Login Required","locationType":"header","location":"Authorization"}],"code":401,"message":"Login Required"}} 

아무도 나를 도울 수

지역 실행으로

는 I`ve 상태 (200)로 응답을받은? 나는 내가 아는 모든 것을 실제로 확인했지만 운은 없다.

수정 서비스 계정에 대한 도메인 전체 권한의 위임이 Google Analytics API와 관련이있는 사람은 누구입니까?

감사합니다. Sergey.

+0

자격 증명 개체를 만드는 코드를 볼 수 있습니다. 코드를 공유하여 해당 개체를 사용하여 API 요청을 만들 수 있습니까? – aeijdenberg

+0

안녕하세요 @aeijdenberg! 귀하의 답변에 감사드립니다. 애널리틱스 개체와 쿼리 코드를 메인 포스트에 추가했습니다. 감사. –

답변

0

전송을 ApacheHttpTransport 클래스로 변경하여 문제가 해결되었습니다.

하지만 NetHttpTransport의 문제점을 파악하는 것이 유용 할 것입니다.

감사합니다. Sergey.