desarrollando la app de
idealista
enrique fau
@kikefau
● equipo
● metodología de desarrollo
● herramientas
● ¿problemas ios? consejos
● mobile backend (api, push notifications)
/índice
¿cuánta gente hay detrás?
desarrollando la app de idealista
desarrollo ágil
● dailies (skype)
● sprint
● retrospectivas
/agile
desarrollo basado en: scrum
/scrum
/git
● develop
● features/xxx
● bugs/xxx
● release
● master
ramas para todo!
herramientas
● jira (kanbantool, trello)
● stash (bitbucket, github)
● sourcetree
● diffmerge
● testflight
● crashlytics
● xiti (google analytics)
/herramientas
desarrollando la app de idealista
pair programming
piloto - copiloto
pomodoros
/pair programming
ping-pong
/pair programming
calidad del producto
● test unitarios (xctest, ocmockito)
● test de aceptación (uiautomation)
● test manuales (llamar, contactar...)
● qa
/calidad
test, test, test!
desarrollando la app de idealista
¿desarrollando para iOS pueden
surgir problemas?
desarrollando la app de idealista
● gestión de memoria
● compatibilidad iOS 6, 7… 8
● statusbar
● conflictos git
● gestión de dependencias
● core data
/problemas
/problemas/memoria
- (id)initWithString:(NSString *)value {
if (self = [super init]) {
self.myProperty = [[MyProperty alloc] initWithValue:value];
self.myProperty = [[[MyProperty alloc] initWithValue:value] autorelease];
_myProperty = [[MyProperty alloc] initWithValue:value];
}
return self;
}
- (void)dealloc {
[_myProperty release];
[super dealloc];
}
@property (nonatomic, retain) MyProperty *myProperty;
@synthesize myProperty = _myProperty;
Objective-C message sent to deallocated instance
y entonces llegó...
ARC!
/problemas/compatibilidad
if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {
[[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setTintColor:[UIColor blueColor]];
} else {
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
[self setNeedsStatusBarAppearanceUpdate];
}
- (void)dealloc
{
self.tableView.delegate = nil;
self.tableView.dataSource = nil;
}
/statusbar
● ¿por qué tocas?, no toques!
● soy Dios, y hago todas las vistas a mano
● organizarse para tocar *.xib
● uso de varios *.storyboard
● *.pbxproj text -crlf -diff -merge=union
/problemas/conflictos
*.xib *.storyboard *.pbxproj
/problemas/dependencias
● AFNetworking
● RHAddressBook
● iRate
● SSKeychain
● SVProgressHUD
cocoapods con COCO!
chema rodríguez
@durbon
mobile backed
app idealista.com
10 julio 2014
● api first!
● notificaciones push
● herramientas
● proceso de envío de notificaciones de
idealista
● ¿cómo trabajamos juntos?
/índice
desarrollando la app de idealista
“Las APIs son el pegamento de las apps e
internet”
Mobile Backend = API + Notificaciones Push
API REST
● JSON (formato de facto)
● Stack en Java: Spring framework, Solr,
Oracle, MongoDB, Redis, ActiveMQ
API: Acciones y consultas
● Búsqueda geográfica y por zona
● Información completa de cada anuncio
● Usuario: favoritear, descartar, comentar,
contactar, guardar alertas
● Subir fotos
¿API pública?
● Ahora, no. Próximamente abierta para todos
● API V3 sólo para las apps de iOS y Android
● Disponible la V1 (sólo búsqueda geográfica)
Alertas de nuevos
inmuebles
1. Email
2. Notificaciones push
Push
Notifications
¿Cuántas notificaciones recibimos al día?
Tipo de notificaciones
1. Notificaciones masivas (todos)
2. Suscripción a un topic concreto
3. Notificaciones individuales al usuario
Planteamiento inicial y riesgos
● Registro en APNS del dispositivo
● Sincronización entre usuarios: relacionar
usuario idealista con su dispositivo
● Badge del número de notificaciones
● Límites de envío
Herramientas disponibles: soluciones de terceros
Herramientas disponibles: soluciones de terceros
Ventajas
● No necesitas tener un backend propio
● Barato si no requieres muchos envíos
● SDKs y clientes específicos para iOS o Android. Fácil integración
● Paneles de desarrolladores: gestión tipos de push
● Integración con plataformas en la nube (Amazon o Google)
Inconvenientes:
● Sincronización usuarios BBDD propias fuera de la del servicio
● Costes en altos volúmenes de envío
Solución adhoc
Librería JAVAPNS https://code.google.com/p/javapns/
● Encapsula la comunicación con Apple Push Notification Service(APNS)
● gestión del certificado de nuestra app (sandbox y production)
● Gestión de errores
● Envío multihilo de mensajes
● API para el registro de usuarios y activación de alertas
● Construcción de una librería propia (dependencia Maven) de
composición de notificaciones (Apple y Android).
○ Combinamos JAVAPNS y GCM (también tenemos Android)
○ Creamos el mismo mensaje independiente de la plataforma
○ Unificamos la gestión de errores de cada plataforma
● Proceso de envío de notificaciones
○ Consume alertas que notificar a queue de JMS
○ Consultar usuario-token device para el envío
○ Construcción de mensaje (BBDD y librería)
○ Feedback de errores (canonical deviceID)
PushMessage
String localizedAlert;
List<String> localizedArgs;
Map<String, String> customParameters;
int badge;
{
action = newAds;
adId = 25403184;
adsNumber = 1;
alertId = 513466;
aps = {
alert = {
"loc-args" = (
1,
"pisos, centro hasta 150.000"
);
"loc-key" = "%@ anuncios: %@";
};
badge = 0;
sound = default;
};
typology = homes;
}
"loc-key" debe de estar en los ficheros
localizables de la app. el valor
"loc-args" son los posibles argumentos que
puede tener el texto:
Payload
Componentes
● Tablas de base de datos para la gestión de dispositivos y registro de
notificaciones enviadas: dispositivos activos, log de notificaciones
enviadas/falladas/reintentadas, Contador del badge (usado para el
envío del badge a iOS).
● Cola JMS a los que estamos suscritos para enviar las alertas
● proceso app de envío de notificaciones escalable
● proceso de reenvío de notificaciones fallidas
● proceso de feedback para el de-registro de dispositivos (cada
madrugada)
¿Cómo trabajamos juntos?
● Documentación API
● Entornos de testing (pre producción)
● Sandbox para APIs aún en desarrollo
● Test de integración con CORE de idealista
● Y sobre todo ser ágiles + mucha
comunicación
¿preguntas?
desarrollo.imasd@idealista.com
enrique fau
@kikefau
chema rodríguez
@durbon
¿quieres trabajar con nosotros? mándanos tu CV!

Más contenido relacionado

PDF
Mobile backed app idealista
PPTX
PROYECTO BUSCAENESPAÑA.COM
PDF
El comercio electronico: Los 7 puntos esenciales de tu tienda online (Parte 1...
KEY
Symfony y 3 millones de usuarios, nuestro dia a dia
PPTX
Motivational anti-patterns
PDF
App dependencia.
PPTX
Creación de una aplicación
PPTX
Pasos para desarrollar una aplicación mobile APPS
Mobile backed app idealista
PROYECTO BUSCAENESPAÑA.COM
El comercio electronico: Los 7 puntos esenciales de tu tienda online (Parte 1...
Symfony y 3 millones de usuarios, nuestro dia a dia
Motivational anti-patterns
App dependencia.
Creación de una aplicación
Pasos para desarrollar una aplicación mobile APPS

Destacado (16)

PDF
Diseño experiencias-usabilidad
PPTX
Aplicaciones Web móviles
PDF
Curso: Diseño de apps y webs móviles - Parte 1
PDF
Mobile D (programacion dispositivos moviles)
PDF
Prototipado iterativo-ixda-juan-manuel-carraro
PDF
Diseño de aplicaciones móviles: creando experiencias
PPT
Las 7 ms de todo proceso productivo
PDF
Proceso de desarrollo de una aplicación móvil
PDF
Diseno y usabilidad en aplicaciones móviles para iphone (ui app design)
PDF
Metodologia agil para el diseño de aplicaciones multimedias moviles
PPTX
Campos de aplicación del diseño
DOCX
Creacion de una aplicacion para dispositivos moviles 11-C Jorge L. y Victor F.
PPT
Sistemas De ProduccióN De Bienes Tangibles E Intangibles
PDF
La importancia de los usuarios móviles. ¿Cómo creamos mobile engagement?
PDF
¿Qué es Storytelling y cómo hacerlo viral para generar engagement?
PPT
Diagramas de flujo, especificaciones y diseño de procesos
Diseño experiencias-usabilidad
Aplicaciones Web móviles
Curso: Diseño de apps y webs móviles - Parte 1
Mobile D (programacion dispositivos moviles)
Prototipado iterativo-ixda-juan-manuel-carraro
Diseño de aplicaciones móviles: creando experiencias
Las 7 ms de todo proceso productivo
Proceso de desarrollo de una aplicación móvil
Diseno y usabilidad en aplicaciones móviles para iphone (ui app design)
Metodologia agil para el diseño de aplicaciones multimedias moviles
Campos de aplicación del diseño
Creacion de una aplicacion para dispositivos moviles 11-C Jorge L. y Victor F.
Sistemas De ProduccióN De Bienes Tangibles E Intangibles
La importancia de los usuarios móviles. ¿Cómo creamos mobile engagement?
¿Qué es Storytelling y cómo hacerlo viral para generar engagement?
Diagramas de flujo, especificaciones y diseño de procesos
Publicidad

Similar a desarrollando la app de idealista (20)

PPTX
Sesion dos azuay
PPT
APNS para "casi" todos
PDF
iOS Notifications
PPTX
Exposición - IOS
PDF
Iphone
PDF
Desarrollo de Apps en iOS - mCommerce 2013 Aranjuez
PPTX
Jornada 10 años ASP NET en Español - Implementación de Notificaciones Push...
PDF
Ios
KEY
Barcamp Keynote
PPTX
Smart Devices tips & learnings: Desde Bankings hasta Redes Sociales
PDF
Aplicaciones moviles iphone ipad
PPT
PhoneGap
PDF
Consideraciones al escoger apps híbridas vs nativas
KEY
Presentacion cw2012
KEY
Introduccion ios
KEY
Ios.s15
PDF
Taller de introducción a iOS development
PDF
iOS Notifications
PPTX
Programación de Aplicaciones Móviles
Sesion dos azuay
APNS para "casi" todos
iOS Notifications
Exposición - IOS
Iphone
Desarrollo de Apps en iOS - mCommerce 2013 Aranjuez
Jornada 10 años ASP NET en Español - Implementación de Notificaciones Push...
Ios
Barcamp Keynote
Smart Devices tips & learnings: Desde Bankings hasta Redes Sociales
Aplicaciones moviles iphone ipad
PhoneGap
Consideraciones al escoger apps híbridas vs nativas
Presentacion cw2012
Introduccion ios
Ios.s15
Taller de introducción a iOS development
iOS Notifications
Programación de Aplicaciones Móviles
Publicidad

Último (20)

PPTX
ccna: redes de nat ipv4 stharlling cande
PPTX
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
PPTX
Sistema de Gestión Integral TCA Ingenieros.pptx
PDF
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
PPTX
Presentación final ingenieria de metodos
PDF
Documental Beyond the Code (Dossier Presentación - 2.0)
PPTX
Control de calidad en productos de frutas
PDF
Taller tecnológico Michelle lobo Velasquez
PDF
Final Tecno .pdfjdhdjsjdhsjshshhshshshhshhhhhhh
DOCX
Guía 5. Test de orientación Vocacional 2.docx
PDF
Distribucion de frecuencia exel (1).pdf
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PDF
Guía_de_implementación_Marco_de_gobierno_y_gestión_de_TI_Universidades.pdf
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
PPTX
El uso de las TIC en la vida cotidiana..
PDF
NREN - red nacional de investigacion y educacion en LATAM y Europa: Caracteri...
DOCX
Trabajo informatica joel torres 10-.....................
ccna: redes de nat ipv4 stharlling cande
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
Mecanismos-de-Propagacion de ondas electromagneticas
Sistema de Gestión Integral TCA Ingenieros.pptx
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
Presentación final ingenieria de metodos
Documental Beyond the Code (Dossier Presentación - 2.0)
Control de calidad en productos de frutas
Taller tecnológico Michelle lobo Velasquez
Final Tecno .pdfjdhdjsjdhsjshshhshshshhshhhhhhh
Guía 5. Test de orientación Vocacional 2.docx
Distribucion de frecuencia exel (1).pdf
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Guía_de_implementación_Marco_de_gobierno_y_gestión_de_TI_Universidades.pdf
la-historia-de-la-medicina Edna Silva.pptx
Estrategia de Apoyo de Daylin Castaño (5).pdf
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
El uso de las TIC en la vida cotidiana..
NREN - red nacional de investigacion y educacion en LATAM y Europa: Caracteri...
Trabajo informatica joel torres 10-.....................

desarrollando la app de idealista

  • 1. desarrollando la app de idealista enrique fau @kikefau
  • 2. ● equipo ● metodología de desarrollo ● herramientas ● ¿problemas ios? consejos ● mobile backend (api, push notifications) /índice
  • 6. ● dailies (skype) ● sprint ● retrospectivas /agile desarrollo basado en: scrum
  • 8. /git ● develop ● features/xxx ● bugs/xxx ● release ● master ramas para todo!
  • 10. ● jira (kanbantool, trello) ● stash (bitbucket, github) ● sourcetree ● diffmerge ● testflight ● crashlytics ● xiti (google analytics) /herramientas
  • 17. ● test unitarios (xctest, ocmockito) ● test de aceptación (uiautomation) ● test manuales (llamar, contactar...) ● qa /calidad test, test, test!
  • 19. ¿desarrollando para iOS pueden surgir problemas?
  • 21. ● gestión de memoria ● compatibilidad iOS 6, 7… 8 ● statusbar ● conflictos git ● gestión de dependencias ● core data /problemas
  • 22. /problemas/memoria - (id)initWithString:(NSString *)value { if (self = [super init]) { self.myProperty = [[MyProperty alloc] initWithValue:value]; self.myProperty = [[[MyProperty alloc] initWithValue:value] autorelease]; _myProperty = [[MyProperty alloc] initWithValue:value]; } return self; } - (void)dealloc { [_myProperty release]; [super dealloc]; } @property (nonatomic, retain) MyProperty *myProperty; @synthesize myProperty = _myProperty; Objective-C message sent to deallocated instance
  • 24. /problemas/compatibilidad if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) { [[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]]; [[UINavigationBar appearance] setTintColor:[UIColor blueColor]]; } else { [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; } if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { [self setNeedsStatusBarAppearanceUpdate]; } - (void)dealloc { self.tableView.delegate = nil; self.tableView.dataSource = nil; }
  • 26. ● ¿por qué tocas?, no toques! ● soy Dios, y hago todas las vistas a mano ● organizarse para tocar *.xib ● uso de varios *.storyboard ● *.pbxproj text -crlf -diff -merge=union /problemas/conflictos *.xib *.storyboard *.pbxproj
  • 27. /problemas/dependencias ● AFNetworking ● RHAddressBook ● iRate ● SSKeychain ● SVProgressHUD cocoapods con COCO!
  • 28. chema rodríguez @durbon mobile backed app idealista.com 10 julio 2014
  • 29. ● api first! ● notificaciones push ● herramientas ● proceso de envío de notificaciones de idealista ● ¿cómo trabajamos juntos? /índice
  • 31. “Las APIs son el pegamento de las apps e internet”
  • 32. Mobile Backend = API + Notificaciones Push
  • 33. API REST ● JSON (formato de facto) ● Stack en Java: Spring framework, Solr, Oracle, MongoDB, Redis, ActiveMQ
  • 34. API: Acciones y consultas ● Búsqueda geográfica y por zona ● Información completa de cada anuncio ● Usuario: favoritear, descartar, comentar, contactar, guardar alertas ● Subir fotos
  • 35. ¿API pública? ● Ahora, no. Próximamente abierta para todos ● API V3 sólo para las apps de iOS y Android ● Disponible la V1 (sólo búsqueda geográfica)
  • 36. Alertas de nuevos inmuebles 1. Email 2. Notificaciones push
  • 38. Tipo de notificaciones 1. Notificaciones masivas (todos) 2. Suscripción a un topic concreto 3. Notificaciones individuales al usuario
  • 39. Planteamiento inicial y riesgos ● Registro en APNS del dispositivo ● Sincronización entre usuarios: relacionar usuario idealista con su dispositivo ● Badge del número de notificaciones ● Límites de envío
  • 41. Herramientas disponibles: soluciones de terceros Ventajas ● No necesitas tener un backend propio ● Barato si no requieres muchos envíos ● SDKs y clientes específicos para iOS o Android. Fácil integración ● Paneles de desarrolladores: gestión tipos de push ● Integración con plataformas en la nube (Amazon o Google) Inconvenientes: ● Sincronización usuarios BBDD propias fuera de la del servicio ● Costes en altos volúmenes de envío
  • 42. Solución adhoc Librería JAVAPNS https://code.google.com/p/javapns/ ● Encapsula la comunicación con Apple Push Notification Service(APNS) ● gestión del certificado de nuestra app (sandbox y production) ● Gestión de errores ● Envío multihilo de mensajes
  • 43. ● API para el registro de usuarios y activación de alertas ● Construcción de una librería propia (dependencia Maven) de composición de notificaciones (Apple y Android). ○ Combinamos JAVAPNS y GCM (también tenemos Android) ○ Creamos el mismo mensaje independiente de la plataforma ○ Unificamos la gestión de errores de cada plataforma ● Proceso de envío de notificaciones ○ Consume alertas que notificar a queue de JMS ○ Consultar usuario-token device para el envío ○ Construcción de mensaje (BBDD y librería) ○ Feedback de errores (canonical deviceID)
  • 44. PushMessage String localizedAlert; List<String> localizedArgs; Map<String, String> customParameters; int badge; { action = newAds; adId = 25403184; adsNumber = 1; alertId = 513466; aps = { alert = { "loc-args" = ( 1, "pisos, centro hasta 150.000" ); "loc-key" = "%@ anuncios: %@"; }; badge = 0; sound = default; }; typology = homes; } "loc-key" debe de estar en los ficheros localizables de la app. el valor "loc-args" son los posibles argumentos que puede tener el texto: Payload
  • 45. Componentes ● Tablas de base de datos para la gestión de dispositivos y registro de notificaciones enviadas: dispositivos activos, log de notificaciones enviadas/falladas/reintentadas, Contador del badge (usado para el envío del badge a iOS). ● Cola JMS a los que estamos suscritos para enviar las alertas ● proceso app de envío de notificaciones escalable ● proceso de reenvío de notificaciones fallidas ● proceso de feedback para el de-registro de dispositivos (cada madrugada)
  • 46. ¿Cómo trabajamos juntos? ● Documentación API ● Entornos de testing (pre producción) ● Sandbox para APIs aún en desarrollo ● Test de integración con CORE de idealista ● Y sobre todo ser ágiles + mucha comunicación