0

Java ライブラリとサービス アカウントを使用して GA からデータを取得しようとしています。必要なすべての設定を行いました。Cloud コンソールで Analytics API をアクティブ化し、サービス アカウントを生成し、秘密鍵を取得し、GA ユーザー管理で読み取り権限を持つ生成された開発者の電子メールを追加します。

私のローカル実装では、これはうまくいきます。しかし、サーバー側から同じコードを実行しようとすると、「401 Unauthorized Login Required」というステータスが表示されます。どちらの実装も、Java 5 ランタイム、Google API サービス Java ライブラリ バージョン 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("xxx@developer.gserviceaccount.com")
    .setServiceAccountScopes(Arrays.asList(AnalyticsScopes.ANALYTICS_READONLY))
    .setServiceAccountPrivateKeyFromP12File(new File("privatekey.p12"))
    .build();

Analytics オブジェクトとクエリ ビルダー:

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();

トラフィックを比較するために httpLogger を追加しました。ローカルとサーバーの実行の場合、承認フローは同じであり、アクセストークンの取得に問題はありません。

ローカルで実行すると、ステータス 200 の応答を受け取りました。

    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 の応答を受け取りました。

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"}}

誰でも私を助けることができますか?私が知っていることはすべて本当にチェックしましたが、運がありません。

編集 ドメイン全体の権限のサービス アカウントへの委任が Google アナリティクス API に関連しているかどうかは誰にもわかりませんか?

よろしく、セルゲイ。

4

1 に答える 1