Date post: | 29-Nov-2014 |
Category: |
Technology |
Upload: | alex-tumanoff |
View: | 6,321 times |
Download: | 4 times |
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
DO
ES A
NY
BO
DY
US
E IT
?
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?
22
Q & A Thanks for your attention! 23