无法使用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);