使用 play-services-auth 令牌对 Android 中的 Google 分析数据 API 进行身份验证

Using token of play-services-auth to authenticate with Google Analytics Data API in Android

我想通过 Java 客户 API 调用 Google 分析数据 API 和 Google 分析管理 API。 在示例中,他们使用在 json 文件中配置的服务帐户。

因为我也在集成其他 Google API,所以我使用 Google Play Services Auth 进行身份验证(使用 OAuth 2),因此我已经有了访问令牌,我想使用。但我不知道如何将其传递给 Google Analytics 客户端。

我已经试过了:

GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(mContext);
String tokenString = GoogleAuthUtil.getToken(mContext, 
                                            account.getAccount(),
                                            "oauth2:https://www.googleapis.com/auth/analytics.readonly");
AccessToken token = new AccessToken(tokenString,
                                    // Set expiration time in one hour, 
                                    // as credentials are created every time
                                    // this method is called.
                                    new Date(System.currentTimeMillis() + 60 * 60 * 1000)));
Credentials credentials = OAuth2Credentials.newBuilder().setAccessToken(token).build();
ClientContext clientContext = ClientContext.newBuilder().setCredentials(credentials).build();
BetaAnalyticsDataClient client = BetaAnalyticsDataClient.create(BetaAnalyticsDataSettings.newBuilder(clientContext).build());

问题是客户端上下文似乎没有默认值,所以我需要向它提供我不知道的所有信息(并且不想那样做,因为有默认值使用的值,当我不放置自己的客户端上下文时。所以我也想使用相同的默认值)。所以这以 IllegalStateException (Missing required properties: defaultCallContext).

结尾

有没有办法获取默认客户端上下文,然后只覆盖凭据,或者有任何其他方式来传递我自己的 OAuth 凭据吗?

顺便说一句,分析数据和管理的行为相同 API。所以我想同样的解决方案将解决这两个问题。

奥尔林,

BetaAnalyticsDataClient reference documentation 包含以下显示如何覆盖凭据的代码段:

 BetaAnalyticsDataSettings betaAnalyticsDataSettings =
     BetaAnalyticsDataSettings.newBuilder()
         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
         .build();
 BetaAnalyticsDataClient betaAnalyticsDataClient =
     BetaAnalyticsDataClient.create(betaAnalyticsDataSettings);

如果有帮助,请告诉我。