【问题标题】:Avoid Google Calendar API adding an actual event in peoples calendars?避免 Google Calendar API 在人们的日历中添加实际事件?
【发布时间】: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


【解决方案1】:

听起来您的应用程序需要自己的日历 - 所以创建一个(请参阅 Calendars.insert 了解如何以编程方式执行此操作)。

您是否需要为整个应用程序提供一个单个日历,无论用户是谁(在这种情况下,您可能希望使用服务帐户身份验证,并创建与服务帐户关联的单个日历)或每个用户一个额外的日历(在这种情况下,您将使用用户身份验证并在他们的帐户中创建另一个日历)取决于您的应用程序需求。

值得注意的是,如果您在用户帐户中创建日历,他们几乎可以肯定可以通过 Web UI 访问它。同样,这是否是一个问题取决于应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 2020-02-07
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    相关资源
    最近更新 更多