这是代码。
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;
}
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);
我已经在https://developers.google.com/identity/protocols/oauth2/service-account
上完成了步骤它创建日历,但总是返回
"allowedConferenceSolutionTypes":["eventHangout"]
不是hangoutsMeet
答案 0 :(得分:0)
由于服务帐户不属于您的域,因此它们无法创建conferenceSolution
为hangoutsMeet
的日历。
我花了一些时间来理解这一点,但是根据Events
resource of the Calendar API的文档,会议解决方案类型如下:
"eventHangout"
:用于针对消费者的环聊(http://hangouts.google.com)
"eventNamedHangout"
:适用于经典环聊 适用于G Suite用户 (http://hangouts.google.com)
"hangoutsMeet"
:用于环聊聚会(http://meet.google.com)
"addOn"
:用于3P会议提供商
并从Google Cloud Service Account documentation:
与用户帐户不同,服务帐户不是您的G Suite域的成员,不是。例如,如果您与G Suite域中的所有成员共享资产,则不会与服务帐户共享资产。同样,由服务帐户创建的任何资产都不能由G Suite管理员拥有或管理。
您遇到的结果是这样的:服务帐户不属于您的域,因此无法为其自己创建日历 会议解决方案类型的hangoutsMeet
值。
如果您希望日历具有这种会议解决方案类型,则必须创建日历,使其由您的G Suite域成员拥有;也就是说,让服务帐户创建一个模拟为G Suite域成员的日历。
您从Try this API
的{{1}}功能中获得正确结果的原因是,API调用已获得您的授权-G Suite域用户。
进行身份验证时,需要在构建之前设置要模拟的用户:
Calendars: insert
或带有pk12文件:
GoogleCredential.Builder b = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jacksonFactory)
.setServiceAccountId(serviceAccountId)
.setServiceAccountPrivateKey(yourPrivateKey)
.setServiceAccountScopes(scopes)
//the user whom you want to impersonate here:
.setServiceAccountUser(email-to-impersonate);
credential = b.build();
return credential;
希望对您有帮助!