正在从后端在特定日历上创建Google日历活动。就像有人在Web应用程序中召开会议一样,应将其从后端添加到共享的Google日历中(使用JAVA运行-春季启动)。
正在生成事件的用户必须是授权用户。
我已按照此文档进行了Java的初始设置。
我使用的依赖关系,
compile 'com.google.api-client:google-api-client:1.23.0'
compile 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
compile 'com.google.apis:google-api-services-calendar:v3-rev305-1.23.0'
然后创建一个事件,我已经尝试过了,
public String createCalendarEvent() throws GeneralSecurityException, IOException {
String calendarId = "primary";
// Build a new authorized API client service.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Calendar service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
Event event = new Event()
.setSummary("Testing Event Creation 1")
.setLocation("India")
.setDescription("Testing Event Creation");
EventDateTime start = new EventDateTime()
.setDate(new DateTime("2019-02-26"));
event.setStart(start);
EventDateTime end = new EventDateTime()
.setDate(new DateTime("2019-02-28"));
event.setEnd(end);
event = service.events().insert(calendarId, event).execute();
log.debug("Event is created and HTML link is: " + event.getHtmlLink());
return event.getHtmlLink();
}
getCredential()
方法正在处理授权,如下所示:
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Load client secrets.
InputStream in = CalendarEventService.class.getClassLoader().getResourceAsStream(CREDENTIALS_FILE_PATH);
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new File(TOKENS_DIRECTORY_PATH)))
.setAccessType("offline")
.setApprovalPrompt("force")
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
return credential;
}
所需的OAuth ClientID和ClientSecret位于CREDENTIALS_FILE_PATH
。运行时,它将在TOKENS_DIRECTORY_PATH
内生成AUTH_TOKEN并在Calendar中创建一个事件。
现在,如果用户更改,后续执行将毫无问题地执行。
我需要由当前登录的用户(应检查OAuth)并从后端as this one在日历中创建事件。
答案 0 :(得分:0)
服务器到服务器之间的通信未经同意
您需要了解,私人用户数据将始终需要您具有访问权限。未经该用户许可,您无法访问用户帐户。作为开发人员,Oauth2为我们提供了一种请求用户同意以访问其数据的方法。没有办法解决,您将始终必须获得用户的许可才能访问其数据。
现在,如果您拥有gsuite帐户,则可以使用服务帐户并设置域范围内的委派,以允许该服务帐户访问域中的所有用户,那么它将能够代表用户执行操作而无需必须提示任何人。
如果您仅访问自己控制的单个帐户,则还可以使用服务帐户并与该服务帐户共享日历,然后该服务帐户将有权访问该帐户并可以执行操作在它上面。
凭据存储
new FileDataStoreFactory(new File(TOKENS_DIRECTORY_PATH)
表示凭证的存储位置"user"
是一个字符串,表示要为其存储凭证的用户。