【问题标题】:How to use Google analytics authorization without web browser interaction using service accounts?如何在没有使用服务帐户的 Web 浏览器交互的情况下使用 Google 分析授权?
【发布时间】:2015-04-10 16:31:07
【问题描述】:

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

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-analytics authorization


    【解决方案1】:

    这是一个更好的例子,改编自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 Admin UI 上完成,只需进入 Admin、User Management 并添加它,就像添加普通的 gmail 访问一样。

    【讨论】:

    • 谢谢 -- 如果可行,我会尝试并为你命名我的第一个孩子!
    • “setServiceAccountScopes”的参数不是我的例子中的单例——你能告诉我我应该使用什么版本的罐子吗?
    • 我几乎不使用java,所以我什至没有测试过这个。刚刚改编自 Drive 文档。你试过用单例替换它吗?
    • 那么在什么意义上它是一个“更好”的例子?
    【解决方案2】:

    杰夫,

    我正在使用 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( 新的 java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)) .build();

    userEmail - 您的 Google 用户 ID

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多