我正在尝试访问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。
感谢。
答案 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