我正在使用带有服务帐户的Google Calendar API。想法是我们希望纯粹将其用作API后端,因此我们不必自己编写代码。这意味着我们不希望它与人们的真实日历干涉(或至少使其成为可选!)。
如果我这样做一个POST:
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,
});
答案 0 :(得分:4)
听起来您的应用程序需要自己的日历 - 因此请创建一个(请参阅Calendars.insert
了解如何以编程方式执行此操作)。
无论用户是否需要整个应用程序的单个日历(在这种情况下,您可能希望使用服务帐户身份验证,并创建与服务相关联的单个日历)帐户)或每个用户的额外日历(在这种情况下,您将使用用户身份验证并在其帐户中创建另一个日历)取决于您的应用程序需求。
值得注意的是,如果您在用户的帐户中创建日历,他们几乎可以 通过网络用户界面访问它。同样,这是否是一个问题取决于应用程序。