We have ebook readers in mac, window, iOS, Android, etc. Recently, I'm working for the ebook reader for mac, window. Now, when user goes to a bookshelf, or goes into pages of a book, synchronizing starts. But it's difficult to know for user. I'm gonna think of a sync button(so, user can push this button when they want to synchronize the pages, annotation, bookmarks, etc between devices), but it can give an kind of damage for a server. Because user can push the sync button automatically. So I have to fix the exact condition. For example, when user switches to another application, synchronizing starts like that. Gives me suggestions! Anything is ok. Thank you for reading. :)
With Kindle, synchronisation just happens, and it is very useful. Occasionally, my Kindle asks me if I want to sync to furthest page read, and my immediate thought is always "of course I do, why are you asking me?"
I cannot think of a use case for not synchronising across devices, except perhaps when the user is connected via 3G instead of wifi or 4G.
If you have a use case for not synchronising, then I would suggest doing it by default, but allow the user to change it in user preferences, as follows:
(the bullet points in the image represent checkboxes - I haven't got my usual wireframing app available)
Always push the state to your service when it changes. Your service should simply not accept state changes that transition from an older then stored state to their current state. In this situation a status response should indicate that a newer state is available and the application should sync. Make opening a book a state change and everything should just work seamlessly for your users.
Even though this is a very rough design and I have no idea what you're designing particularly, why not have something that indicates when it was last synced?
It could happen automatically, just have a message that says it:
Google Docs, Evernote, and many other applications incorporate the "Last synced" byline or sometimes "last saved."