Transcript
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


Top Related