3

我正在使用 Google Calendar API v3 和服务帐户模式开发一个应用程序以获得访问权限。我的应用程序似乎能够毫无问题地创建新日历,但是当我要使用 Google 日历标准网络应用程序检查结果时,我什么也看不到。这很奇怪,因为获取 CalendarList 会返回正确的日历列表。有人知道为什么会这样吗?使用服务帐户创建的日历有一些限制吗?

谢谢您的帮助。阿尔贝托

更新 1:

这是我的代码片段

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
        GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
            .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR))
            .setServiceAccountPrivateKeyFromP12File(new File(KEY_P12))
            // .setServiceAccountUser("user@example.com")
            .build();

         Calendar service = new com.google.api.services.calendar.Calendar.Builder(httpTransport, JSON_FACTORY, credential)
            .setApplicationName(APPLICATION_NAME).build();

        com.google.api.services.calendar.model.Calendar content = new com.google.api.services.calendar.model.Calendar();
        content.setSummary("A calendar");
        service.calendars().insert(content).execute();

更新 2:

有人建议我将服务帐户用户添加到凭据中(然后取消注释.setServiceAccountUser("user@example.com")上面的代码,但它不起作用。在这种情况下,我既不能创建日历,也不能在我打电话service.calendars().insert(content).execute();和收到时收到

400 Bad Request
{
  "error" : "access_denied"
}
4

2 回答 2

0

使用CalendarList.get()函数确认日历不在hidden=true用户的日历列表中。

于 2013-09-16T13:41:09.520 回答
0

我认为您的 GoogleCredential 不完整。尝试使用 ClientSecrets 并刷新令牌。

    List<String> scopes = new ArrayList<String>();
    scopes.add("https://www.google.com/m8/feeds/");
    GoogleCredential credential = new  GoogleCredential.Builder()
    .setTransport(new NetHttpTransport())
    .setJsonFactory( new JacksonFactory())
    .setServiceAccountId("id@developer.gserviceaccount.com")
    .setServiceAccountPrivateKeyFromP12File(new File("privatekey.p12"))
    .setClientSecrets("clientID", "clientSecret")
    .setServiceAccountScopes(scopes)
    .build();
    credential.refreshToken();

问候

于 2013-10-13T19:49:26.970 回答