2011-01-27 17 views
7

Tengo una aplicación iOS que almacena datos en el directorio local. Me gustaría poder sincronizar esta información entre varios dispositivos que ejecutan mi aplicación. Actualmente, esto está utilizando datos básicos, pero espero tener que cambiar a un sistema de almacenamiento de archivos basado en texto para facilitar la sincronización.Sincronización de datos con DropBox API y iOS

Estaba esperando que la API de DropBox lo hiciera fácil y fácil, y que podría decir a la API que simplemente sincronice los contenidos de mi carpeta de datos al inicio/guardar. Sin embargo, parece que la API DropBox no es más que una forma glorificada de cargar y descargar archivos.

¿Estoy equivocado en esta suposición? ¿Puede la API DropBox realmente hacer que sea fácil mantener una carpeta llena de archivos de texto sincronizados? Si no, ¿hay algún otro servicio o incluso un consejo que pueda dar? La sincronización es difícil, esperaba que DropBox lo hiciera más fácil.

+0

Hola. Me preguntaba si tuviste éxito en lograr que funcione una simple sincronización de DropBox. Me enfrento con el mismo problema frustrante en este momento y comencé una nueva pregunta aquí con la esperanza de obtener algún código de muestra para ilustrar todo el proceso de sincronización. http://stackoverflow.com/questions/5950168/a-simple-sync-with-the-iphone-dropbox-api –

+0

Lo tengo bastante rápido ya que era evidente que no podía hacer lo que estaba buscando. La API es más para que pueda acceder a una cuenta de base de datos de usuarios, no para proporcionar servicios de sincronización. –

Respuesta

7

Usando /metadata, obtener información sobre el contenido de una carpeta no podría ser más fácil. Todo lo que necesita hacer es verificar la fecha modified, y si es diferente a la suya localmente, realice la acción adecuada. También le proporcionará los metadatos de los contenidos de los archivos, para que pueda elegir qué archivos se deben cargar/descargar/agregar/eliminar según sea necesario.

Cualquier funcionalidad adicional a esta sería muy dependiente de la aplicación; usted puede decidir por sí mismo cuándo y cómo desea tratar con los diferentes archivos.

Dropbox API Documentation

+0

Gracias Andy, creo que pasé por alto la llamada de metadatos, ¡ya que en realidad es bastante importante! ¿Cómo suena este enfoque? Realice la llamada a metadatos, actualice los archivos que tengan una fecha de modificación diferente, descargue los archivos nuevos, cargue los archivos que se hayan actualizado y luego cargue los archivos que sean nuevos. –

+0

Hmm, pero ¿cómo manejar los archivos que se han eliminado del directorio? ¿Cómo sabría si un archivo es nuevo y necesita ser cargado, o ha sido eliminado en otro dispositivo y necesita ser eliminado? –

+0

Parece que es la manera de hacerlo. Depende de usted la frecuencia con la que desea utilizar esa API. Existen límites (5000 solicitudes por día por token de acceso y 300MB/archivo) que probablemente no entren en juego para un dispositivo móvil, por lo que debería estar bien en ese frente. –

0

Hay una fuente RSS que puede ser limitada a una de las carpetas compartidas, pero que tipo de filtros de eventos para mantener un volumen bajo.

3

No repetiré ya que Andy ha respondido a su pregunta, el pensamiento también se puede encontrar útil este tutorial:

http://www.nanaimostudio.com/blog/2011/1/20/how-to-synchronize-your-app-data-using-dropbox-api.html

+0

Recibo el siguiente error cuando construyo el código en el blog de Nanaimo. Estos errores ocurren en la función loadedMetadata: solicitud de contenido 'member' en algo que no es una estructura o unión Y solicitud de 'path' en algo que no sea una estructura o unión y también hay un problema con la declaración addObject (Expression no tiene una tipo de objeto válido). Por favor, ayuda – Namratha

+0

¿Puedes ver imágenes en este tutorial? – rjobidon

2

Como he mencionado, ahora está disponible la API DropBox Sync, que creo que hará lo que usted mencionó (no lo he probado personalmente, ya que integé compatibilidad con Dropbox en mi aplicación usando el SDK anterior, antes de que esto llegara) Esto probablemente sea suficiente si solo está trabajando con Dropbox.

En mi caso, he estado comenzando a agregar soporte para servicios adicionales de almacenamiento en línea ("Cloud") a mi aplicación, y encuentro que es un poco difícil lidiar con las diferencias entre ellos en cómo manejan varios conceptos como autenticación, versión, nombres, etc. Por ejemplo, la API de Dropbox hace referencia a los archivos según su ruta, mientras que la API de Box hace referencia a los archivos según su id. de archivo (que tiene una ruta asociada, pero creo que permanece igual si se mueve el archivo). Luego están también todos los problemas de resolución de conflictos (también conocidos como fusión) que surgen cuando varios clientes intentan sincronizar cambios conflictivos en el servidor.

En realidad, hace poco que estaba considerando comenzar un proyecto de código abierto para desarrollar una biblioteca que pueda conectarse a todos los servicios principales y proporcionar una capa de abstracción que documente sus diferencias y también maneje el proceso de sincronización. De hecho, ya tengo un código (que no he publicado públicamente hasta la fecha) pero podría usarlo para iniciar el proyecto.

¿Sería útil para usted? ¿Estaría usted (u otros) dispuestos a participar en tal esfuerzo?

(nota a los mods: me doy cuenta de que esto puede estar desviando algo fuera del tema, disculpa eso.Si puedes recomendar un foro más adecuado para discutir esto, me encantaría llevar la conversación allí).

Cuestiones relacionadas