1

我正在尝试使用Google.Apis.Analytics.v3客户端库来检索指标,并且我想使用Service Account

根据 StackOverflow 上的文档和几个问题,我认为这应该可行。过去我已经针对 Google BigQuery 和 Google Cloud Storage API 使用过服务帐户,所以我认为我可以让它很容易地工作。

不幸的是,每次我对 Google Analytics 执行操作时,都会收到以下错误:

TokenResponseException: 附加信息:错误:“invalid_grant”,描述:“”,Uri:“”

为了记录,这里我做了什么:

  • 在 Google Developer Console 中创建了一个全新的项目。
  • 启用谷歌分析 API。
  • 创建一个“服务帐户”客户端 ID。
  • 记下证书及其密码的“客户 ID”。
  • 将服务帐户“电子邮件地址”添加为对 Google Analytics 帐户具有完全权限的用户。

这是我用来连接到 Google Analytics 的代码:

private static AnalyticsService ConnectServiceAccount()
{
    const string serviceAccountId = "xxxxxxxxxx-xxxxxxxxxxxx.apps.googleusercontent.com";
    const string serviceAccountCertificate = "xxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12";
    const string applicationName = "";

    var certificate = GetServiceAccountCertificate(serviceAccountCertificate);
    var credentials = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountId)
    {
        Scopes = new[] {
            AnalyticsService.Scope.Analytics,
            AnalyticsService.Scope.AnalyticsEdit,
            AnalyticsService.Scope.AnalyticsManageUsers,
            AnalyticsService.Scope.AnalyticsProvision,
            AnalyticsService.Scope.AnalyticsReadonly
        },
    }.FromCertificate(certificate)
        );

    var service =
        new AnalyticsService(
            new BaseClientService.Initializer
            {
                GZipEnabled = true,
                HttpClientInitializer = credentials,
            });
    return service;
}

有人可以帮我解决这个问题吗?

4

2 回答 2

1

你可以在这里找到解决方案

服务帐户是一个电子邮件地址,例如@developer.gserviceaccount.com

于 2014-07-13T15:02:23.340 回答
0

看起来你用错了serviceAccountID。它应该是一个结尾@developer.gserviceaccount.com

而且,您只需要Read and Analyze在您的分析帐户中授予该电子邮件权限而不是完全控制权。

我还认为它需要一个applicationName. 这是 GA 控制台中的应用名称。

于 2014-07-13T01:56:57.570 回答