我得到一个禁止(403)时,试图添加一个事件到我的日历(API v3 &OAuth2),如下:
var service = CalendarService();
CalendarListResource.ListRequest request = service.CalendarList.List();
IList<CalendarListEntry> calendarList = request.Execute().Items;
foreach (CalendarListEntry entry in calendarList)
{
Console.WriteLine(
"Summary:{0}nLocation:{1}nTimeZone:{2}",
entry.Summary, entry.Location, entry.TimeZone
);
}
var startDate = DateTime.Now.AddDays(1);
var endDate = startDate.AddDays(1);
var eventBody = new Google.Apis.Calendar.v3.Data.Event
{
Description = "Test 4 description",
Summary = "Test 4 summary",
Start = new EventDateTime
{
DateTime = startDate
},
End = new EventDateTime
{
DateTime = endDate
}
};
var insertRequest = service.Events.Insert(calendarId: calendarId_emailAddress, body: eventBody); //InsertRequest
insertRequest.Execute();
我已经设置了oauth2服务帐户,授予范围,并共享日历。然而,我在日历共享部分注意到的是,我无法(没有可用的选项)共享读/写。唯一的选项是"freeBusyRead"。
编辑:让我添加calendarId_emailAddress = "my_email_address"。我可以添加一个事件。没有错误。然后迭代找到它。但我的日程表上没有。我似乎没有在我的用户面板中建立日历和"实际日历"之间的连接。
怎么做呢?感谢任何帮助。谢谢。
您的Google Apps域可能将外部帐户的共享级别限制为免费/繁忙级别。服务帐户,即使是由域用户创建的,也始终被认为是域的外部帐户。
正确的方法是授权服务帐户代表您的域用户进行操作,然后作为服务帐户进行身份验证并代表用户进行操作,将事件添加到用户日历中。在Drive API文档中讨论了域范围内的授权,但也可以很容易地应用于Calendar API。
问题出在服务的认证上。场景…
1) ServiceAccountCredential没有用户集,而calendarId = "primary"产生一个进入日历的条目。日历?谁知道呢。我无法在我的界面中看到该用户的条目,但我确实在Events.List("primary")
中找到了该条目。2) ServiceAccountCredential,用户设置为目标日历的email,并且calendarId = "primary"产生一个日历条目,我确实在该用户的界面中看到该条目,并且还在Events.List("primary")中找到该条目
情景1真的让我很困惑。不知道如何在日历中看到那个事件。对此的任何见解都会有所帮助。谢谢!