【问题标题】:C# Desktop application using Google Calendar API .NET v3 -- Howto?使用 Google Calendar API .NET v3 的 C# 桌面应用程序 - Howto?
【发布时间】:2013-03-01 16:06:12
【问题描述】:

可能不是唯一一个问这个的人,但我没有发现任何有用的东西……就像丛林;)

我有一个想要连接到我的 Google 日历的 C# 桌面应用程序(5-10 位用户)。我想在日历中添加、移动、删除、更新事件。我下载了安装的最后一个 .Net api v.3。

根据我的阅读,困难的部分是身份验证/连接过程。我想我们需要使用 OAuth 2.0 身份验证?我希望我的用户进行一次身份验证,而不是每次他们想要执行操作(添加、移动、删除、更新)时。在某些示例中,我得到我们必须将令牌从网页剪切并粘贴到控制台...不是真正的用户友好。以及如何只进行 1 次身份验证(或者直接将令牌放入代码中不进行身份验证?)?

现在,我是否可以在 C# 中编写一个很好的工作示例代码来实现它?

非常感谢您的帮助!!

【问题讨论】:

  • 我找到了很多信息不完整或信息错误的答案。 Google 快速入门示例根本不涉及缓存凭据。蒂诺在下面的回答非常好。我强烈推荐它。

标签: c# google-api-dotnet-client


【解决方案1】:

我使用了类似于示例 here 的内容。我最初所做的是使用示例逻辑创建一个简单的 Web 应用程序来设置 Google 需要的初始身份验证。我通过并从该州获得了刷新令牌。然后,我将其保存在应用程序设置中,以后可以在以后的 GetAuthorization 请求中使用。至少就我的做法而言,它运行良好,只要应用保持连接,用户就不需要授权。

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;
    }

【讨论】:

  • 谢谢!我会检查的!
  • 现在我在网页中有这个错误:缺少必需的参数:范围
  • 我找到了我的旧网络应用项目。 Here 是我用来保存 RefreshToken 的代码。希望对您有所帮助。
【解决方案2】:

我今天遇到同样的问题,现在找到了解决方案

  1. 准备API访问https://console.developers.google.com/apis/dashboard

    1. 按下“启用 API 和服务”按钮
    2. 搜索“日历”并选择“Google 日历 API”
    3. 按下“创建项目”按钮
    4. 创建项目
    5. 按“启用”
    6. 按下“创建凭据”按钮
    7. 选择“您将从哪里调用 API?” -> 其他用户界面
    8. 选择“您将访问哪些数据?” -> 应用数据
    9. 创建服务帐号
    10. 选择角色项目 -> 编辑器
    11. 选择密钥类型 JSON
    12. 按“继续”按钮
    13. 将文件重命名为“credential.json”并保存在Visual Studio项目中
    14. 在 Visual Studio 中更改复制到输出目录 -> “如果较新则复制”
  2. 更改您的谷歌日历的共享配置(共享此日历)

    1. 在 google 日历配置“与特定人员共享”中添加 json 文件“client_email”中的电子邮件地址

示例代码

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();
            }          
        }
    }
}

【讨论】:

  • 这很好用。正如您所描述的那样导航 Google 控制台有点棘手,但我很确定这是因为它们会定期更改。对于希望使其工作的其他人:不要忘记与凭据中的电子邮件地址共享日历的最后一步。
【解决方案3】:

Here is a link 帮助下载适用于 .NET 的日历客户端 API 库。该库使 OAuth 和访问日历更容易。请参阅链接了解 OAuth 详细信息,但我很确定这是您想要的 - 用户只需登录一次即可授权。

在同一页面上有使用 VB.NET 和 MVC 中的客户端 API 的示例应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2015-05-12
    • 2011-12-26
    相关资源
    最近更新 更多