36

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

Embed Size (px)

Citation preview

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

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

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

¿QUIENES SOMOS?

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

¡El Problema!

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

CONFIGURAR Y DISTRIBUIR PARA

DISTINTOS AMBIENTES

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

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

Ambientes de desarrollo

Development

QA

Production

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

Configuración en Android Studio

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

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

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

Configuración en Android Studio

app/build.gradle

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

Configuración iOS

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

Configuración iOS

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

Configuración iOS

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

Distribución

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

Distribución para testers

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

¿PREGUNTAS?

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

¡El Otro Problema!

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

MANEJAR CACHE Y SINCRONIZACIÓN DE

DATA

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

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

Caché y sincronización

Server

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

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

¿Cómo afrontarlo en Android?

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

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://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

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://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://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

¿Y en iOS?

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

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://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://www.objc.io/issues/10-syncing-data/data-synchronization/

AFNetworking

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

Repository Pattern

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

¿PREGUNTAS? NO? NO? YA GO

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

santexgroup.com