如何在没有使用服务帐户的Web浏览器交互的情况下使用Google分析授权?

时间:2014-05-05 08:28:21

标签: google-analytics authorization

我正在尝试访问Google Analytics数据,而无需用户与浏览器进行交互以授权此访问权限 - 在这种情况下,我们希望在Google Analytics之外显示我们自己的数据。

Google在此处描述了服务帐户:https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtAuthorization

我认为根据描述,这就是我要找的东西。有必要按照以下步骤获取使用的内容:

 GoogleCredential credential = new  
                      GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                .setJsonFactory(JSON_FACTORY)
                .setServiceAccountId("758873802454-   s8o6hgkjjn8rm15so46pvrqu1lgn4squ@developer.gserviceaccount.com")
                .setServiceAccountScopes(Collections.singleton(AnalyticsScopes.ANALYTICS_READONLY))
                .setServiceAccountPrivateKeyFromP12File(new File("C:\\Users\\jeff.miller\\Downloads\\67ed856e6b6b55e846f53e78e76b28141c98eeff-privatekey.p12"))
                .setServiceAccountUser("758873802454-s8o6hgkjjn8rm15so46pvrqu1lgn4squ.apps.googleusercontent.com")
                 //.setService("AIzaSyCM1FlW4fs38NPSOesXULeSnBlpYd783Xk")
                .build();

下载了p12文件,我们还获得了一个新的服务帐户,其中包含客户端ID和电子邮件地址,我认为我在上面的构造函数代码中的正确位置。此外,还需要从Google控制台进行配置。我收到了各种错误消息,最近:“模仿电子邮件地址无效”,但我也得到了 无论我尝试什么,都表明该帐户没有权限的消息。

代码基于过时的示例 - 例如,在示例中,setServiceAccountScopes采用字符串而不是单例。

很高兴找到一个最新的Java示例,其中包括有关控制台配置的提示,这使我能够在没有浏览器交互的情况下访问Google Analytics。

感谢。

2 个答案:

答案 0 :(得分:0)

这是一个更好的例子,改编自Google Drive documentation

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.analytics.Analytics
import com.google.api.services.analytics.AnalyticsScopes;
...

/** Email of the Service Account */
private static final String SERVICE_ACCOUNT_EMAIL = "<some-id>@developer.gserviceaccount.com";

/** Path to the Service Account's Private Key file */
private static final String SERVICE_ACCOUNT_PKCS12_FILE_PATH = "/path/to/<public_key_fingerprint>-privatekey.p12";

/**
 * Build and returns an Analytics service object authorized with the service accounts.
 *
 * @return Analytics service object that is ready to make requests.
 */
public static Analytics getAnalyticsService() throws GeneralSecurityException,
    IOException, URISyntaxException {
  HttpTransport httpTransport = new NetHttpTransport();
  JacksonFactory jsonFactory = new JacksonFactory();
  GoogleCredential credential = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(jsonFactory)
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
      .setServiceAccountScopes(AnalyticsScopes.ANALYTICS_READONLY)
      .setServiceAccountPrivateKeyFromP12File(
          new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
      .build();
  Analytics service = new Analytics.Builder(httpTransport, jsonFactory, null)
      .setHttpRequestInitializer(credential).build();
  return service;
}

您还必须授予用户访问您的Google Analytics帐户的电子邮件SERVICE_ACCOUNT_EMAIL的权限。这必须在Analytics管理界面上完成,只需进入管理员,用户管理并添加,就像添加普通的Gmail访问一样。

答案 1 :(得分:0)

杰夫,

我正在使用Google Drive Api,它使用相同的GoogleCredential。

在初始化过程中,您将帐户用户设置为758873802454-s8o6hgkjjn8rm15so46pvrqu1lgn4squ.apps.googleusercontent.com,应将其更改为您创建项目的Google电子邮件

GoogleCredential凭证=新的GoogleCredential.Builder()                 .setTransport(httpTransport)                 .setJsonFactory(jsonFactory)                 .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)                 .setServiceAccountScopes(Arrays.asList(DriveScopes.DRIVE))                 .setServiceAccountUser(的 USEREMAIL )                 .setServiceAccountPrivateKeyFromP12File(                         new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))                 .build();

userEmail - 您的Google用户ID