Tech Meetup: How to solve 2 common problems in Android & iOS
-
Upload
santex-group -
Category
Software
-
view
188 -
download
1
Transcript of Tech Meetup: How to solve 2 common problems in Android & iOS
![Page 1: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/1.jpg)
![Page 2: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/2.jpg)
CÉSAR YNGA (ANDROID) Y RICARDO HERRERA (iOS)
COMO SOLUCIONAR
EN ANDROID
2 PROBLEMASCOMUNES
Y iOS
![Page 3: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/3.jpg)
AGENDA1.Introducción
2.Configurar y distribuir para distintos ambientes
3.Manejar cache y sincronización de data
![Page 4: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/4.jpg)
¿QUIENES SOMOS?
![Page 5: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/5.jpg)
¡El Problema!
![Page 6: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/6.jpg)
CONFIGURAR Y DISTRIBUIR PARA
DISTINTOS AMBIENTES
![Page 7: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/7.jpg)
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.
![Page 8: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/8.jpg)
Ambientes de desarrollo
Development
QA
Production
![Page 9: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/9.jpg)
Configuración en Android Studio
![Page 10: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/10.jpg)
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
+
![Page 11: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/11.jpg)
Configuración en Android Studio
src/main/
src/<buildType>/
src/<productFlavor>/
src/<productFlavorBuildType>/
![Page 12: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/12.jpg)
Configuración en Android Studio
app/build.gradle
![Page 13: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/13.jpg)
Configuración iOS
![Page 14: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/14.jpg)
Configuración iOS
![Page 15: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/15.jpg)
Configuración iOS
![Page 16: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/16.jpg)
Distribución
![Page 17: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/17.jpg)
Distribución para testers
![Page 18: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/18.jpg)
¿PREGUNTAS?
![Page 19: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/19.jpg)
¡El Otro Problema!
![Page 20: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/20.jpg)
MANEJAR CACHE Y SINCRONIZACIÓN DE
DATA
![Page 21: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/21.jpg)
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.
![Page 22: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/22.jpg)
Caché y sincronización
Server
![Page 23: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/23.jpg)
Caché y Sincronización de Data
TiposSincronización
● Sincronización asíncrona.● Sincronización sincronico.
Almacenamiento de data● Almacenamiento parcial● Almacenamiento total
https://www.dre.vanderbilt.edu/~schmidt/PDF/PatternPaperv11.pdf
![Page 24: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/24.jpg)
¿Cómo afrontarlo en Android?
![Page 25: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/25.jpg)
http://fernandocejas.com/2015/07/18/architecting-android-the-evolution
Clean Architecture
![Page 26: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/26.jpg)
https://github.com/ReactiveX/RxJavahttps://github.com/ReactiveX/RxAndroid
RxJava
RxAndroid
Reactive Programming
![Page 27: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/27.jpg)
RxCache
Retrofit
http://square.github.io/retrofithttps://github.com/VictorAlbertos/RxCache
Repository Pattern
![Page 28: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/28.jpg)
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);}
![Page 29: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/29.jpg)
https://github.com/VictorAlbertos/RxCache
RxCachepublic 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(""))); }}
![Page 30: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/30.jpg)
¿Y en iOS?
![Page 31: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/31.jpg)
https://www.objc.io/issues/10-syncing-data/data-synchronization/
Asynchronous Client-Server
![Page 32: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/32.jpg)
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/Concepts/CachePolicies.html
Apple cache Policy
● NSURLRequestUseProtocolCachePolicy,● NSURLRequestReloadIgnoringCacheData, ● NSURLRequestReturnCacheDataElseLoad,● NSURLRequestReturnCacheDataDontLoad.
![Page 33: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/33.jpg)
https://www.objc.io/issues/10-syncing-data/data-synchronization/
AFNetworking
![Page 34: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/34.jpg)
Repository Pattern
![Page 35: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/35.jpg)
¿PREGUNTAS? NO? NO? YA GO
![Page 36: Tech Meetup: How to solve 2 common problems in Android & iOS](https://reader036.fdocuments.us/reader036/viewer/2022062412/58e7a97f1a28ab847a8b5dc5/html5/thumbnails/36.jpg)
santexgroup.com