Bueno, puedo responderme a mí mismo.
CalDAV
CalDAV es un protocolo en la parte superior de WebDAV que es una extensión de la HTTP protocolo. CalDAV se describe en RFC 4791. Utiliza iCalendar como formato de datos. Hay muchas implementaciones.
Acerca de los conflictos CalDAV utiliza el código de estado 409 Conflicts
(HTTP 1.1). El cliente tiene que lidiar con este código de error, hasta donde yo sé, iCal (el cliente Mac) simplemente revierte los cambios locales. Entonces, es bastante fácil definir reglas en el servidor para saber qué hacer si hay conflictos, si no puede resolver uno de ellos, entonces solo tenemos que enviar un código de estado 409
.
Como estándar, CalDAV está dedicado a gestionar datos de calendario, y hay muchos clientes.
Desafortunadamente, Android no proporciona ninguna solución nativa de utilizar este protocolo, en realidad no ofrece otra cosa que Exchange ActiveSync (utilizado por Google). Pero hay toneladas de clientes CalDAV en Android Market.
iOS tiene un soporte nativo de CalDAV.
SyncML
sincronización Mrkup lenguaje es un lenguaje independiente de la plataforma de sincronización para gestionar los datos, creados por grandes empresas como Nokia, IBM, ... Es un estándar abierto. Utiliza HTTP como transporte y XML para describir información. Hay varias implementaciones de servidor, Funambol es bien conocido, por ejemplo.
SyncML describe siete sincronizaciones:
- -sincronización bidireccional: el servidor y el cliente comparte información sobre los cambios, pero el cliente es el primero que envían los cambios;
- Sincronización lenta: el cliente envía todos sus datos. El servidor determina un delta entre sus datos y los datos del cliente, luego el servidor envía este delta. A menudo se usa en la primera sincronización;
- Sincronización unidireccional, solo cliente: el cliente envía cambios al servidor;
- Actualizar la sincronización desde el cliente: el cliente envía todos sus datos, el servidor envía todos sus datos;
- Sincronización unidireccional, servidor solamente: el servidor envía cambios al cliente;
- Actualizar la sincronización del servidor: el servidor envía todos sus datos, el cliente reemplaza sus datos por los datos del servidor;
- Sincronización de alerta de servidor: el servidor le pide al cliente que inicie una sincronización dada.
SyncML maneja conflits en el servidor con un conjunto de reglas predefinidas como Updates mades on the Client always win
, Updates mades on the Client always win
, ...
SyncML se dedica a sincronizar los datos pero tampoco iOS ni Android apoya. Los teléfonos inteligentes Nokia o Samsung parecen ser compatibles con este protocolo, al igual que Windows Phone 6.
¿Entonces?
Microsoft Exchange ActiveSync es la mejor opción para admitir casi todos los teléfonos inteligentes y clientes pesados también. Pero, no es un estándar abierto, y es comercial, y no lo describí por estas razones, solo recuérdalo.
Sobre móviles Sistemas operativos:
- Android no admite otra cosa que ActiveSync, pero existen algunos buenos clientes CalDAV;
- iOS admite CalDAV pero no admite SyncML, y hasta donde yo sé, no hay ningún cliente SyncML para datos de calendario (Funambol proporciona un cliente para los contactos);
- Windows Phone 7 no admite nada más que ActiveSync;
- RIM (BlackBerry) no parece ser compatible con CalDAV, pero hay clientes SyncML;
- No estoy seguro acerca de otros sistemas operativos (como Bada, ...).
En Francia, iOS representa el 60% del mercado móvil, y Android tiene el 30%.
La mejor solución (al menos para mí), es comenzar implementando un servidor CalDAV con un conjunto de reglas personalizadas para manejar conflictos, y luego implementar un servidor SyncML para cubrir el resto del mercado.
No veo cómo puede manejar los conflictos con CalDAV. Nunca hay '409 Conflictos' por lo que he visto. En cambio, los clientes (iOS/DAVDroid) se sincronizan ('PROPRIND' /' REPORT') antes de presionar ('PUT'). Entonces, si hay un objeto de calendario más nuevo en el servidor, sobrescribe el cambio local. En este caso, el cliente nunca informa al servidor sobre el cambio local. Por lo tanto, los cambios como la participación en un evento pueden ignorarse por completo y no hay forma de tratarlo en el lado del servidor ... – KrisWebDev