如何使用谷歌分析授权没有web浏览器交互使用服务帐户



我正在尝试访问谷歌分析数据,而不需要用户与浏览器交互来授权此访问-在这种情况下,我们希望在谷歌分析之外显示我们自己的数据。

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控制台进行配置。我已经得到了各种错误信息,最近:"无效的假冒prn电子邮件地址",但我也得到了提示无论我如何尝试,该帐户都没有权限。

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

如果能找到一个最新的Java示例,包括关于控制台配置的提示,那就太好了,这使我能够在没有浏览器交互的情况下访问Google Analytics。

谢谢。

这里有一个更好的例子,改编自Google Drive文档。

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;
}

您还必须授予用户访问电子邮件SERVICE_ACCOUNT_EMAIL到您的谷歌分析帐户。这必须在Analytics Admin UI上完成,只需进入Admin,用户管理并添加它,就像添加正常的gmail访问一样。

Jeff,

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

在初始化中,您将帐户用户设置为758873802454-s8o6hgkjjn8rm15so46pvrqu1lgn4squ.apps.googleusercontent.com,它应该更改为您的谷歌电子邮件,与您创建的项目

GoogleCredential = new GoogleCredential. builder ().setTransport (httpTransport).setJsonFactory (jsonFactory).setServiceAccountId (SERVICE_ACCOUNT_EMAIL).setServiceAccountScopes (arrays . aslist (DriveScopes.DRIVE)).setServiceAccountUser ( userEmail ).setServiceAccountPrivateKeyFromP12File (新java.io.File (SERVICE_ACCOUNT_PKCS12_FILE_PATH))

.build ();

userEmail -你的google用户id

最新更新