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