mobile development across different platforms @ immobilienscout24
TRANSCRIPT
Mobile Development across Different Platforms
www.immobilienscout24.de
Berlin | 13.02.2012 | Hasan Hoşgel & Thomas Kummert
About us ...
Hasan Hoşgel, @alosdev
Senior Developer
Mobile enthusiast, Man of action
About us ...
Thomas Kummert, @kummibaer
Developer
Pragmatic developer
| Titel der Präsentation | Autor der Präsentation
Seite 4
ImmobilienScout24 Germany‘s leading real-estate portal
550 employees, 170 in the IT
| Titel der Präsentation | Autor der Präsentation
Seite 5
ImmobilienScout24 Germany‘s leading real-estate portal
550 employees, 160 in the IT
> 6 Million unique users > 2 Billion PI > 180 Million Expose views ~ 1.5 Million active listings > 110,000 Vendors ... per month
| Titel der Präsentation | Autor der Präsentation
Seite 6
ImmobilienScout24 Germany‘s leading real-estate portal
550 employees, 160 in the IT
2 datacenter ~100 physical ~800 virtual ... machines
> 6 Million unique users > 2 Billion PI > 180 Million Expose views ~ 1.5 Million active listings > 110,000 Vendors ... per month
The Creators
2010-08 (no team): 1 x developer
2012-02 (2 teams): 7 x developer 2 x QA-engineer 2 x product manager 1 x designer
The Creators
11 applications 1 Mobile site > 2.2 Mio Downloads > 7.8 Mio Visits > 20% mobile traffic
2010-08 (no team): 1 x developer
2012-02 (2 teams): 7 x developer 2 x QA-engineer 2 x product manager 1 x designer
The Creators
2010-08 (no team): 1 x developer
2012-02 (2 teams): 7 x developer 2 x QA-engineer 2 x product manager 1 x designer
Agile development Scrum/ Kanban
11 applications 1 Mobile site > 2.2 Mio Downloads > 7.8 Mio Visits > 20% mobile traffic
Native, hybrid or webapp?
http://www.flickr.com/photos/y_i/2330044065/sizes/l/in/photostream/
Native, hybrid or webapp?
http://www.flickr.com/photos/y_i/2330044065/sizes/l/in/photostream/
Depends on application, environment and user needs
Native, hybrid or webapp?
http://www.flickr.com/photos/y_i/2330044065/sizes/l/in/photostream/
Depends on application, environment and user needs
- User-interface - Responsive design
Native, hybrid or webapp?
http://www.flickr.com/photos/y_i/2330044065/sizes/l/in/photostream/
Depends on application, environment and user needs
- User-interface - Responsive design
- Hardware - Device features - Security
Native, hybrid or webapp?
http://www.flickr.com/photos/y_i/2330044065/sizes/l/in/photostream/
Depends on application, environment and user needs
- User-interface - Responsive design
- Hardware - Device features - Security
- External resources - Performance
Native, hybrid or webapp?
http://www.flickr.com/photos/y_i/2330044065/sizes/l/in/photostream/
Depends on application, environment and user needs
- User-interface - Responsive design
- Hardware - Device features - Security
- Development - Technologies - Knowledge
- External resources - Performance
Native, hybrid or webapp?
http://www.flickr.com/photos/y_i/2330044065/sizes/l/in/photostream/
Depends on application and user needs
- User-interface - Responsive design
- Hardware - Device features - Security
- Development - Technologies - Knowledge
- External resources - Performance
There is no „the right“ solution to fit every demand.
Native, hybrid or webapp?
http://www.flickr.com/photos/y_i/2330044065/sizes/l/in/photostream/
Depends on application and user needs
- User-interface - Responsive design
- Hardware - Device features - Security
- Development - Technologies - Knowledge
- External resources - Performance
There is no „the right“ Solution to fit every demand.
Native, hybrid or webapp?
Android & IOS will be supported Two Mainstream applications è native
Other applications can choose
Future: Mobile website with responsive Design & HTML 5
Infrastructure
http://www.flickr.com/photos/theplanetdotcom/4878805439/in/photostream/
Infrastructure
CI-Server: > SSD > Ubuntu 32-Bit > Jenkins > ADT
http://www.flickr.com/photos/theplanetdotcom/4878805439/in/photostream/
Infrastructure
CI-Server: > SSD > Ubuntu 32-Bit > Jenkins > ADT
Repository: > Nexus
http://www.flickr.com/photos/theplanetdotcom/4878805439/in/photostream/
Infrastructure
CI-Server: > SSD > Ubuntu 32-Bit > Jenkins > ADT
Repository: > Nexus
VCS: > SVN
http://www.flickr.com/photos/theplanetdotcom/4878805439/in/photostream/
Infrastructure
CI-Server: > SSD > Ubuntu 32-Bit > Jenkins > ADT
Repository: > Nexus
VCS: > SVN
Errorreporting: > Hockeyapp
http://www.flickr.com/photos/theplanetdotcom/4878805439/in/photostream/
Infrastructure
CI-Server: > SSD > Ubuntu 32-Bit > Jenkins > ADT
Repository: > Nexus
VCS: > SVN
~20 Android devices
Errorreporting: > Hockeyapp
http://www.flickr.com/photos/theplanetdotcom/4878805439/in/photostream/
Infrastructure
CI-Server: > SSD > Ubuntu 32-Bit > Jenkins > ADT
Repository: > Nexus
VCS: > SVN
~20 Android devices
Errorreporting: > Hockeyapp
Build-Tools: > Maven > Maven-Android-Plugin > Android-Jenkins-Plugin > Eclipse + ADT
http://www.flickr.com/photos/theplanetdotcom/4878805439/in/photostream/
Architecture
http://www.flickr.com/photos/designandtechnologydepartment/4029381213/in/photostream/
UI
services
filesystem sensors database network
http://www.flickr.com/photos/designandtechnologydepartment/4029381213/in/photostream/
Exposeview
expose service
database network memory
Architecture example
Used Frameworks
http://www.flickr.com/photos/designandtechnologydepartment/4029381213/in/photostream/
Used Frameworks
http://www.flickr.com/photos/designandtechnologydepartment/4029381213/in/photostream/
Signpost (OAuth client)
Used Frameworks
http://www.flickr.com/photos/designandtechnologydepartment/4029381213/in/photostream/
Signpost (OAuth client)
RoboGuice (dependency
injection)
Used Frameworks
http://www.flickr.com/photos/designandtechnologydepartment/4029381213/in/photostream/
Signpost (OAuth client)
RoboGuice (dependency
injection)
JSoup (HTML parser)
Used Frameworks
http://www.flickr.com/photos/designandtechnologydepartment/4029381213/in/photostream/
Signpost (OAuth client)
RoboGuice (dependency
injection)
JSoup (HTML parser)
Robotium (like selenium/
webdriver)
Backend API
http://www.flickr.com/photos/roll_initiative/3305000778/in/photostream/
Backend API
http://www.flickr.com/photos/roll_initiative/3305000778/in/photostream/
Best Cross-Platform approach:
create an API
Backend API
http://www.flickr.com/photos/roll_initiative/3305000778/in/photostream/
Best Cross-Platform approach:
create an API
Rest-API resource oriented
Backend API
http://www.flickr.com/photos/roll_initiative/3305000778/in/photostream/
Rest-API resource oriented
Json/ XML
Best Cross-Platform approach:
create an API
Backend API
http://www.flickr.com/photos/roll_initiative/3305000778/in/photostream/
Rest-API resource oriented
Json/ XML „eat your own
dog food“
Best Cross-Platform approach:
create an API
Backend API
http://www.flickr.com/photos/roll_initiative/3305000778/in/photostream/
Best Cross-Platform approach:
create an API
Rest-API resource oriented
Json/ XML „eat your own
dog food“
Don‘t create client dependent APIs
Backend API – Best Practices
http://www.flickr.com/photos/familymwr/4927926523/in/photostream/
Backend API – Best Practices
http://www.flickr.com/photos/familymwr/4927926523/in/photostream/
versioning
Backend API – Best Practices
http://www.flickr.com/photos/familymwr/4927926523/in/photostream/
versioning downward compatible
Backend API – Best Practices
http://www.flickr.com/photos/familymwr/4927926523/in/photostream/
versioning downward compatible
OAuth support
Backend API – Best Practices
http://www.flickr.com/photos/familymwr/4927926523/in/photostream/
versioning downward compatible
communicate: upward compatibility
OAuth support
Backend API – Best Practices
http://www.flickr.com/photos/familymwr/4927926523/in/photostream/
versioning downward compatible
communicate: upward compatibility
different views
OAuth support
Backend API – Best Practices
http://www.flickr.com/photos/familymwr/4927926523/in/photostream/
versioning downward compatible
communicate: upward compatibility
different views
addable features
OAuth support
Backend API – Best Practices
http://www.flickr.com/photos/familymwr/4927926523/in/photostream/
versioning downward compatible
communicate: upward compatibility
different views
addable features
OAuth support
help caching: Modified-Since- &
Etag-Header
Backend API – Best Practices
http://www.flickr.com/photos/familymwr/4927926523/in/photostream/
versioning downward compatible
communicate: upward compatibility
different views
addable features
OAuth support
help caching: Modified-Since- &
Etag-Header
offer playground
Android Best Practices
Android Best Practices
test
Android Best Practices
test test
Android Best Practices
test test test
Android Best Practices
test test test on all emulators
Android Best Practices
test test test on all emulators
Android Best Practices
test test test on all emulators
available devices
Android Best Practices
test test test on all emulators
Don‘t recycle images >Gingerbread
è process‘ crash
available devices
Android Best Practices
test test test
on all emulators
Don‘t recycle images >Gingerbread
è process‘ crash test test test on all emulators
available devices Remove dialogues in onSavedInstanceState
Android Best Practices
Don‘t recycle images >Gingerbread
è process‘ crash
Don‘t use message.what=1006 on
LG Smartphones è ClassCastException
test test test
on all emulators
test test test on all emulators
available devices Remove dialogues in onSavedInstanceState
Android Best Practices
Don‘t recycle images >Gingerbread
è process‘ crash
Don‘t use message.what=1006 on
LG Smartphones è ClassCastException
Json streamer vs. parser
test test test
on all emulators
test test test on all emulators
available devices Remove dialogues in onSavedInstanceState
Android Best Practices
Don‘t recycle images >Gingerbread
è process‘ crash
Don‘t use message.what=1006 on
LG Smartphones è ClassCastException
Json streamer vs. parser AsyncTask vs. Handler
test test test
on all emulators
test test test on all emulators
available devices Remove dialogues in onSavedInstanceState
Android Best Practices
offer StreetView, if possible: 1. create WebView 2. add JavascriptInterface 3. load data with base URL (maps.js & StreetViewService) 4. Start Intent for StreetView, if panorama exists! http://stackoverflow.com/a/4747663/495712
Android Best Practices
offer StreetView, if possible: 1. create WebView 2. add JavascriptInterface 3. load data with base URL (maps.js & StreetViewService) 4. Start Intent for StreetView, if panorama exists! http://stackoverflow.com/a/4747663/495712
Attention: A lot of best practices
doesn‘t work on Honeycomb & higher
http://www.flickr.com/photos/ponchopenguin/3262869038/sizes/l/in/photostream/
Forecast
http://www.flickr.com/photos/ponchopenguin/3262869038/sizes/l/in/photostream/
Forecast
using Git
http://www.flickr.com/photos/ponchopenguin/3262869038/sizes/l/in/photostream/
Forecast
using Git
Widget
http://www.flickr.com/photos/ponchopenguin/3262869038/sizes/l/in/photostream/
Forecast
using Git
Widget extend IS24-API SDK
http://www.flickr.com/photos/ponchopenguin/3262869038/sizes/l/in/photostream/
Forecast
using Git
Widget using new Google APIs
extend IS24-API SDK
http://www.flickr.com/photos/ponchopenguin/3262869038/sizes/l/in/photostream/
Forecast
using Git tablet layout
Widget extend IS24-API SDK
using new Google APIs
http://www.flickr.com/photos/ponchopenguin/3262869038/sizes/l/in/photostream/
Forecast
using Git tablet layout Google TV
layout
Widget extend IS24-API SDK
using new Google APIs
http://www.flickr.com/photos/ponchopenguin/3262869038/sizes/l/in/photostream/
Forecast
using Git
code coverage
tablet layout Google TV
layout
Widget extend IS24-API SDK
using new Google APIs
Thanks for your attention! Questions?
http://www.flickr.com/photos/peterjlambert/97671748/sizes/o/in/photostream/