我正在尝试将事件添加到我的日历中。
我在谷歌开发者控制台中创建了服务帐户凭据,我可以授权自己。
我的帐户上有两个日历,但我无法使用c#代码列出它们来搜索API。
我的日历需要一些特殊权限吗?在设置(calendar.google.com)选项卡上,我拥有完全权限。也许获取日历列表的代码有问题?
string[] scopesCal = new string[] { CalendarService.Scope.Calendar, // Manage your calendars
CalendarService.Scope.CalendarReadonly, // View your Calendars
};
var certificate = new X509Certificate2( @"GigaNetLibGoogleXCalendar.p12", "notasecret", X509KeyStorageFlags.Exportable );
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer( ServiceAccountEmail ) {
Scopes = scopesCal
}.FromCertificate( certificate ) );
// Create the service.
CalSrv = new CalendarService( new BaseClientService.Initializer() {
HttpClientInitializer = credential,
ApplicationName = "XCalendar",
} );
var calendars = CalSrv.CalendarList.List().Execute().Items;
foreach ( CalendarListEntry entry in calendars )
Console.WriteLine( entry.Summary + " - " + entry.Id );
您使用的是服务帐户,默认情况下服务帐户没有任何谷歌日历。你要么需要添加一个,要么让它访问你的一个。
获取服务帐户的电子邮件地址,并将其作为用户添加到您希望其能够访问的帐户的日历上。
转到谷歌日历网站。找到日历设置,然后转到日历选项卡,找到要访问的日历,然后单击"共享:编辑设置"添加服务帐户电子邮件地址,就像添加个人电子邮件地址一样。这将为服务帐户提供与您与任何其他用户共享服务帐户相同的访问权限。
您可能希望授予它"make changes to events"
权限
提示
您只需要CalendarService.Scope.Calendar
,它将为您提供完全访问权限。你可以删除CalendarService.Scope.CalendarReadonly
——实际上没有理由两者都有。