Search code examples
androidsynchronizationbackground-processandroid-syncadapterpoint-of-sale

Up-Sync and Down-Sync in Android?


I am working on a Point of Sale application that needs to be very good syncing mechanism. We have Magento Database.The android device have SQLite local Db. Now we need to sync in the following way:

Local ------Sync To---------------> Server (Up Sync)

Server------Sync To---------------> Locals (Down Sync)

There are 2 things:

1) write-to (How to take care??)

For every change that i do on local ,it will directly sync my local to server

2) write-back (How to take care???)

Whenever there is a change in server, we need to sync all our locals with server.

So, the task is: to identify a server update

And sync our locals. Like there are 4 devices are running in a store and we have added one new customer through one device. Now i want that the three other devices local db also updated with the information about that customer and server also updated.

I heard about the background threads and run threads after a time interval. But what is the best way to do that which don't affect the application. Also the all Big Retail stores uses the syncing process. what they used for that ?

Any help is appreciated.


Solution

  • It fully depends on you database structure...

    you have DATABASE in LOCAL (device) and on SERVER

    NOW

    You need to have TIMESTAMP fieLd added to the TABLES which actually you want to keep in SYNC.

    When ever you will make any changes on server the TIMESTAMP will be updated there and same will be the case for the local database also what you have to do is now.

    Run a service in the background which will keep on comparing the TIMESTAMPS of LOCAL with that of SERVER.

    Now you have to put condition that if TIMESTAMP of SERVER is newer to that of LOCAL then bring changes from SERVER to LOCAL,

    and vice versa will be the condition to take changes from LOCAL to SERVER.
    

    Further you have to decide how frequently you want to run this SERVICE.

    ALTERNATIVELY:

    You can make the table there on SERVER which will store LAST_SYNCHED date for particular device

    Whenever you will login in you device (or any other particular event on which you want it to perform this) the server will check-

    • when this device was LAST_SYNCHED
    • then it will compare it to TODAYS DATE
    • and will check what upadets actualy happened between these dates and will send the changes to the LOCAL (device)

    and vice versa for LOCAL (device) to SERVER

    you have to play with TIMESTAMPS rest you can have your own logic how to structure the database.

    I told you what I have have observed, when I have been a part of such similar project

    EDIT

    The above Process defines how to sync the devices with server I mean the strategy..

    If you want your devices to get notified from server when to sync instead of hitting the WEB-SERVICE recurrently ..

    You can make use of PUSH NOtification, GCM is one of them that send push notification to devices, you can integrate it to your project