无法使用Java创建带有日历API的hangoutsMeet
这是代码无法使用Java创建带有日历API的hangoutsMeet,java,google-calendar-api,google-contacts-api,Java,Google Calendar Api,Google Contacts Api,这是代码 private static Credential authorize() throws Exception { HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); InputStream in = ModuloCalendar.class
private static Credential authorize() throws Exception {
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
InputStream in = ModuloCalendar.class.getResourceAsStream("quickstart-1585944958709-f0acf97c5fa8.json");
Collection<String> scopes = CalendarScopes.all();
GoogleCredential credential = GoogleCredential.fromStream(in).createScopes(scopes);
return credential;
}
我已经做了步骤
它创建日历,但总是返回
AllowedConferenceSolutionType:[eventHangout]
非宿醉满足回答:
由于服务帐户不属于您的域,因此他们无法使用hangoutsMeet的conferenceSolution创建自己的日历
更多信息:
我花了一点时间才理解这一点,但根据会议的文档,会议解决方案类型如下:
eventHangout:为消费者提供娱乐场所
eventNamedHangout:用于G套件用户的经典聚会
宿营地聚会:宿营地聚会
插件:适用于3P会议提供商
从以下方面:
与用户帐户不同,服务帐户不是您的G套件域的成员。例如,如果您与G套件域中的所有成员共享资产,则这些资产将不会与服务帐户共享。同样,由服务帐户创建的任何资产都不能由G套件管理员拥有或管理
您所经历的是这样的结果:服务帐户不属于您的域,因此无法为其自身创建具有会议解决方案类型的hangoutsMeet值的日历
如果您希望日历具有此会议解决方案类型,则必须创建日历,使其归您的G套件域的成员所有;也就是说,让服务帐户创建一个日历,模拟为您的G套件域的成员
从Calendars:insert的Try this API功能中获得正确结果的原因是,API调用被授权为您-G Suite域用户
正在生成服务帐户凭据:
进行身份验证时,您需要在生成之前设置要模拟的用户:
GoogleCredential.Builder b=新的GoogleCredential.Builder
.setTransporthttpTransport
.setJsonFactoryjacksonFactory
.SetServiceAccountedServiceAccountId
.SetServiceAccountPrivateKey您的PrivateKey
.SetServiceAccountScopes作用域
//要在此处模拟的用户:
.setServiceAccountUseremail进行模拟;
凭证=b.build;
返回凭证;
或使用pk12文件:
GoogleCredential.Builder b=新的GoogleCredential.Builder
.setTransporthttpTransport
.setJsonFactoryjsonFactory
.SetServiceAccountedServiceAccountId
.SetServiceAccountPrivateKeyfromP12文件12
.SetServiceAccountScopes作用域
//要在此处模拟的用户:
.setServiceAccountUseremail进行模拟;
凭证=b.build;
返回凭证;
我希望这对你有帮助
参考资料:
您提供的链接中的哪些步骤是您在谈论的?它似乎与您的代码完全无关。嗨。创建一个服务帐户,并将整个域的权限委托给服务帐户。这是使用客户端API之前所必需的。凭证凭证=moduleCalendarSalud.authorize;client=new com.google.api.services.calendar.calendar.Builder httpTransport,JSON_工厂,credential.setApplicationNameAPPLICATION_NAME.build;我可以问一下吗;你想在这里完成什么?如果您想作为域上的另一个用户执行任务,您需要将域范围的权限委托给服务帐户的唯一原因是它。如果没有你想做什么的全貌,我无法理解你的处境。是的,没错。Rafa我想使用Calendar API创建Calendar的事件,并使用my domain创建一个会议hangoutMeet。我可以创建一个日历事件,但使用的是hangout,而不是meet。日历:insert不会创建一个事件,它会创建一个完整的日历。你确定这就是你需要做的吗?看看和之间的区别。是的,吉勒莫。谢谢但是,我如何才能创建日历,使其归您的G套件域的成员所有?如果您的凭证使用的是p12文件,而不是JSON文件,那么就更容易了。我已经更新了我的代码,向您展示了如何做到这一点。
Calendar entry = new Calendar();
entry.setSummary(descripcion);
ConferenceProperties conferenceProperties=new ConferenceProperties();
List<String> allowedConferenceSolutionTypes = new ArrayList<String>();
allowedConferenceSolutionTypes.add("hangoutsMeet");
conferenceProperties.setAllowedConferenceSolutionTypes(allowedConferenceSolutionTypes);
entry.setConferenceProperties(conferenceProperties);
View.display(entry);
Calendar result = client.calendars().insert(entry).execute();
View.display(result);