mstilkerich/carddavclient

用于发现和同步CardDAV服务器的CardDAV客户端库

v1.4.1 2024-03-23 18:34 UTC

README

CI Build codecov Type Coverage Psalm level

这是一个用于PHP应用程序与存储在CardDAV服务器上的通讯录交互的库。

索引

功能

  • 按照RFC 6764定义的CardDAV地址簿发现(使用DNS SRV记录和/或已知URI)
  • 服务器端地址簿和本地缓存的同步
    • 如果服务器支持,则使用高效的sync-collection (RFC 6578) 和 addressbook-multiget (RFC 6352) 报告
    • 如果服务器不支持这些报告,则回退到通过PROPFIND同步并与本地缓存状态进行比较
  • 修改地址簿(添加/更改/删除地址对象)
  • 使用Guzzle HTTP客户端库,包括对HTTP/2和包括OAuth2 bearer token在内的各种身份验证方案的支持
  • 在应用程序接口处使用Sabre/VObject交换VCard
  • 使用任何PSR-3兼容的日志记录对象记录日志消息和HTTP流量。为HTTP流量使用单独的日志记录对象,因为它可能非常详细,因此可以将HTTP日志记录到单独的位置或独立于库自己的日志消息禁用。

请参阅功能矩阵以了解哪些服务支持哪些功能;文件还包含了我所知的不同服务器的问题列表。

测试服务器

目前,此库已测试可与其他服务器互操作

  • Nextcloud 18及以后版本(基本身份验证和GSSAPI/Kerberos 5)
  • iCloud
  • 通过CardDAV API的Google Contacts
  • Radicale 3(也被Synology作为DSM CardDAV服务器使用)
  • Owncloud 10
  • Baïkal 0.7(摘要身份验证和GSSAPI/Kerberos 5)及以后版本
  • Davical 1.1.7及以后版本
  • SOGo 5.10

理论上,它应该可以与任何CardDAV服务器一起使用。如果不行,请打开一个问题。

注意:要使用除基本以外的任何身份验证机制,您需要安装带有对相应身份验证机制支持的php-curl扩展。

安装说明

此库旨在与composer一起使用,以安装/更新库及其依赖项。它旨在与PSR-4兼容的自动加载器(如composer提供的)一起使用。

通过composer将库作为依赖项添加到您的项目中

  1. 下载composer(如果您已经安装了composer,请跳过):说明

  2. 将此库添加到您的项目依赖项中

php composer.phar require mstilkerich/carddavclient
  1. 要使用composer在您的应用程序中使用此库,只需在主PHP文件中加载composer的自动加载器即可
require 'vendor/autoload.php';

自动加载器将负责加载此以及其他PSR-0/PSR-4自动加载器兼容库。

文档

快速入门

通常,使用此库的应用程序将想要执行以下一项或多项操作:

  1. 从用户提供的信息中发现地址簿:为此操作,库提供了一个服务类 MStilkerich\CardDavClient\Services\Discovery。该服务接受账户凭证和一个部分URI(至少是域名)并尝试发现用户的地址簿。它返回一个 MStilkerich\CardDavClient\AddressbookCollection 对象数组,每个对象代表一个地址簿。

  2. 在已知位置重新创建先前发现的地址簿。这可以通过简单地创建 MStilkerich\CardDavClient\AddressbookCollection 的实例来实现。

  3. 初始时以及定期同步服务器端地址簿与本地缓存:为此操作,库提供了一个服务类 MStilkerich\CardDavClient\Services\Sync。此服务执行同步,给定 MStilkerich\CardDavClient\AddressbookCollection 对象以及前一次同步操作返回的可选同步令牌。同步令牌是服务器端对特定时间点地址簿状态的标识。当提供同步令牌时,服务器将只报告由同步令牌标识的状态与当前状态之间的差异。这可能因各种原因而无法工作,最常见的原因是服务器不会无限期地保留同步令牌。在这种情况下,将执行完整同步。同步结束时,如果服务器提供,服务返回反映地址簿同步状态的同步令牌。

  4. 对服务器端地址簿进行更改,如创建新的地址对象。这些操作直接作为 MStilkerich\CardDavClient\AddressbookCollection 类的方法提供。

  5. 搜索服务器端地址簿以检索符合某些过滤标准的卡片。此操作通过 MStilkerich\CardDavClient\AddressbookCollection::query() API 提供。

库附带了一个演示脚本 doc/quickstart.php,展示了如何执行上述所有操作。

示例应用程序

有关使用此库的简单演示应用程序,请参阅 davshell。它展示了如何使用库进行地址簿的发现和同步。

作为一个更复杂的实际应用,您还可以查看 Roundcube CardDAV 插件,它也使用此库与 CardDAV 服务器进行交互。

API文档

API 概述可在 此处 获取。

最新发布版本的 API 文档可在 此处 找到。库的公共 API 可在导航侧边栏的 Public 包中找到。

可以使用 phpDocumentor 从源代码生成 API 文档,运行 make doc