如何使用服务帐户正确获取用户的日历事件?

我正在尝试为域中的用户检索日历事件。 我有服务帐户访问权限,但是当我尝试获取特定用户事件时,我收到404错误。 inheritance人连接代码:

NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(JSON_FACTORY) .setServiceAccountId(googleApiServiceAccountId) .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR_READONLY)) .setServiceAccountPrivateKey(SecurityUtils.loadPrivateKeyFromKeyStore( SecurityUtils.getPkcs12KeyStore(), getClass().getClassLoader().getResourceAsStream(googleApiPrivateKeyPath), NOTASECRET, PRIVATEKEY, NOTASECRET)) .build(); calendarApi = new Calendar.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName(getApplicactionName()).build(); 

活动列表方法:

 public List getCalendarEventsForUserAndDates(String userEmail, Long dateFrom, Long dateTo) { try { String pageToken = null; List allEvents = Lists.newArrayList(); do { ArrayMap parameters = new ArrayMap(); parameters.add("xoauth_requestor_id", userEmail); Calendar.Events.List list = calendarApiBean.getCalendarApi() .events().list("primary"); list.setTimeMax(new DateTime(dateFrom, 0)) .setTimeMin(new DateTime(dateTo, 0)) .setUnknownKeys(parameters); Events events = list.setPageToken(pageToken) .execute(); List items = events.getItems(); if (items != null) { allEvents.addAll(items); } pageToken = events.getNextPageToken(); } while (pageToken != null); return allEvents; } catch (IOException e) { logger.error("error while retriving calendar events for {} and dates {} {} ", userEmail, dateFrom, dateTo); logger.error("exception", e); return Collections.emptyList(); } } 

当我尝试将xoauth_requestor_id设置为用户的电子邮件并列出“primary”时,我会收到服务帐户的日历事件。 当我将events()。list()参数更改为用户的电子邮件时,我得到以下错误:

 com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found { "code" : 404, "errors" : [ { "domain" : "global", "message" : "Not Found", "reason" : "notFound" } ], "message" : "Not Found" } 

谢谢你的帮助。

为解决此问题,我必须将此服务帐户添加到域管理上的授权API客户端。 客户端名称是服务帐户客户端ID,范围适用于只读日历