事件中的Calendar API v3提醒始终为默认值

时间:2014-12-15 08:46:19

标签: google-calendar-api reminders

我正在开发日历api客户端,我有提醒问题 - 它们不起作用......

我创建这样的事件:

Event gEvent = new Event()
{
Summary = "Reminder test",
Location = "Reminder test",
Start = new EventDateTime()
{
DateTime = new DateTime(2014, 12, 14, 21, 0, 0),
},
End = new EventDateTime()
{
DateTime = new DateTime(2014, 12, 14, 22, 0, 0),
},
Reminders = new Event.RemindersData()
{
UseDefault = false,
Overrides = new List<EventReminder>() 
{
new EventReminder()
{
Method = "email",
Minutes = 15
},
new EventReminder()
{
Method = "email",
Minutes = 30
},
new EventReminder()
{
Method = "email",
Minutes = 45
},
}
}
};
Event simpleEvent = calService.Events.Insert(gEvent, strCalendarID).Execute();

此代码有效,在我的谷歌日历GUI中真正创建了我的活动,但如果我点击编辑活动 - 我看不到我的提醒,则只有默认提醒。 为什么?我做错了什么?

感谢所有答案


今天我尝试使用JSON从代码发送请求。我的方法看起来像这样:

private static void CreateSimpleEvent(string strAccessToken, string strCalendarID, string strApiKey)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("https://www.googleapis.com/calendar/v3/calendars/{0}/events?sendNotifications=false&fields=reminders&key={1}", strCalendarID, strApiKey));
        request.Method = "POST";
        request.ContentType = "application/json";
        request.UserAgent = "TestCalendarApi2";
        request.Headers.Add("Authorization", "Bearer " + strAccessToken);

        string strJson = @"{
                        'end': {
                        'dateTime': '2014-12-19T15:30:00.000Z',
                        'timeZone': 'Europe/Prague'
                        },
                        'start': {
                        'dateTime': '2014-12-19T14:30:00.000Z',
                        'timeZone': 'Europe/Prague'
                        },
                        'reminders': {
                        'useDefault': false,
                        'overrides': [
                        {
                        'method': 'email',
                        'minutes': 13
                        }
                        ]
                        }
                        }";

        using (var streamWriter = new StreamWriter(request.GetRequestStream()))
        {
            streamWriter.Write(strJson);
            streamWriter.Flush();
            streamWriter.Close();

            var httpResponse = (HttpWebResponse)request.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
            }
        }
    }

方法进行正常并且在谷歌日历中创建了事件,但是当我使用来自ServiceAccountCredential对象的AccessToken时,提醒仍然缺失:(。当我使用在Apis资源管理器(https://developers.google.com/apis-explorer/#p/calendar/v3/中)生成的AccessToken时 - 提醒正在运行。 问题是,在Apis资源管理器中,我必须打开OAuth2,然后我必须进行重大访问......

有什么办法,如何从代码进行大访问?

感谢所有答案。

2 个答案:

答案 0 :(得分:1)

在使用服务帐户来管理Google日历中的事件时出现提醒的问题是,该服务帐户实际上是具有自己的Google日历的虚拟用户。活动提醒是针对每个用户设置的,因此,如果您要以服务帐户身份登录Google日历,则只能看到提醒。与服务帐户共享日历的用户只能看到事件详细信息,但必须设置自己的提醒。

答案 1 :(得分:0)

此处的问题相同,插入的事件没有任何提醒。 通过API资源管理器发送相同的请求已成功插入带提醒的事件

我的JSON数据:

{  
   "end":{  
      "dateTime":"2015-01-19T01:20:00.000",
      "timeZone":"Europe\/Minsk"
   },
   "reminders":{  
      "useDefault":false,
      "overrides":[  
         {  
            "method":"sms",
            "minutes":"30"
         },
         {  
            "method":"email",
            "minutes":"60"
         }
      ]
   },
   "start":{  
      "dateTime":"2015-01-19T01:15:00.000",
      "timeZone":"Europe\/Minsk"
   },
   "summary":"New event",
   "start_date":"2015-01-19 01:15",
   "end_date":"2015-01-19 01:20"
}