GA4 移行対応 Javaで認証用のJSONを文字列で渡す方法

こんにちは、エキサイト株式会社メディア事業部所属のエンジニア岩藤です。

私は現在、JavaでGoogleAnalytics4(以下GA4)へ移行をおこなっています。

今回はJavaクライアントを使ってのGA4ランキング取得で、 認証用のJSON(Credentials JSON)を環境変数ではなく、文字列で渡す方法を紹介します。

JavaのGA4クライアントについて

切り替えは下記を元に行いました。 developers.google.com github.com

上記のページでは、認証用のJSONを下記の環境変数でファイルパスを指定する事が前提として書かれています。

ここにファイルのパスを入れると勝手に見てくれるようになっています。 ↓

GOOGLE_APPLICATION_CREDENTIALS

動作確認環境

Java

openjdk 17.0.2 2022-01-18
OpenJDK Runtime Environment Temurin-17.0.2+8 (build 17.0.2+8)
OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (build 17.0.2+8, mixed mode)

Gradle

------------------------------------------------------------
Gradle 7.4.1
------------------------------------------------------------

Build time:   2022-03-09 15:04:47 UTC
Revision:     36dc52588e09b4b72f2010bc07599e0ee0434e2e

Kotlin:       1.5.31
Groovy:       3.0.9
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          17.0.2 (Eclipse Adoptium 17.0.2+8)
OS:           Mac OS X 12.6.3 aarch64

SpringBoot

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.6)

今回やりたかった事

しかし、私の場合は認証用のJSONAWSのパラメータストアで管理していて、そこからJSONを文字列として取得していました。 つまりファイルパスではなく、文字列で渡す必要がありました。

対応方法

BetaAnalyticsDataClientのcreateメソッドに、BetaAnalyticsDataSettingsを渡すようにしました。

String credentialsJson = "{…}";
InputStream credentialsJson = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
GoogleCredentials googleCredentials = GoogleCredentials.fromStream(credentialsJson);

BetaAnalyticsDataSettings settings = BetaAnalyticsDataSettings.newBuilder()
    .setTransportChannelProvider(
        BetaAnalyticsDataSettings.defaultHttpJsonTransportProviderBuilder().build()
    )
    .setCredentialsProvider(FixedCredentialsProvider.create(googleCredentials))
    .build();

BetaAnalyticsDataClient client = BetaAnalyticsDataClient.create(settings);

上記の変更により、認証JSONを文字列で渡す事ができ、GA4からレポートが無事取得できました!

GA4では下記のブログも公開しています。併せてご参考ください。 tech.excite.co.jp