Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Data syncing with DropBox API and iOS

I have an iOS app which stores data in the local directory. I'd like to be able to sync this data between multiple devices running my app. Currently this is using core data, but I'd expect to have to change to some text-based file storage system to make syncing easier.

I was expecting the DropBox API would make this nice and easy, and that I could tell the API to simply sync the contents of my data folder on startup/save. However it seems the DropBox API is nothing more than a glorified way of uploading and downloading files.

Am I wrong on this assumption? Can the DropBox API actually make it easy to keep a folder full of text files in sync? If not, is there some other service or even advice you can give? Syncing is hard - I was hoping DropBox would make it easier.

like image 752
Ben Williams Avatar asked Jan 27 '11 00:01

Ben Williams


People also ask

How do I sync Dropbox with iOS?

Open the Dropbox folder where you'd like to store your files. Tap the "+" (plus sign) at the bottom of your screen. Tap Upload files (Android) or Create or Upload File (iPhone/iPad). Tap Upload (Android) or Upload File (iPhone/iPad).

How do I sync Dropbox across my devices?

You can sync Dropbox files and folders across devices with the Dropbox app. Sign in to your Dropbox account on each device, then add your files and folders to the Dropbox folder on your computer, phone, or tablet. The latest version of all your files and folders will be available across every device.

How does Smart Sync work on Dropbox?

Dropbox Smart Sync lets you see and access every file in your account and every folder that's ever been shared with you, right from your desktop, without taking up all your hard drive space.

Is Dropbox Smart Sync free?

It is a premium feature, though, available only for paid plans. Although it does sound enticing, the Dropbox personal plan already offers a similar — if more limited — option called Selective Sync in its free Basic plan.


4 Answers

Using /metadata, getting information about the contents of a folder couldn't be easier. All you need to do is check the modified date, and if it's different than yours locally, perform the appropriate action. It will also give you the metadata for any file contents, so you can pick out which files need to be uploaded / downloaded / added / removed as necessary.

Any more functionality than this would be very application-dependent; you can decide for yourself when and how you want to deal with differing files.

Dropbox API Documentation

like image 139
Andy Mikula Avatar answered Oct 06 '22 02:10

Andy Mikula


Won't repeat since Andy has answered your question, thought you may also find this tutorial helpful:

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

like image 42
Boon Avatar answered Oct 06 '22 03:10

Boon


Check out the new DropBox Sync API.

like image 44
ohho Avatar answered Oct 06 '22 03:10

ohho


As ohho mentioned, there's the DropBox Sync API available now which I think will do what you mentioned (I haven't tried it personally, as I integrated support for Dropbox in my app using the earlier SDK, before this came along). This will probably suffice if you're just working with dropbox.

In my case I've been starting to add support for additional online storage ("Cloud") services to my app, and am finding that it's somewhat challenging to deal with the differences between them in how they handle various concepts like authentication, version, naming etc. For example Dropbox's API references files according to their path, whereas Box's API references files according to their file id (which has an associated path, but I believe remains the same if the file is moved). Then there's also all the issues of conflict resolution (aka merging) which come about when multiple clients try and sync conflicting changes to the server.

I've actually been recently considering starting an open source project to develop a library which can connect to all the major services, and provide an abstraction layer that papers over their differences, and also handles the syncing process for you. I've actually got some code already (which I haven't publicly released to date) but could use that to get the project started.

Would this be of use to you? Would you (or any others) be willing to participate in such an effort?

(note to mods: I realise this may be deviating somewhat off-topic - sorry about that. If you can recommend a more suitable forum to discuss this I'd be happy to take the conversation there).

like image 31
Peter Kelly Avatar answered Oct 06 '22 02:10

Peter Kelly