可能不是唯一一个问这个的人,但我发现什么都行不通......它就像一个丛林;)
我有一个C#桌面应用程序(5-10用户),我想连接到我的Google日历。我想添加,移动,删除,更新日历中的事件。我下载了最后安装的.Net api v.3。
根据我的阅读,困难的部分是验证/连接程序。我想我们需要使用OAuth 2.0身份验证吗?我希望我的用户进行一次身份验证,而不是每次他们想要进行操作(添加,移动,删除,更新)。在某些示例中,我得到的是我们必须将令牌从网页剪切并粘贴到控制台中...不是真的用户友好。以及如何只验证1次(或者只是将令牌直接放在代码中以便不进行身份验证?)?
现在,我可以在C#中使用一个好的工作示例代码吗?
非常感谢你的帮助!!
答案 0 :(得分:1)
我使用了与示例here类似的内容。我最初做的是使用示例逻辑创建一个简单的Web应用程序来设置Google要求的初始身份验证。我走了过来,从状态中获得了Refresh Token。然后我将其保存在应用程序设置中,以后我可以在将来的GetAuthorization请求中使用它。至少对于我正在做的事情,这种方法运作良好,只要app保持连接,用户就不需要授权。
private IAuthorizationState GetAuthorization(WebServerClient client)
{
IAuthorizationState state = new AuthorizationState(new[] { CalendarService.Scopes.Calendar.GetStringValue() });
string refreshToken = LoadRefreshToken();//this where I wrote code to load it from the app settings
if (!string.IsNullOrEmpty(refreshToken))
{
state.RefreshToken = refreshToken;
try
{
if (client.RefreshToken(state))
return state;
}
catch (ProtocolException)
{
return null;
}
}
return null;
}
答案 1 :(得分:0)
Here is a link帮助下载.NET的Calendar Client API库。该库使OAuth和访问日历更容易。请参阅OAuth详细信息的链接,但我很确定这是您想要的 - 用户只需登录一次即可进行授权。
在同一页面上有使用VB.NET和MVC中的客户端API的示例应用程序。
答案 2 :(得分:0)
我今天遇到了同样的问题,现在找到了解决方案
准备Api访问https://console.developers.google.com/apis/dashboard
更改Google日历的分享配置(分享此日历)
示例代码
using Google.Apis.Auth.OAuth2;
using Google.Apis.Calendar.v3;
using Google.Apis.Calendar.v3.Data;
using Google.Apis.Services;
using System.IO;
namespace Test.GoogleCalendar
{
class Program
{
static void Main(string[] args)
{
GoogleCredential credential;
using (var stream = new FileStream("credential.json", FileMode.Open, FileAccess.Read))
{
credential = GoogleCredential.FromStream(stream).CreateScoped(CalendarService.Scope.Calendar);
}
// Create Google Calendar API service.
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Test Calendar Reader",
});
var calendars = service.CalendarList.List().Execute().Items;
foreach (CalendarListEntry calendar in calendars)
{
var events = service.Events.List(calendar.Id).Execute();
}
}
}
}