SlideShare una empresa de Scribd logo
1 de 36
CÉSAR YNGA (ANDROID) Y
RICARDO HERRERA (iOS)
COMO SOLUCIONAR
EN ANDROID
2 PROBLEMAS
COMUNES
Y iOS
AGENDA
1. Introducción
2. Configurar y distribuir para distintos ambientes
3. Manejar cache y sincronización de data
¿QUIENES SOMOS?
¡El Problema!
CONFIGURAR Y
DISTRIBUIR PARA
DISTINTOS AMBIENTES
Diferentes
Ambientes de
desarrollo
¿Por
qué?
● Permitir trabajo en paralelo de desarrollo y
pruebas.
● Ahorra tiempo en configuraciones posteriores.
● Facilitar los cambios grandes para nuevos
requerimientos.
● Diferenciación de errores (data, casos
especiales, etc).
● No malograr la data de pruebas durante el
desarrollo.
● Evitar problemas de pruebas en producción.
● Distribución para grupos específicos de
testers.
Ambientes de desarrollo
Development
QA
Production
Configuración en Android
Studio
Build types Product flavors
https://developer.android.com/studio/build/index.html
Build variant
● Debug
● Release
● Free
● Paid
● Develop
● QA
● Staging
● Production
● Free Debug
● Free Release
● Paid Debug
● Paid Release
+
Configuración en Android Studio
src/main/
src/<buildType>/
src/<productFlavor>/
src/<productFlavorBuildType>/
Configuración en Android Studio
app/build.gradle
Configuración iOS
Configuración iOS
Configuración iOS
Distribución
Distribución para testers
¿PREGUNTAS?
¡El Otro Problema!
MANEJAR CACHE Y
SINCRONIZACIÓN DE
DATA
Caché y
Sincronización
de Data
¿Por
qué?
● Mejora la experiencia de usuario.
● Permite tener la data actualizada.
● Puede optimizar el uso el uso de internet para
la aplicación.
● Permite información en modo offline.
● Permite realizar procesos en modo offline.
Caché y sincronización
Server
Caché y
Sincronización
de Data
Tipos
Sincronización
● Sincronización asíncrona.
● Sincronización sincronico.
Almacenamiento de data
● Almacenamiento parcial
● Almacenamiento total
https://www.dre.vanderbilt.edu/~schmidt/PDF/PatternPaperv11.pdf
¿Cómo afrontarlo en
Android?
http://fernandocejas.com/2015/07/18/architecting-android-the-evolution
Clean Architecture
https://github.com/ReactiveX/RxJava
https://github.com/ReactiveX/RxAndroid
RxJava
RxAndroid
Reactive Programming
RxCache
Retrofit
http://square.github.io/retrofit
https://github.com/VictorAlbertos/RxCache
Repository Pattern
https://github.com/VictorAlbertos/RxCache
RxCache
interface Providers {
Observable<List<Mock>> getMocks(Observable<List<Mock>> oMocks);
@LifeCache(duration = 5, timeUnit = TimeUnit.MINUTES)
Observable<List<Mock>> getMocksWith5MinutesLifeTime(Observable<List<Mock>> oMocks);
Observable<List<Mock>> getMocksEvictProvider(Observable<List<Mock>> oMocks, EvictProvider evictProvider);
Observable<List<Mock>> getMocksPaginate(Observable<List<Mock>> oMocks, DynamicKey page);
Observable<List<Mock>> getMocksPaginateEvictingPerPage(Observable<List<Mock>> oMocks, DynamicKey page,
EvictDynamicKey evictPage);
Observable<List<Mock>> getMocksPaginateWithFiltersEvictingPerFilter(Observable<List<Mock>> oMocks, DynamicKeyGroup
filterPage, EvictDynamicKey evictFilter);
}
https://github.com/VictorAlbertos/RxCache
RxCache
public class Repository {
private final Providers providers;
public Repository(File cacheDir) {
providers = new RxCache.Builder()
.persistence(cacheDir, new GsonSpeaker())
.using(Providers.class);
}
public Observable<List<Mock>> getMocks(final boolean update) {
return providers.getMocksEvictProvider(getExpensiveMocks(), new EvictProvider(update));
}
public Observable<List<Mock>> getMocksPaginate(final int page, final boolean update) {
return providers.getMocksPaginateEvictingPerPage(getExpensiveMocks(), new DynamicKey(page), new
EvictDynamicKey(update));
}
public Observable<List<Mock>> getMocksWithFiltersPaginate(final String filter, final int page, final boolean updateFilter)
{
return providers.getMocksPaginateWithFiltersEvictingPerFilter(getExpensiveMocks(), new DynamicKeyGroup(filter, page),
new EvictDynamicKey(updateFilter));
}
//In a real use case, here is when you build your observable with the expensive operation.
//Or if you are making http calls you can use Retrofit to get it out of the box.
private Observable<List<Mock>> getExpensiveMocks() {
return Observable.just(Arrays.asList(new Mock("")));
}
}
¿Y en iOS?
https://www.objc.io/issues/10-syncing-data/data-synchronization/
Asynchronous Client-Server
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadin
gSystem/Concepts/CachePolicies.html
Apple cache Policy
● NSURLRequestUseProtocolCachePolicy,
● NSURLRequestReloadIgnoringCacheData,
● NSURLRequestReturnCacheDataElseLoad,
● NSURLRequestReturnCacheDataDontLoad.
https://www.objc.io/issues/10-syncing-data/data-synchronization/
AFNetworking
Repository Pattern
¿PREGUNTAS? NO? NO?
YA GO
santexgroup.com

Más contenido relacionado

La actualidad más candente

Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...César Hernández
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015 Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015 César Hernández
 
Curso node.js
Curso node.js Curso node.js
Curso node.js Redradix
 

La actualidad más candente (7)

Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015 Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
 
Grails en SG08
Grails en SG08Grails en SG08
Grails en SG08
 
Curso node.js
Curso node.js Curso node.js
Curso node.js
 
Introduccion a Node.js
Introduccion a Node.jsIntroduccion a Node.js
Introduccion a Node.js
 
Skipfish
SkipfishSkipfish
Skipfish
 
Skipfish
Skipfish Skipfish
Skipfish
 

Similar a Tech Meetup: How to solve 2 common problems in Android & iOS

Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoManuel Carrasco Moñino
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Fernando Petrola
 
Seminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightSeminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightParadigma Digital
 
Taller introducción Java EE 7 @UAPA
Taller introducción Java EE 7  @UAPATaller introducción Java EE 7  @UAPA
Taller introducción Java EE 7 @UAPAEudris Cabrera
 
Java para android developers
Java para android developersJava para android developers
Java para android developersjose diaz
 
[ES] Introducción a Java EE 7
[ES] Introducción a Java EE 7[ES] Introducción a Java EE 7
[ES] Introducción a Java EE 7Eudris Cabrera
 
Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmasZuriel Diaz
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualizaciónMarcelo Ochoa
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
BBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOpsBBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOpsErnesto Anaya
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJSBEEVA_es
 

Similar a Tech Meetup: How to solve 2 common problems in Android & iOS (20)

Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Aprendiendo GWT
Aprendiendo GWTAprendiendo GWT
Aprendiendo GWT
 
Gwt I - entendiendo gwt
Gwt I - entendiendo gwtGwt I - entendiendo gwt
Gwt I - entendiendo gwt
 
Arquitectura
Arquitectura Arquitectura
Arquitectura
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
Seminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightSeminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring Insight
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
Taller introducción Java EE 7 @UAPA
Taller introducción Java EE 7  @UAPATaller introducción Java EE 7  @UAPA
Taller introducción Java EE 7 @UAPA
 
ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
Java para android developers
Java para android developersJava para android developers
Java para android developers
 
[ES] Introducción a Java EE 7
[ES] Introducción a Java EE 7[ES] Introducción a Java EE 7
[ES] Introducción a Java EE 7
 
Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmas
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualización
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
BBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOpsBBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOps
 
Testing Ruby on Rails (spanish)
Testing Ruby on Rails (spanish)Testing Ruby on Rails (spanish)
Testing Ruby on Rails (spanish)
 
202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy
 
Intel
IntelIntel
Intel
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 

Más de Santex Group

Entender React Native
Entender React NativeEntender React Native
Entender React NativeSantex Group
 
Server side development using Swift and Vapor
Server side development using Swift and VaporServer side development using Swift and Vapor
Server side development using Swift and VaporSantex Group
 
Tech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttlerTech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttlerSantex Group
 
Tech Meetup: Be reactive with Android
Tech Meetup: Be reactive with AndroidTech Meetup: Be reactive with Android
Tech Meetup: Be reactive with AndroidSantex Group
 
Tech Meetup: Gamificar con Agilidad
Tech Meetup: Gamificar con AgilidadTech Meetup: Gamificar con Agilidad
Tech Meetup: Gamificar con AgilidadSantex Group
 
Tech Meetup: How to build a Rest API in Java
Tech Meetup: How to build a Rest API in JavaTech Meetup: How to build a Rest API in Java
Tech Meetup: How to build a Rest API in JavaSantex Group
 
TECH MEETUP - From the groud up with GIT
TECH MEETUP - From the groud up with GITTECH MEETUP - From the groud up with GIT
TECH MEETUP - From the groud up with GITSantex Group
 
Tech MeetUp: Agile Methodologies in eCommerce
Tech MeetUp: Agile Methodologies in eCommerceTech MeetUp: Agile Methodologies in eCommerce
Tech MeetUp: Agile Methodologies in eCommerceSantex Group
 
Meetup: Mobile Automation
Meetup: Mobile AutomationMeetup: Mobile Automation
Meetup: Mobile AutomationSantex Group
 
User Stories Do's and Dont's
User Stories Do's and Dont'sUser Stories Do's and Dont's
User Stories Do's and Dont'sSantex Group
 
E commerce done the right way: Magento!
E commerce done the right way: Magento!E commerce done the right way: Magento!
E commerce done the right way: Magento!Santex Group
 
Tech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceTech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceSantex Group
 
Tech Meetup - Agile testing vs Testing in Agile
Tech Meetup - Agile testing vs Testing in AgileTech Meetup - Agile testing vs Testing in Agile
Tech Meetup - Agile testing vs Testing in AgileSantex Group
 

Más de Santex Group (13)

Entender React Native
Entender React NativeEntender React Native
Entender React Native
 
Server side development using Swift and Vapor
Server side development using Swift and VaporServer side development using Swift and Vapor
Server side development using Swift and Vapor
 
Tech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttlerTech Meetup: Jenkins, the moody buttler
Tech Meetup: Jenkins, the moody buttler
 
Tech Meetup: Be reactive with Android
Tech Meetup: Be reactive with AndroidTech Meetup: Be reactive with Android
Tech Meetup: Be reactive with Android
 
Tech Meetup: Gamificar con Agilidad
Tech Meetup: Gamificar con AgilidadTech Meetup: Gamificar con Agilidad
Tech Meetup: Gamificar con Agilidad
 
Tech Meetup: How to build a Rest API in Java
Tech Meetup: How to build a Rest API in JavaTech Meetup: How to build a Rest API in Java
Tech Meetup: How to build a Rest API in Java
 
TECH MEETUP - From the groud up with GIT
TECH MEETUP - From the groud up with GITTECH MEETUP - From the groud up with GIT
TECH MEETUP - From the groud up with GIT
 
Tech MeetUp: Agile Methodologies in eCommerce
Tech MeetUp: Agile Methodologies in eCommerceTech MeetUp: Agile Methodologies in eCommerce
Tech MeetUp: Agile Methodologies in eCommerce
 
Meetup: Mobile Automation
Meetup: Mobile AutomationMeetup: Mobile Automation
Meetup: Mobile Automation
 
User Stories Do's and Dont's
User Stories Do's and Dont'sUser Stories Do's and Dont's
User Stories Do's and Dont's
 
E commerce done the right way: Magento!
E commerce done the right way: Magento!E commerce done the right way: Magento!
E commerce done the right way: Magento!
 
Tech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceTech meetup: Web Applications Performance
Tech meetup: Web Applications Performance
 
Tech Meetup - Agile testing vs Testing in Agile
Tech Meetup - Agile testing vs Testing in AgileTech Meetup - Agile testing vs Testing in Agile
Tech Meetup - Agile testing vs Testing in Agile
 

Tech Meetup: How to solve 2 common problems in Android & iOS

Notas del editor

  1. a library for composing asynchronous and event-based programs by using observable sequences
  2. NSURLRequestUseProtocolCachePolicy, NSURLRequestReloadIgnoringCacheData, NSURLRequestReturnCacheDataElseLoad, or NSURLRequestReturnCacheDataDontLoad.