【发布时间】:2017-10-16 16:15:02
【问题描述】:
我正在通过服务帐户使用 Google Calendar API。想法是我们希望将它纯粹用作 API 后端,因此我们不必自己编写代码。这意味着我们确实不希望它干扰(或至少使其可选!)与人们的真实日历。
如果我发这样的帖子:
var resultingex = service.Calendars.Insert(new Calendar()
{
Summary = "Nice new calendar",
}).Execute();
var eventIsNice = service.Events.Import(new Event()
{
Summary = "I'm a nice event",
Location = "Copenhagen, Denmark",
Start = new EventDateTime() { DateTime = DateTime.Now.AddMinutes(15) },
End = new EventDateTime() { DateTime = DateTime.Now.AddMinutes(45) },
Attendees = new List<EventAttendee>() { new EventAttendee() { Email = "lars@asano.dk" } },
}, resultingex.Id).Execute();
它将添加到我的 Google 日历中。这意味着我不能将它纯粹用作后端,因为它调用了我的真实日历。
所以我的问题是:如何添加仅存在于我的应用程序上下文中的事件?
这是我使用服务进行身份验证的方式:
var credPath = "client_secret.json";
var json = File.ReadAllText(credPath);
var cr = JsonConvert.DeserializeObject<PersonalServiceAccountCred>(json); // "personal" service account credential
// Create an explicit ServiceAccountCredential credential
var xCred = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(cr.client_email)
{
Scopes = new[] {
CalendarService.Scope.Calendar,
CalendarService.Scope.CalendarReadonly,
}
}.FromPrivateKey(cr.private_key));
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = xCred,
ApplicationName = ApplicationName,
});
【问题讨论】:
-
听起来您可能应该为您的应用程序创建一个单独的日历(不是用户,只是一个额外的日历)。
-
@JonSkeet 您是否建议为我系统中的每个用户创建一个额外的日历(作为辅助日历),或者只是添加 很多 事件(为我的所有用户) 到我的主日历中?
-
这真的取决于您的应用程序的需求。如果它们在逻辑上是单独的日历,请创建单独的日历。如果它们在逻辑上是一个(例如,所有用户看到相同的一组事件),那么只需创建一个与您的 GCP 项目相关联的事件。
-
@JonSkeet 明白了,有道理。非常感谢 - 非常感谢。解决了我的问题并且有意义。然后,如果我需要,我将依靠具有“真实电子邮件”的与会者在人们的日历中进行通知。 (如果你在下面做一个简短的回答,我会标记为回答)
标签: c# google-api google-calendar-api google-api-client