Google OAuth2 - Calendar API v3 - Java

时间:2014-11-30 14:29:57

标签: java google-calendar-api google-oauth

我需要一些帮助,我有一个在GAE上运行的应用程序,它从互联网页面读取一些信息并作为事件放在我的日历中。

谷歌将API更改为v3后,我无法使用自己的Gmail进行连接。 在此之前,我使用CalendarService传递凭据(电子邮件和应用程序密码)。

现在我需要使用从OAuth2创建的另一封电子邮件,但在创建活动时,此活动已创建为此新电子邮件的“主要”日历。

如何使用我自己的电子邮件进行连接,并将这些事件放在正确的日历中,而不是主要日历?

感谢您的帮助和时间。 塞尔索


修改

我试图阅读日历列表,但它是空的。我认为这是因为我使用OAuth2连接的电子邮件,但我不确定。

请看一下。

你的时间。

protected Calendar getCalendarService() throws GeneralSecurityException, IOException {

    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance();

    Credential credential = new GoogleCredential.Builder()
        .setTransport(httpTransport)
        .setJsonFactory(jsonFactory)
        .setServiceAccountId("xxxxxxxx@developer.gserviceaccount.com")
        .setServiceAccountPrivateKeyFromP12File(new File("cert.p12"))
        .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR))
        .build();

    return new Calendar.Builder(httpTransport, jsonFactory, credential).setApplicationName("appname").build();
}

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); Credential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(jsonFactory) .setServiceAccountId("xxxxxxxx@developer.gserviceaccount.com") .setServiceAccountPrivateKeyFromP12File(new File("cert.p12")) .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR)) .build(); return new Calendar.Builder(httpTransport, jsonFactory, credential).setApplicationName("appname").build(); }

2 个答案:

答案 0 :(得分:0)

插入活动时,如果您通过了'' primary'在事件中:插入,

事件createdEvent = service.events()。insert(' primary',event).execute();

然后将事件插入主日历。

如果您要创建不属于主要活动的活动,请创建辅助日历。这是link。您可以从CalendarList: list获取日历列表,您可以在其中查看主日历和辅助日历的日历ID。然后,在插入事件时,传递辅助日历ID而不是事件中的' primary'插入。如果您有任何问题,请告诉我。

答案 1 :(得分:0)

经过更长时间的搜索后,我找到了一个可能的解决方案,我将其描述如下:

  1. 与服务电子邮件的写入权限共享日历(xxxxxxxx@developer.gserviceaccount.com)
  2. 保留我的代码并获取特定的日历ID
  3. Ran Calendar.events()。insert(“calendarid”,event).execute()
  4. 我解决了我的问题。感谢。