Upload
aditium
View
776
Download
1
Embed Size (px)
DESCRIPTION
Slides for droidcon spain 2014.
Citation preview
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