我想使用 Java 客户端 API 调用 Google Analytics Data API 和 Google Analytics Management API。 在示例中,他们使用在 json 文件中配置的服务帐户。
由于我还集成了其他 Google API,因此我使用 Google Play Services Auth 进行身份验证(使用 OAuth 2),因此我已经有了一个我想要使用的访问 token 。但我不知道如何将其传递给 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(缺少必需的属性:defaultCallContext)结束。
有没有办法获取默认客户端上下文,然后覆盖凭据,或者是否有其他方法来传递我自己的 OAuth 凭据?
顺便说一下,分析数据和管理 API 的行为是相同的。所以我想同样的解决方案可以解决这两个问题。
最佳答案
奥林,
BetaAnalyticsDataClient reference documentation包含以下代码 fragment ,显示如何覆盖凭据:
BetaAnalyticsDataSettings betaAnalyticsDataSettings =
BetaAnalyticsDataSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
.build();
BetaAnalyticsDataClient betaAnalyticsDataClient =
BetaAnalyticsDataClient.create(betaAnalyticsDataSettings);
请告诉我这是否有帮助。
关于android - 在 Android 中使用 play-services-auth 的 token 通过 Google Analytics Data API 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68351148/