使用 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);
如果有帮助,请告诉我。
我想通过 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);
如果有帮助,请告诉我。