连接谷歌日历服务java

问题描述:

我想使用谷歌日历API在java中创建应用程序,但我尝试连接到API服务,但它是错误的。 这里是我的代码(与Eclipse)连接谷歌日历服务java

GoogleCredential credential = new GoogleCredential.Builder().setTransport(GoogleNetHttpTransport.newTrustedTransport()) 

       .setServiceAccountId("*****************") 
    // .setServiceAccountUser("my e-mail adress") 
       .setClientSecrets("","********") 
     // .setServiceAccountScopes(CalendarScopes.CALENDAR) 
       .setJsonFactory(new GsonFactory()) 

       .build(); 
      Calendar client = new com.google.api.services.calendar.Calendar.Builder(
        GoogleNetHttpTransport.newTrustedTransport(), new GsonFactory(), credential).build(); 

的错误是:

Exception in thread "main" java.lang.IllegalArgumentException 
    at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:111) 
    at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:37) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.<init>(GoogleCredential.java:323) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder.build(GoogleCredential.java:539) 
    at google_calendar.add_evenement.main(add_evenement.java:21) 
+0

根据你的错误信息没有与验证的问题,你能提供的输出与改变认证?您可以使用:GoogleCredential凭证= new GoogleCredential.Builder()。setTransport(GoogleNetHttpTransport.newTrustedTransport())。setServiceAccountId(“*****************”)。setClientSecrets (“”,“********”)。setJsonFactory(new GsonFactory())。setAccessType(“offline”)。build();' –

+0

谢谢,但我有同样的错误 –

+0

这似乎很奇怪对我来说,你正在设置一个服务帐户ID和一个客户端机密 - 通常你*要么*使用服务帐户的详细信息*或*你使用客户端ID /秘密。同样,您设置服务帐户标识很奇怪,但在服务帐户机密方面没有别的。 –

如果您还没有这样做,检查Using OAuth 2.0 for Server to Server Applications

正如所讨论的,如果你已经委派域范围内的访问服务帐户,你要模拟用户帐户,该帐户GoogleCredential工厂setServiceAccountUser方法指定的用户帐户的电子邮件地址。例如:

GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(httpTransport) 
    .setJsonFactory(JSON_FACTORY) 
    .setServiceAccountId(emailAddress) 
    .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12")) 
    .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN)) 
    .setServiceAccountUser("[email protected]") 
    .build(); 

然后,calling Google APIs使用Java:

使用GoogleCredential对象通过完成以下步骤来调用谷歌的API:

  1. 创建的API服务对象你想使用GoogleCredential对象进行呼叫。例如:
SQLAdmin sqladmin = 
    new SQLAdmin.Builder(httpTransport, JSON_FACTORY, credential).build(); 
  1. 请使用interface provided by the service object请求到API服务。例如,要列出云SQL数据库的实例在兴奋的 - 例如-123项目:
开始=>
SQLAdmin.Instances.List instances = 
    sqladmin.instances().list("exciting-example-123").execute(); 
+0

感谢您的帮助, 我用你的说明和错误是: 异常在线程“main”com.google.api.client.auth.oauth2.TokenResponseException:401 Unauthorized .... –

+0

您可能想要检查您使用的访问令牌是已过期还是无效。请参阅建议的操作[此处](https://developers.google.com/google-apps/calendar/v3/errors#401_invalid_credentials)。 – Teyam

+0

我试过解决方案,但同样的错误 –