23
DEVELOPING ANDROID CLIENT APPS VIA SYNCADAPTER Anatoliy Kaverin Lohika @ 2013

Developing Android Client Apps via SyncAdapter

Embed Size (px)

DESCRIPTION

I would like to share an experience of using the recommended Android way to synchronize your application cache. SyncAdapter is very powerful and at the same time seems to be complex. Along with features & functionality overview I've provided some leads to start using it right away with sample code.

Citation preview

Page 1: Developing Android Client Apps via SyncAdapter

DEVELOPING ANDROID CLIENT APPS VIA SYNCADAPTER

Anatoliy Kaverin

Lohika @ 2013

Page 2: Developing Android Client Apps via SyncAdapter

SESSION AGENDA

Why? SyncAdapter!? LOLWUT? The big picture Puzzles Does anybody use it? Code samples, documentation Q&A

2

Page 3: Developing Android Client Apps via SyncAdapter

IMAGINE… SIMPLE CLIENT-SERVER APP

3

Page 4: Developing Android Client Apps via SyncAdapter

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

Page 5: Developing Android Client Apps via SyncAdapter

SYNCADAPTER!? LOLWUT?

Well, you probably use it everyday…

5

Page 6: Developing Android Client Apps via SyncAdapter

THE BIG PICTURE – BASIC FLOW

6

Page 7: Developing Android Client Apps via SyncAdapter

THE BIG PICTURE – PUZZLES

7

Page 8: Developing Android Client Apps via SyncAdapter

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

Page 9: Developing Android Client Apps via SyncAdapter

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

Page 10: Developing Android Client Apps via SyncAdapter

PUZZLES – ACCOUNT (2)

Checklist: Implement Authenticator

Implement Authentication Service

Define configuration in XML

10

Page 11: Developing Android Client Apps via SyncAdapter

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

Page 12: Developing Android Client Apps via SyncAdapter

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

Page 13: Developing Android Client Apps via SyncAdapter

PUZZLES – CONTENT PROVIDER (2)

Minimal implementation based on https://github.com/novoda/SQLiteProvider

Supports all CRUD Supports DB versioning And even more…

13

Page 14: Developing Android Client Apps via SyncAdapter

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

Page 15: Developing Android Client Apps via SyncAdapter

PUZZLES – SYNCADAPTER (2)

Checklist Implement SyncAdapter class

Implement Sync Service

Define configuration xml

15

Page 16: Developing Android Client Apps via SyncAdapter

PUZZLES – SYNCADAPTER (3)

Checklist Register Sync Service in AndroidManifest

Add permissions APIs to use

android.content.ContentResolver to reach SyncManager programmatically 16

Page 17: Developing Android Client Apps via SyncAdapter

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

Page 18: Developing Android Client Apps via SyncAdapter

THE BIG PICTURE – OPTIONAL PUZZLES

18

Page 19: Developing Android Client Apps via SyncAdapter

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

Page 20: Developing Android Client Apps via SyncAdapter

DO

ES

AN

YB

OD

Y U

SE IT

?

20

Page 21: Developing Android Client Apps via SyncAdapter

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

Page 22: Developing Android Client Apps via SyncAdapter

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? [email protected]

22

Page 23: Developing Android Client Apps via SyncAdapter

Q & AThanks for your attention!23