r.a.p. (rely on android platform)
DESCRIPTION
Slides for droidcon spain 2014.TRANSCRIPT
![Page 1: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/1.jpg)
R.A.P.Rely on Android Platform
![Page 2: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/2.jpg)
DISCLAIMER
![Page 3: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/3.jpg)
@ibai_iturricha
● NFC● Android● Django
CTO en Aditium
![Page 4: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/4.jpg)
Why should I RAP?
![Page 5: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/5.jpg)
My app …manages user accountsloads/pulls data from/to serverworks without connectionand ...
![Page 6: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/6.jpg)
I want to be a winner!
![Page 7: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/7.jpg)
Decouple authentication from business logic
![Page 8: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/8.jpg)
Isolate synchronization strategy
![Page 9: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/9.jpg)
Offline first
![Page 10: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/10.jpg)
Modular UI Components
![Page 11: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/11.jpg)
http://rapgenius.com/discussions/12681-New-version-of-the-last-supper
Time to RAP homies!
![Page 12: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/12.jpg)
Android Platform crew
Account Manager manages user credentials
Sync Manager keeps data up to date
Content Provider stores structured data
Loaders make data available
![Page 13: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/13.jpg)
Account Manager
“Account Manager provides access to a centralized registry of the user's online accounts”
Android developers
![Page 14: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/14.jpg)
Android Platform
Account Manager
Your App
Service
AbstractAccountAuthenticator
AccountAuthenticatorActivity
![Page 15: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/15.jpg)
Android Platform
Account Manager
Your App
Service
AbstractAccountAuthenticator
AccountAuthenticatorActivity
Your app
Add account Get auhtToken
Delete account
![Page 16: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/16.jpg)
AbstractAccountAuthenticator
![Page 17: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/17.jpg)
SyncManager/Adapter
“The ability of the system to help you synchronize remote and local content”
Virgil Dobjanschi (Google IO 201)
![Page 18: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/18.jpg)
App 1 App 2 App 3 App 4
Perform a sync → Network request, parceling, DB operations, etc...
![Page 19: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/19.jpg)
Sepherd wanted!
![Page 20: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/20.jpg)
Sync Manager Framework
App 1 App 2 App 3 App 4
App 1 App 3 App 4 App 2
![Page 21: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/21.jpg)
Android Platform
SyncManager
Your App
Service
AbstractThreadedSyncAdapter
![Page 22: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/22.jpg)
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
![Page 23: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/23.jpg)
Android Platform
Sync Manager
Your App
Service
AbstractThreadedSyncAdapter
Your app
PerformSync
On demand example
![Page 24: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/24.jpg)
Android Platform
Sync Manager
Your App
Service
AbstractThreadedSyncAdapter
Your app
PerformSyncServer push syncYour server
![Page 25: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/25.jpg)
AbstractThreadedSyncAdapter
![Page 26: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/26.jpg)
Content provider
“Content providers manage access to a structured set of data”
Android developers
![Page 27: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/27.jpg)
Android Platform
ContentResolver
Your App
ContentProvider
SQLiteOpenHelper
SQLite
![Page 28: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/28.jpg)
Android Platform
ContentResolver
Your App
ContentProvider
SQLiteOpenHelper
SQLite
Your app
Query InsertDelete
Update
Bulk
![Page 29: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/29.jpg)
ContentProvider
![Page 30: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/30.jpg)
SQLiteOpenHelper
![Page 31: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/31.jpg)
Loaders
“Loaders make it easy to asynchronously load data in an activity or fragment”
Android developers
![Page 32: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/32.jpg)
Android Platform
LoaderManager
Your App
ContentProvider
SQLiteOpenHelper
SQLite
Fragment | Activityimplements LoaderCallbacks<Cursor>
Query
![Page 33: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/33.jpg)
UI thread Background thread
1. getLoaderManager().initLoader(...)
2. onCreateLoader(...)query specific code
4. onLoadFinished(...)swap adapter
3. Execute query on DB
![Page 34: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/34.jpg)
LoaderManager.LoaderCallbacks<Cursor>
![Page 35: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/35.jpg)
Conclusion
![Page 36: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/36.jpg)
Your app
Account Provider Sync Model
Android Platform
Activities & Fragments & Loaders
![Page 37: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/37.jpg)
![Page 38: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/38.jpg)
Demo time
![Page 39: R.A.P. (Rely on Android Platform)](https://reader034.vdocuments.mx/reader034/viewer/2022042816/559453ff1a28abd94f8b47f4/html5/thumbnails/39.jpg)
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