SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
El pegamento de las Apps
con Internet
José María Rodríguez Hurtado (@durbon)
Android Engineer
Herramientas para el desarrollo
móvil de apps
José Manuel Pereira García
ANDROID TEAM LEAD
www.jmpergar.com
@JMPergar
jm.pereira.g@gmail.com
+JoseMPereira
José María
Rodríguez Hurtado
ANDROID DEVELOPER
& APIs LOVER
@durbon
chema@durbon.com
++JoséMRodríguez
“Casi cualquier app necesita
una conexión de red
para funcionar”
(incluso la app que ahuyenta los mosquitos)
¿Somos eficientes usando las
peticiones de red en nuestras Apps?
1. Velocidad
2. Errores de red
3. Offline
4. Sincronización
5. Seguridad
Velocidad de conexión
La red (puede ser) lenta
● Ajustes de conexión según si estamos en WiFi, 3G, 4G:
○ Calidad de las imágenes. Solicitar resoluciones, formatos al API
○ Descarga de datos pesados sólo en WiFi. Ajustes de
applicación
○ Usa datos en caché siempre que puedas. Cache-control, ETag
● Usa siempre GZIP, reduce hasta un 70%
Errores de conexión
Gestionar los errores 4xx y 500.
● Enviar errores a Crashlytics o Analytics para analizarlo. ¿fallos de
backend?
● Mensajes informativos, intenta recoger feedback del usuario ¿hay
algo incorrecto?
Errores de conexión
Definir Timeout.
● Gestionar los tiempos de espera: nunca más de 10 seg
● Feedback de loading o fallo. Evitar el loading infinito
Errores de conexión
Retries
● Reintentos manuales. Botón de reintento UI
● Respetar la transaccionalidad de las acciones.
Rollback de las acciones y comprobar estado
● Cola de reintentos en segundo plano. Diferenciar
acciones que no requieren más interacción de
usuario. Ejemplo: whatsapp
¿Funcionamiento offline?
Offline First: http://offlinefirst.org/
Probar a usar la app en modo avión (sin conexión)
Caché de los datos más usados. Equilibrio entre lógica
de negocio en la app y directa del backend
Persistir todos los datos posibles de la App
Sincronización del uso offline. Colas de sincronización
Notificaciones Push
Utilizar SaaS que nos faciliten la vida
● Parse
● Amazon SNS
Tipos de notificaciones: bulk, topic, personalizadas
Sincronización en background usando push
Notificaciones Push
Seguridad
Utilizar HTTPS para TODAS las llamadas
Uso de OAuth2
Signature en llamadas para no poder repetir llamadas
si alguien intenta crawlear nuestra API
Trabajar con
APIs
(y no acabar con los
dedos pegados)
“Las APIs son el pegamento
entre las apps e Internet”
Las frustraciones del desarrollador de apps móviles
● Falta de documentación
● Parseo de respuestas y gestión de
errores
● El API aún no está desarrollada (mocks)
● “Manual testing”
● Versionado y mantenimiento de APIs
● Seguridad de las peticiones
¿Documentación estática o sandbox
interactivos?
● Definición de endpoints, parámetros,
response, errores, etc.. (actualizada,
por favor)
..pero también necesitamos...
● Entorno trasteable y testable
Swagger: agnostic framework for APIs
“The goal of Swagger™ is to define a standard,
language-agnostic interface to REST APIs which
allows both humans and computers to discover and
understand the capabilities of the service without
access to source code, documentation, or through
network traffic inspection”
swagger.io
Sandbox
interactivo
Network Traffic Inspection
¿Cómo visualizar que envío y recibo
al hacer peticiones a un API?
...y también sirve para “descubrir” APIs
● Debug traffic: request, response, header, cache-
control, etc..
● Man-in-middle: desencriptar HTTPS visualizando
y modificando request. Reverse proxy SSL
● Performance testing: lag
Herramientas Network Traffic Inspection
Charles charlesproxy.com/
Herramientas Network Traffic Inspection
Fiddler telerik.com/fiddler
API Workflow
Herramientas para almacenar colecciones de llamadas APIs
● Crear peticiones de forma simple y
reproducibles
● Documentar llamadas y exportarlas
● Trabajar con distintos entornos staging y pro
● Utilizar helper de autenticación
● Crear script de pruebas
● En definitiva, un Sandbox de pruebas
Herramientas API Workflow
POSTMAN getpostman.com
Mock server
● Evita el bloqueo mientras se está desarrollando
una API
● Adelantar trabajo y definir JSON al equipo de
Backend
● Pruebas en local sin necesidad de conexión de
red. Mock server integrado.
● Y los más importante… TESTING
Mockweb server
https://github.com/square/okhttp/tree/master/mockwebserver
MockResponse. Simular respuestas: header, body, tiempo de
respuestas
RecorderRequest. Similar al verify podemos comprobar el
orden y si se hacen las request correctas.
Dispatcher. Crear un pequeño dispatcher para dar lógica a los
test.
Construir un cliente API
¡NO REINVENTES LA RUEDA!
Mantenible y extensible
Usa OkHttp y Retrofit
OKHttp
● Soporta HTTP/2 y SPDY
● GZIP shrinks
● Response caching evitando repetir llamadas innecesarias.
Cache-control
● Pinnear certificados
● Interceptors
http://square.github.io/okhttp/
Certificates pinning
EVITA MAN-IN-THE-MIDDLE
public CertificatePinning() {
client = new OkHttpClient();
client.setCertificatePinner(
new CertificatePinner.Builder()
.add("publicobject.com", "sha1/DmxUShsZuNiqPQsX2Oi9uv2sCnw=")
.add("publicobject.com", "sha1/SXxoaOSEzPC6BgGmxAt/EAcsajw=")
.add("publicobject.com", "sha1/blhOM3W9V/bVQhsWAcLYwPU6n24=")
.add("publicobject.com", "sha1/T5x9IXmcrQ7YuQxXnxoCmeeQ84c=")
.build());
}
http://square.github.io/okhttp/javadoc/com/squareup/okhttp/CertificatePinner.html
Certificates pinning
javax.net.ssl.SSLPeerUnverifiedException: Certificate pinning failure!
Peer certificate chain:
sha1/DmxUShsZuNiqPQsX2Oi9uv2sCnw=: CN=publicobject.com, OU=PositiveSSL
sha1/SXxoaOSEzPC6BgGmxAt/EAcsajw=: CN=COMODO RSA Domain Validation Secure
Server CA
sha1/blhOM3W9V/bVQhsWAcLYwPU6n24=: CN=COMODO RSA Certification Authority
sha1/T5x9IXmcrQ7YuQxXnxoCmeeQ84c=: CN=AddTrust External CA Root
Pinned certificates for publicobject.com:
sha1/BOGUSPIN
at com.squareup.okhttp.CertificatePinner.check(CertificatePinner.java)
at com.squareup.okhttp.Connection.upgradeToTls(Connection.java)
at com.squareup.okhttp.Connection.connect(Connection.java)
at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java)
http://square.github.io/okhttp/javadoc/com/squareup/okhttp/CertificatePinner.html
OKHttp
Interceptors
Autentication. Servicio adhoc con la seguridad del API
Parámetro comunes de la App. Header con app version,
ids
Caché
Logging y debugging
OKHttp
Interceptors
Retrofit
http://square.github.io/retrofit
Convertir HTTP APIs en interface Java
public interface GitHubService {
@GET("/users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
public interface GitHubService {
@GET("/users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
Conclusiones
Cuidar la capa de red de las aplicaciones
Offline First. Diseñar la UI y el componente de caché
pensando en ello
Utiliza herramientas para debuggear la API
Referencias
Android Tech Talk: HTTP In A Hostile World - Jesse Wilson
https://www.youtube.com/watch?v=tfD2uYjzXFo
Offline First
http://offlinefirst.org/
OkHTTP Recipes
https://github.com/square/okhttp/wiki/Recipes
Retrofit
http://square.github.io/retrofit/
Preguntas
@durbon
chema@durbon.com
++JoséMRodríguez

Más contenido relacionado

La actualidad más candente

Presentacion de integracion continua (lima agile)
Presentacion de integracion continua (lima agile)Presentacion de integracion continua (lima agile)
Presentacion de integracion continua (lima agile)Gustavo Veliz
 
Java mission control para monitoreo, administración y profilig de aplicacion...
Java mission control para monitoreo, administración y profilig de aplicacion...Java mission control para monitoreo, administración y profilig de aplicacion...
Java mission control para monitoreo, administración y profilig de aplicacion...César Hernández
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con JenkinsCésar Hernández
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Presentacion de Integración Continua
Presentacion de Integración ContinuaPresentacion de Integración Continua
Presentacion de Integración ContinuaRodrigo Ayala
 
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de PruebasGlobant
 
Introducción a la automatización de pruebas con tecnologías .Net
Introducción a la automatización de pruebas con tecnologías .NetIntroducción a la automatización de pruebas con tecnologías .Net
Introducción a la automatización de pruebas con tecnologías .NetAbel Quintana Lopez
 
Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...César Hernández
 
Old fox new tricks malicious macros are back
Old fox new tricks malicious macros are backOld fox new tricks malicious macros are back
Old fox new tricks malicious macros are backWebsec México, S.C.
 
Django on Jython Summer of Code Results
Django on Jython Summer of Code ResultsDjango on Jython Summer of Code Results
Django on Jython Summer of Code ResultsLeonardo Soto
 

La actualidad más candente (12)

Security Testing para Rails
Security Testing para RailsSecurity Testing para Rails
Security Testing para Rails
 
Presentacion de integracion continua (lima agile)
Presentacion de integracion continua (lima agile)Presentacion de integracion continua (lima agile)
Presentacion de integracion continua (lima agile)
 
Java mission control para monitoreo, administración y profilig de aplicacion...
Java mission control para monitoreo, administración y profilig de aplicacion...Java mission control para monitoreo, administración y profilig de aplicacion...
Java mission control para monitoreo, administración y profilig de aplicacion...
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con Jenkins
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Presentacion de Integración Continua
Presentacion de Integración ContinuaPresentacion de Integración Continua
Presentacion de Integración Continua
 
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
¡Introducción a Cypress! - Globant Tech Insiders: Automatización de Pruebas
 
Introducción a la automatización de pruebas con tecnologías .Net
Introducción a la automatización de pruebas con tecnologías .NetIntroducción a la automatización de pruebas con tecnologías .Net
Introducción a la automatización de pruebas con tecnologías .Net
 
Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...
 
Old fox new tricks malicious macros are back
Old fox new tricks malicious macros are backOld fox new tricks malicious macros are back
Old fox new tricks malicious macros are back
 
Skipfish
Skipfish Skipfish
Skipfish
 
Django on Jython Summer of Code Results
Django on Jython Summer of Code ResultsDjango on Jython Summer of Code Results
Django on Jython Summer of Code Results
 

Similar a Cómo conectar nuestras apps a Internet de forma eficiente

APIs REST: Django y Go
APIs REST: Django y GoAPIs REST: Django y Go
APIs REST: Django y GoJM Robles
 
desarrollando la app de idealista
desarrollando la app de idealistadesarrollando la app de idealista
desarrollando la app de idealistaidealistaimasd
 
herramientas tecnológicas
herramientas tecnológicasherramientas tecnológicas
herramientas tecnológicasGerardo Linares
 
An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup Arkhotech
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.jsINSIGNIA4U
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoFinizens
 
Mi Primera Aplicacion en Google App Engine
Mi Primera Aplicacion en Google App EngineMi Primera Aplicacion en Google App Engine
Mi Primera Aplicacion en Google App Engineykro
 
App engine
App engineApp engine
App engineThirdWay
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoManuel Carrasco Moñino
 
Mada metodología ágil de desarrollo de apis
Mada   metodología ágil de desarrollo de apisMada   metodología ágil de desarrollo de apis
Mada metodología ágil de desarrollo de apisCloudAppi
 
Probando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfFederico Toledo
 
Mobile testing workshop - TechMeetup Uruguay
Mobile testing workshop - TechMeetup UruguayMobile testing workshop - TechMeetup Uruguay
Mobile testing workshop - TechMeetup UruguayFabian Baptista
 
Creando Aplicaciones Web en el 2015
 Creando Aplicaciones Web en el 2015 Creando Aplicaciones Web en el 2015
Creando Aplicaciones Web en el 2015Globant
 
Herramientas Y Programas Utiles
Herramientas Y Programas UtilesHerramientas Y Programas Utiles
Herramientas Y Programas UtilesJairo Gatjens
 

Similar a Cómo conectar nuestras apps a Internet de forma eficiente (20)

APIs REST: Django y Go
APIs REST: Django y GoAPIs REST: Django y Go
APIs REST: Django y Go
 
desarrollando la app de idealista
desarrollando la app de idealistadesarrollando la app de idealista
desarrollando la app de idealista
 
Python Gae django
Python Gae djangoPython Gae django
Python Gae django
 
herramientas tecnológicas
herramientas tecnológicasherramientas tecnológicas
herramientas tecnológicas
 
An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup
 
Api rest client en Android
Api rest client en AndroidApi rest client en Android
Api rest client en Android
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.js
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológico
 
Mi Primera Aplicacion en Google App Engine
Mi Primera Aplicacion en Google App EngineMi Primera Aplicacion en Google App Engine
Mi Primera Aplicacion en Google App Engine
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
Comenzando a usar el Continuous Delivery
 Comenzando a usar el Continuous Delivery Comenzando a usar el Continuous Delivery
Comenzando a usar el Continuous Delivery
 
App engine
App engineApp engine
App engine
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Mada metodología ágil de desarrollo de apis
Mada   metodología ágil de desarrollo de apisMada   metodología ágil de desarrollo de apis
Mada metodología ágil de desarrollo de apis
 
PhoneGap Basics v1.0
PhoneGap Basics v1.0PhoneGap Basics v1.0
PhoneGap Basics v1.0
 
Probando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdf
 
Mobile testing workshop - TechMeetup Uruguay
Mobile testing workshop - TechMeetup UruguayMobile testing workshop - TechMeetup Uruguay
Mobile testing workshop - TechMeetup Uruguay
 
Creando Aplicaciones Web en el 2015
 Creando Aplicaciones Web en el 2015 Creando Aplicaciones Web en el 2015
Creando Aplicaciones Web en el 2015
 
Integrando AngularJS y drupal
Integrando AngularJS y drupalIntegrando AngularJS y drupal
Integrando AngularJS y drupal
 
Herramientas Y Programas Utiles
Herramientas Y Programas UtilesHerramientas Y Programas Utiles
Herramientas Y Programas Utiles
 

Último

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 

Último (20)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 

Cómo conectar nuestras apps a Internet de forma eficiente

  • 1. El pegamento de las Apps con Internet José María Rodríguez Hurtado (@durbon) Android Engineer Herramientas para el desarrollo móvil de apps
  • 2. José Manuel Pereira García ANDROID TEAM LEAD www.jmpergar.com @JMPergar jm.pereira.g@gmail.com +JoseMPereira José María Rodríguez Hurtado ANDROID DEVELOPER & APIs LOVER @durbon chema@durbon.com ++JoséMRodríguez
  • 3. “Casi cualquier app necesita una conexión de red para funcionar” (incluso la app que ahuyenta los mosquitos)
  • 4. ¿Somos eficientes usando las peticiones de red en nuestras Apps? 1. Velocidad 2. Errores de red 3. Offline 4. Sincronización 5. Seguridad
  • 5. Velocidad de conexión La red (puede ser) lenta ● Ajustes de conexión según si estamos en WiFi, 3G, 4G: ○ Calidad de las imágenes. Solicitar resoluciones, formatos al API ○ Descarga de datos pesados sólo en WiFi. Ajustes de applicación ○ Usa datos en caché siempre que puedas. Cache-control, ETag ● Usa siempre GZIP, reduce hasta un 70%
  • 6. Errores de conexión Gestionar los errores 4xx y 500. ● Enviar errores a Crashlytics o Analytics para analizarlo. ¿fallos de backend? ● Mensajes informativos, intenta recoger feedback del usuario ¿hay algo incorrecto?
  • 7. Errores de conexión Definir Timeout. ● Gestionar los tiempos de espera: nunca más de 10 seg ● Feedback de loading o fallo. Evitar el loading infinito
  • 8. Errores de conexión Retries ● Reintentos manuales. Botón de reintento UI ● Respetar la transaccionalidad de las acciones. Rollback de las acciones y comprobar estado ● Cola de reintentos en segundo plano. Diferenciar acciones que no requieren más interacción de usuario. Ejemplo: whatsapp
  • 9. ¿Funcionamiento offline? Offline First: http://offlinefirst.org/ Probar a usar la app en modo avión (sin conexión) Caché de los datos más usados. Equilibrio entre lógica de negocio en la app y directa del backend Persistir todos los datos posibles de la App Sincronización del uso offline. Colas de sincronización
  • 10. Notificaciones Push Utilizar SaaS que nos faciliten la vida ● Parse ● Amazon SNS Tipos de notificaciones: bulk, topic, personalizadas Sincronización en background usando push
  • 12. Seguridad Utilizar HTTPS para TODAS las llamadas Uso de OAuth2 Signature en llamadas para no poder repetir llamadas si alguien intenta crawlear nuestra API
  • 13. Trabajar con APIs (y no acabar con los dedos pegados)
  • 14. “Las APIs son el pegamento entre las apps e Internet”
  • 15. Las frustraciones del desarrollador de apps móviles ● Falta de documentación ● Parseo de respuestas y gestión de errores ● El API aún no está desarrollada (mocks) ● “Manual testing” ● Versionado y mantenimiento de APIs ● Seguridad de las peticiones
  • 16. ¿Documentación estática o sandbox interactivos? ● Definición de endpoints, parámetros, response, errores, etc.. (actualizada, por favor) ..pero también necesitamos... ● Entorno trasteable y testable
  • 17. Swagger: agnostic framework for APIs “The goal of Swagger™ is to define a standard, language-agnostic interface to REST APIs which allows both humans and computers to discover and understand the capabilities of the service without access to source code, documentation, or through network traffic inspection” swagger.io
  • 19. Network Traffic Inspection ¿Cómo visualizar que envío y recibo al hacer peticiones a un API? ...y también sirve para “descubrir” APIs
  • 20. ● Debug traffic: request, response, header, cache- control, etc.. ● Man-in-middle: desencriptar HTTPS visualizando y modificando request. Reverse proxy SSL ● Performance testing: lag
  • 21. Herramientas Network Traffic Inspection Charles charlesproxy.com/
  • 22. Herramientas Network Traffic Inspection Fiddler telerik.com/fiddler
  • 23. API Workflow Herramientas para almacenar colecciones de llamadas APIs ● Crear peticiones de forma simple y reproducibles ● Documentar llamadas y exportarlas ● Trabajar con distintos entornos staging y pro ● Utilizar helper de autenticación ● Crear script de pruebas ● En definitiva, un Sandbox de pruebas
  • 25. Mock server ● Evita el bloqueo mientras se está desarrollando una API ● Adelantar trabajo y definir JSON al equipo de Backend ● Pruebas en local sin necesidad de conexión de red. Mock server integrado. ● Y los más importante… TESTING
  • 26. Mockweb server https://github.com/square/okhttp/tree/master/mockwebserver MockResponse. Simular respuestas: header, body, tiempo de respuestas RecorderRequest. Similar al verify podemos comprobar el orden y si se hacen las request correctas. Dispatcher. Crear un pequeño dispatcher para dar lógica a los test.
  • 27. Construir un cliente API ¡NO REINVENTES LA RUEDA! Mantenible y extensible Usa OkHttp y Retrofit
  • 28. OKHttp ● Soporta HTTP/2 y SPDY ● GZIP shrinks ● Response caching evitando repetir llamadas innecesarias. Cache-control ● Pinnear certificados ● Interceptors http://square.github.io/okhttp/
  • 29. Certificates pinning EVITA MAN-IN-THE-MIDDLE public CertificatePinning() { client = new OkHttpClient(); client.setCertificatePinner( new CertificatePinner.Builder() .add("publicobject.com", "sha1/DmxUShsZuNiqPQsX2Oi9uv2sCnw=") .add("publicobject.com", "sha1/SXxoaOSEzPC6BgGmxAt/EAcsajw=") .add("publicobject.com", "sha1/blhOM3W9V/bVQhsWAcLYwPU6n24=") .add("publicobject.com", "sha1/T5x9IXmcrQ7YuQxXnxoCmeeQ84c=") .build()); } http://square.github.io/okhttp/javadoc/com/squareup/okhttp/CertificatePinner.html
  • 30. Certificates pinning javax.net.ssl.SSLPeerUnverifiedException: Certificate pinning failure! Peer certificate chain: sha1/DmxUShsZuNiqPQsX2Oi9uv2sCnw=: CN=publicobject.com, OU=PositiveSSL sha1/SXxoaOSEzPC6BgGmxAt/EAcsajw=: CN=COMODO RSA Domain Validation Secure Server CA sha1/blhOM3W9V/bVQhsWAcLYwPU6n24=: CN=COMODO RSA Certification Authority sha1/T5x9IXmcrQ7YuQxXnxoCmeeQ84c=: CN=AddTrust External CA Root Pinned certificates for publicobject.com: sha1/BOGUSPIN at com.squareup.okhttp.CertificatePinner.check(CertificatePinner.java) at com.squareup.okhttp.Connection.upgradeToTls(Connection.java) at com.squareup.okhttp.Connection.connect(Connection.java) at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java) http://square.github.io/okhttp/javadoc/com/squareup/okhttp/CertificatePinner.html
  • 31. OKHttp Interceptors Autentication. Servicio adhoc con la seguridad del API Parámetro comunes de la App. Header con app version, ids Caché Logging y debugging
  • 33. Retrofit http://square.github.io/retrofit Convertir HTTP APIs en interface Java public interface GitHubService { @GET("/users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); } public interface GitHubService { @GET("/users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); }
  • 34. Conclusiones Cuidar la capa de red de las aplicaciones Offline First. Diseñar la UI y el componente de caché pensando en ello Utiliza herramientas para debuggear la API
  • 35. Referencias Android Tech Talk: HTTP In A Hostile World - Jesse Wilson https://www.youtube.com/watch?v=tfD2uYjzXFo Offline First http://offlinefirst.org/ OkHTTP Recipes https://github.com/square/okhttp/wiki/Recipes Retrofit http://square.github.io/retrofit/