android - 在 Android 中使用 play-services-auth 的 token 通过 Google Analytics Data API 进行身份验证

标签 android google-analytics-api google-signin google-api-client android-googleapiclient

我想使用 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/

相关文章:

java - 如何使用 Google Analytics 跟踪 java servlet 请求

java - 使用 Java 在 Google Analytics 上进行分页

ios - UIWebView 的 GoogleSignInSDK 用法

java - 如何在谷歌登录另一个 Activity 后保存谷歌个人资料

android - 单击 Google 登录按钮时应用程序关闭

java - 安装应用程序时的事件 (Android)

android - Espresso 可以在不启动 Activity 的情况下工作吗?

android - 检索 json 数据

android - 无法使用适用于 Android 的 Google Cloud Messaging(不是帮助程序库)接收消息

Angular 2+ 错误 : Cannot find name 'gapi'