DEVELOPING ANDROID CLIENT
APPS VIA SYNCADAPTER
Anatoliy Kaverin
Lohika @ 2013
SESSION AGENDA
 Why?
 SyncAdapter!? LOLWUT?
 The big picture
 Puzzles
 Does anybody use it?
 Code samples, documentation
 Q&A
2
IMAGINE…
SIMPLE CLIENT-SERVER APP
3
SYNC CACHE: ISSUES TO CONSIDER
Are we done?
 Global Sync setting
 Bandwidth starvation
 YES, queued
 YES, even duplicates
 YES, even if app is off
 YES, built in support
Hand-made  SyncAdapter framework
 Network availability
 Pending queue
 Refresh on network
 Periodic update
 YES, manual override
 YES! YES! YES!
4
SYNCADAPTER!? LOLWUT?
 Well, you probably use it everyday…
5
THE BIG PICTURE – BASIC FLOW
6
THE BIG PICTURE – PUZZLES
7
PREREQUISITES TO CONSIDER
 Network layer separation
 Plain implementation
 Sync status field for synced entities
 Usually NOOP, Created, Updated & Deleted
 Consider the field in UI flows
 Consider partial sync
 For better performance to sync only local delta
8
PUZZLES – ACCOUNT (1)
 Key Features
 Manage credentials;
 Safe system store;
 Multitenant support
 Sync related
 Token caching and invalidation
 Alternative flow to login or sign in
 Store extra data with account
9
PUZZLES – ACCOUNT (2)
 Checklist:
 Implement Authenticator
 Implement Authentication Service
 Define configuration in XML
10
PUZZLES – ACCOUNT (3)
 Checklist:
 Register Authentication Service in AndroidManifest
 Add permissions
 APIs to use:
 android.accounts.AccountManager to work with accounts
 android.accounts.Account to store credentials
11
PUZZLES – CONTENT PROVIDER (1)
 Key features
 Heart of DAO
 Resource effective
 Cursor, resource-effective scalability
 Power of Joins
 Built-in ListView refresh via ContentObserver &
Cursor
 Sync related
 Acts as mediator for sync and UI layers
 Supports automatic delta upload sync
 NOTE: Can be fake one, but you’ll lose a lot of magic
 12
PUZZLES – CONTENT PROVIDER (2)
 Minimal implementation based on
https://github.com/novoda/SQLiteProvider
 Supports all CRUD
 Supports DB versioning
 And even more…
13
PUZZLES – SYNCADAPTER (1)
 Key features
 Plugin to Android SyncManager
 SyncManager manages queue of execution
 Adapter is executed in background thread & when
network is available
 Sync related
 Scheduling & automated mode
 Respects system settings
 Can be overridden by manual request
 Partial sync supported
 Upload only local delta
 Any other criteria (Bundle) 14
PUZZLES – SYNCADAPTER (2)
 Checklist
 Implement SyncAdapter class
 Implement Sync Service
 Define configuration xml
15
PUZZLES – SYNCADAPTER (3)
 Checklist
 Register Sync Service in AndroidManifest
 Add permissions
 APIs to use
 android.content.ContentResolver to reach SyncManager
programmatically
16
PUZZLES – SYNCADAPTER (4)
 How to trigger sync?
 Upload delta
 ContentResolver.notifyChange
 Be aware of cyclic calls if used in ContentProvider
 Scheduling
 ContentResolver.addPeriodicSync
 Automated
 ContentResolver.setSyncAutomatically
 Manual
 ContentResolver.requestSync
 Manual forced
 ContentResolver.requestSync
 Pass SYNC_EXTRAS_MANUAL in bundle
17
THE BIG PICTURE – OPTIONAL PUZZLES
18
PROS & CONS
 Pros
 Simplify server interaction
 A lot of work handled by framework
 Resource effective – the Android way
 Cons
 A lot of puzzles, hard to start…
 Lack of documentation
 Error handling
 Bugs 
19
DOESANYBODYUSEIT?
20
DOCUMENTATION
 Official docs
 Great tutorial added in August ’13
http://developer.android.com/training/sync-
adapters/index.html + code sample
 Stackoverflow, use tags below
 [android-syncadapter]
 [sync] + [android]
21
BONUS: CODE SAMPLES
 Repo on GitHub
https://github.com/springbyexample/spring-by-
example
 Toy client-server app (both parties supplied )
 Shows all puzzles implemented:
 Accounts – fake one, there is no authentication
 Content Provider based on novoda library
 SyncAdapter logics
 All wrapping XML configuration
 Built via Maven
 Follow README and be happy 
 Got questions?
 a.kaverin@gmail.com 22
Q & A
Thanks for your attention!23

Android sync adapter

  • 1.
    DEVELOPING ANDROID CLIENT APPSVIA SYNCADAPTER Anatoliy Kaverin Lohika @ 2013
  • 2.
    SESSION AGENDA  Why? SyncAdapter!? LOLWUT?  The big picture  Puzzles  Does anybody use it?  Code samples, documentation  Q&A 2
  • 3.
  • 4.
    SYNC CACHE: ISSUESTO CONSIDER Are we done?  Global Sync setting  Bandwidth starvation  YES, queued  YES, even duplicates  YES, even if app is off  YES, built in support Hand-made  SyncAdapter framework  Network availability  Pending queue  Refresh on network  Periodic update  YES, manual override  YES! YES! YES! 4
  • 5.
    SYNCADAPTER!? LOLWUT?  Well,you probably use it everyday… 5
  • 6.
    THE BIG PICTURE– BASIC FLOW 6
  • 7.
    THE BIG PICTURE– PUZZLES 7
  • 8.
    PREREQUISITES TO CONSIDER Network layer separation  Plain implementation  Sync status field for synced entities  Usually NOOP, Created, Updated & Deleted  Consider the field in UI flows  Consider partial sync  For better performance to sync only local delta 8
  • 9.
    PUZZLES – ACCOUNT(1)  Key Features  Manage credentials;  Safe system store;  Multitenant support  Sync related  Token caching and invalidation  Alternative flow to login or sign in  Store extra data with account 9
  • 10.
    PUZZLES – ACCOUNT(2)  Checklist:  Implement Authenticator  Implement Authentication Service  Define configuration in XML 10
  • 11.
    PUZZLES – ACCOUNT(3)  Checklist:  Register Authentication Service in AndroidManifest  Add permissions  APIs to use:  android.accounts.AccountManager to work with accounts  android.accounts.Account to store credentials 11
  • 12.
    PUZZLES – CONTENTPROVIDER (1)  Key features  Heart of DAO  Resource effective  Cursor, resource-effective scalability  Power of Joins  Built-in ListView refresh via ContentObserver & Cursor  Sync related  Acts as mediator for sync and UI layers  Supports automatic delta upload sync  NOTE: Can be fake one, but you’ll lose a lot of magic  12
  • 13.
    PUZZLES – CONTENTPROVIDER (2)  Minimal implementation based on https://github.com/novoda/SQLiteProvider  Supports all CRUD  Supports DB versioning  And even more… 13
  • 14.
    PUZZLES – SYNCADAPTER(1)  Key features  Plugin to Android SyncManager  SyncManager manages queue of execution  Adapter is executed in background thread & when network is available  Sync related  Scheduling & automated mode  Respects system settings  Can be overridden by manual request  Partial sync supported  Upload only local delta  Any other criteria (Bundle) 14
  • 15.
    PUZZLES – SYNCADAPTER(2)  Checklist  Implement SyncAdapter class  Implement Sync Service  Define configuration xml 15
  • 16.
    PUZZLES – SYNCADAPTER(3)  Checklist  Register Sync Service in AndroidManifest  Add permissions  APIs to use  android.content.ContentResolver to reach SyncManager programmatically 16
  • 17.
    PUZZLES – SYNCADAPTER(4)  How to trigger sync?  Upload delta  ContentResolver.notifyChange  Be aware of cyclic calls if used in ContentProvider  Scheduling  ContentResolver.addPeriodicSync  Automated  ContentResolver.setSyncAutomatically  Manual  ContentResolver.requestSync  Manual forced  ContentResolver.requestSync  Pass SYNC_EXTRAS_MANUAL in bundle 17
  • 18.
    THE BIG PICTURE– OPTIONAL PUZZLES 18
  • 19.
    PROS & CONS Pros  Simplify server interaction  A lot of work handled by framework  Resource effective – the Android way  Cons  A lot of puzzles, hard to start…  Lack of documentation  Error handling  Bugs  19
  • 20.
  • 21.
    DOCUMENTATION  Official docs Great tutorial added in August ’13 http://developer.android.com/training/sync- adapters/index.html + code sample  Stackoverflow, use tags below  [android-syncadapter]  [sync] + [android] 21
  • 22.
    BONUS: CODE SAMPLES Repo on GitHub https://github.com/springbyexample/spring-by- example  Toy client-server app (both parties supplied )  Shows all puzzles implemented:  Accounts – fake one, there is no authentication  Content Provider based on novoda library  SyncAdapter logics  All wrapping XML configuration  Built via Maven  Follow README and be happy   Got questions?  a.kaverin@gmail.com 22
  • 23.
    Q & A Thanksfor your attention!23