R.A.P.
Rely on Android Platform
DISCLAIMER
@ibai_iturricha
● NFC
● Android
● Django
CTO en Aditium
Why should I
RAP?
My app …
manages user accounts
loads/pulls data from/to server
works without connection
and ...
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
Sync
Manager/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
Sync
Manager
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
PerformSync
Server push sync
Your server
AbstractThreadedSyncAdapter
Content provider
“Content providers manage access
to a structured set of data”
Android developers
Android Platform
Content
Resolver
Your App
ContentProvider
SQLiteOpenHelper
SQLite
Android Platform
Content
Resolver
Your App
ContentProvider
SQLiteOpenHelper
SQLite
Your app
Query Insert
Delete
Update
Bulk
ContentProvider
SQLiteOpenHelper
Loaders
“Loaders make it easy to asynchronously
load data in an activity or fragment”
Android developers
Android Platform
Loader
Manager
Your App
ContentProvider
SQLiteOpenHelper
SQLite
Fragment | Activity
implements 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

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