2

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

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

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

现在,我可以在 C# 中有一个很好的工作示例代码来实现吗?

非常感谢您的帮助!!

4

3 回答 3

1

我使用了类似于此处示例的内容。我最初所做的是使用示例逻辑创建一个简单的 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;
    }
于 2013-03-01T16:38:08.987 回答
1

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

  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. 在谷歌日历配置“与特定人共享”中添加来自 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();
            }          
        }
    }
}
于 2017-09-16T09:40:45.127 回答
0

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

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

于 2017-08-17T18:13:14.110 回答