R.A.P. (Rely on Android Platform)

Post on 02-Jul-2015

776 views 1 download

description

Slides for droidcon spain 2014.

transcript

R.A.P.Rely on Android Platform

DISCLAIMER

@ibai_iturricha

● NFC● Android● Django

CTO en Aditium

Why should I RAP?

My app …manages user accountsloads/pulls data from/to serverworks without connectionand ...

I want to be a winner!

Decouple authentication from business logic

Isolate synchronization strategy

Offline first

Modular UI Components

http://rapgenius.com/discussions/12681-New-version-of-the-last-supper

Time to RAP homies!

Android Platform crew

Account Manager manages user credentials

Sync Manager keeps data up to date

Content Provider stores structured data

Loaders make data available

Account Manager

“Account Manager provides access to a centralized registry of the user's online accounts”

Android developers

Android Platform

Account Manager

Your App

Service

AbstractAccountAuthenticator

AccountAuthenticatorActivity

Android Platform

Account Manager

Your App

Service

AbstractAccountAuthenticator

AccountAuthenticatorActivity

Your app

Add account Get auhtToken

Delete account

AbstractAccountAuthenticator

SyncManager/Adapter

“The ability of the system to help you synchronize remote and local content”

Virgil Dobjanschi (Google IO 201)

App 1 App 2 App 3 App 4

Perform a sync → Network request, parceling, DB operations, etc...

Sepherd wanted!

Sync Manager Framework

App 1 App 2 App 3 App 4

App 1 App 3 App 4 App 2

Android Platform

SyncManager

Your App

Service

AbstractThreadedSyncAdapter

Synchronization Strategy Selection● On demand

○ E.g. User press button ‘refresh’● Regular interval

○ E.g. Each hour● When network connection available

○ E.g. Sync automatically when connected● When device data changes

○ E.g. Every time my database changes● When server data changes

○ E.g. Every push message received

Android Platform

Sync Manager

Your App

Service

AbstractThreadedSyncAdapter

Your app

PerformSync

On demand example

Android Platform

Sync Manager

Your App

Service

AbstractThreadedSyncAdapter

Your app

PerformSyncServer push syncYour server

AbstractThreadedSyncAdapter

Content provider

“Content providers manage access to a structured set of data”

Android developers

Android Platform

ContentResolver

Your App

ContentProvider

SQLiteOpenHelper

SQLite

Android Platform

ContentResolver

Your App

ContentProvider

SQLiteOpenHelper

SQLite

Your app

Query InsertDelete

Update

Bulk

ContentProvider

SQLiteOpenHelper

Loaders

“Loaders make it easy to asynchronously load data in an activity or fragment”

Android developers

Android Platform

LoaderManager

Your App

ContentProvider

SQLiteOpenHelper

SQLite

Fragment | Activityimplements LoaderCallbacks<Cursor>

Query

UI thread Background thread

1. getLoaderManager().initLoader(...)

2. onCreateLoader(...)query specific code

4. onLoadFinished(...)swap adapter

3. Execute query on DB

LoaderManager.LoaderCallbacks<Cursor>

Conclusion

Your app

Account Provider Sync Model

Android Platform

Activities & Fragments & Loaders

Demo time

Server side

PLAIN API

POST api/v1/account/new/ Creates new account and returns auth_token

POST api/v1/account/login/ Validates username & password tuple and returns auth_token

AUTHORIZED API

GET api/v1/spots/ Returns spots on the database→ auth_token→ position→ limit