gpt4 book ai didi

c# - 如何将事件推送到 iPhone 日历

转载 作者:可可西里 更新时间:2023-11-01 03:32:48 24 4
gpt4 key购买 nike

我正在尝试将我的应用程序(Windows 桌面应用程序和 Web 应用程序)与移动日历集成。

我的应用程序应该

  • 将新事件推送到移动日历
  • 从移动日历中获取事件

到目前为止,我设法与 Google 日历集成(非常简单,simple library + OAuth)

现在我想对 iCloud 日历做同样的事情,但这并不容易。

  • 在 iCould 设置中,我可以公开日历。我可以获取事件(作为 iCalendar 文件),但我无法推送事件。
  • 找不到任何用于 iCould 日历集成的重要库。我给了CalDav.Client尝试一下,但需要提供 CalDAV 服务器 url。根据this应该看起来像” > 是什么以及在哪里可以找到它们。

有什么想法吗?

附言

有一个解决方法。我可以要求用户创建一个 Google 帐户和一个日历,并将其用作代理。将 iPhone 与 Google 日历集成并形成另一个站点,将我的应用程序与 Google 日历集成。它可以工作,但配置对用户来说有点乏味。

编辑

我尝试按照@hnh 的说明以这种方式发现 CalDAV:

PROPFIND https://p42-caldav.icloud.com/ HTTP/1.1
Depth: 0
Prefer: return-minimal
Content-Type: application/xml; charset=utf-8
Host: p42-caldav.icloud.com
Content-Length: 102

<d:propfind xmlns:d="DAV:">
<d:prop>
<d:current-user-principal />
</d:prop>
</d:propfind>

结果是 401:

HTTP/1.1 401 Unauthorized
Content-Type: text/html;charset=utf-8
WWW-Authenticate: x-mobileme-authtoken realm="MMCalDav"
WWW-Authenticate: basic realm="MMCalDav"
Server: iCloudCalendarServer 15G33
Date: Tue, 26 Jan 2016 12:46:14 GMT
X-Responding-Server: mr26p42ic-ztdg05101801 17 a63660a6f7d1a25b5a7ed66dab0da843
X-Transaction-Id: c8dc19d4-c42a-11e5-8381-008cfaeb448c
Content-Length: 141
Strict-Transport-Security: max-age=31536000; includeSubDomains

<html><head><title>Unauthorized</title></head><body><h1>Unauthorized</h1><p>You are not authorized to access this resource.</p></body></html>

编辑 2

按照进一步的说明,我设法进行了身份验证,但文章中的请求仍然存在问题:

对于:

<d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
<d:prop>
<d:displayname />
<cs:getctag />
</d:prop>
</d:propfind>

我得到:(ctag 未找到,displayName 的值为“tmp”——我不认识)

<?xml version='1.0' encoding='UTF-8'?>
<multistatus xmlns='DAV:'>
<response>
<href>/</href>
<propstat>
<prop>
<displayname>tmp</displayname>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop>
<getctag xmlns='http://calendarserver.org/ns/'/>
</prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
</multistatus>

为此:

<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
<d:prop>
<d:getetag />
<c:calendar-data />
</d:prop>
<c:filter>
<c:comp-filter name="VCALENDAR" />
</c:filter>
</c:calendar-query>

我收到 400 错误请求

最佳答案

这是一个很好的介绍:Building a CalDAV client .它还描述了日历发现过程的工作原理(您如何找到日历 homeset URL)。

许多 CalDAV 服务器不支持 OAuth,您通常必须向用户询问登录名/密码。

似乎没有用于 CalDAV 的 .NET 库。您可以在此处找到实现列表:http://caldav.calconnect.org/implementations/librariestools.html .

总结:可能不像您在 Google 上做的那样简单,但也不是特别难。一旦你拥有它,你就可以连接到许多不同的服务器,因为 CalDAV 是一个标准......(包括谷歌,你也可以使用 CalDAV 连接到它)。

问题编辑后更新:

401 是一个通用的 HTTP回复。这意味着您需要提供凭据才能继续请求。客户端通常会提示用户输入登录名/密码,然后重新运行请求。基本身份验证在维基百科中有详细描述 article on Basic auth .

另一个错误是使用 p42-caldav.icloud.com 作为入口点 URL。使用 caldav.icloud.com 因为您不知道用户在哪个分区上。您需要使用 Building a CalDAV client 中描述的发现过程查找托管用户日历的实际 URL。

关于c# - 如何将事件推送到 iPhone 日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35012276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com