我正在开发一个使用Google Calendar API v3和服务帐户模式进行访问的应用程序。我的应用程序似乎能够毫无问题地创建新日历,但是当我要使用Google Calendar标准Web应用程序检查结果时,我什么也看不到。这很奇怪,因为获取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"
}
答案 0 :(得分:0)
使用CalendarList.get()功能在用户的日历列表中确认日历不是hidden=true
。
答案 1 :(得分: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();
此致