我将Google Calendar API
与服务帐户结合使用。实际上,我将创建一个应用程序,将本地数据库中的事件同步到特定的电子邮件用户。添加一个事件看起来效果很好但是当我需要更新一个事件时问题就出现了。特别是在更新之前,我检查特定用户的Google Calendar
上是否存在该事件,让我举个例子,这就是我创建服务帐户的方式:
string[] scopes = new string[]
{
CalendarService.Scope.Calendar,
CalendarService.Scope.CalendarReadonly
};
var certificate = new X509Certificate2(CPath, "notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer("my service account email")
{
Scopes = scopes
}.FromCertificate(certificate));
CalendarService service = new CalendarService(
new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName
});
return service;
在更新或添加事件之前,我会以这种方式检查事件是否存在:
public bool EventExist(string id)
{
try
{
var service = AuthenticationService();
Event foundResponse = service.Events.Get("foo@gmail.com", id).Execute(); //id is the id of the event
return true;
}
catch (Exception ex)
{
Log.Write(ex.Message);
return false;
}
}
现在AuthenticationService()
服务是返回service
变量的方法(第一个代码写入)。稍后,我使用service
变量来获取特定用户的事件,请注意email
是用户的主日历。现在,如果我通过" primary",则会找到该事件,相反,如果我通过电子邮件,就像在这种情况下,找不到事件。
我不知道为什么,service-account
可能会将特定用户的事件保存在某处?这种情况对我来说非常糟糕,因为如果用户删除具有特定id的事件,我需要检查该元素是否存在于用户的日历中。
也许我对某些内容有误或者Google不允许这样做?