desarrollando la app de idealista

47
desarrollando la app de idealista enrique fau @kikefau

Upload: idealistaimasd

Post on 13-Jun-2015

5.143 views

Category:

Technology


0 download

DESCRIPTION

charla para ironhack explicando el proceso de desarrollo de la app de idealista. centrado en la implementación de la app para ios y el backend creado adhoc para las notificaciones push

TRANSCRIPT

Page 1: desarrollando la app de idealista

desarrollando la app de idealista

enrique fau@kikefau

Page 2: desarrollando la app de idealista

● equipo● metodología de desarrollo● herramientas● ¿problemas ios? consejos● mobile backend (api, push notifications)

/índice

Page 3: desarrollando la app de idealista

¿cuánta gente hay detrás?

Page 4: desarrollando la app de idealista
Page 5: desarrollando la app de idealista

desarrollo ágil

Page 6: desarrollando la app de idealista

● dailies (skype)● sprint● retrospectivas

/agile

desarrollo basado en: scrum

Page 7: desarrollando la app de idealista

/scrum

Page 8: desarrollando la app de idealista

/git

● develop● features/xxx● bugs/xxx● release● master

ramas para todo!

Page 9: desarrollando la app de idealista

herramientas

Page 10: desarrollando la app de idealista

● jira (kanbantool, trello)● stash (bitbucket, github)● sourcetree● diffmerge● testflight● crashlytics● xiti (google analytics)

/herramientas

Page 11: desarrollando la app de idealista
Page 12: desarrollando la app de idealista

pair programming

Page 13: desarrollando la app de idealista

piloto - copiloto

Page 14: desarrollando la app de idealista

pomodoros

/pair programming

Page 15: desarrollando la app de idealista

ping-pong

/pair programming

Page 16: desarrollando la app de idealista

calidad del producto

Page 17: desarrollando la app de idealista

● test unitarios (xctest, ocmockito)● test de aceptación (uiautomation)● test manuales (llamar, contactar...)● qa

/calidad

test, test, test!

Page 19: desarrollando la app de idealista

¿desarrollando para iOS pueden surgir problemas?

Page 20: desarrollando la app de idealista
Page 21: desarrollando la app de idealista

● gestión de memoria● compatibilidad iOS 6, 7… 8● statusbar● conflictos git● gestión de dependencias● core data

/problemas

Page 22: desarrollando la app de idealista

/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

Page 23: desarrollando la app de idealista

y entonces llegó... ARC!

Page 24: desarrollando la app de idealista

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

}

Page 25: desarrollando la app de idealista

/statusbar

Page 26: desarrollando la app de idealista

● ¿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

Page 27: desarrollando la app de idealista

/problemas/dependencias

● AFNetworking● RHAddressBook● iRate● SSKeychain● SVProgressHUD

cocoapods con COCO!

Page 28: desarrollando la app de idealista

chema rodríguez@durbon

mobile backed app idealista.com

10 julio 2014

Page 29: desarrollando la app de idealista

● api first!● notificaciones push● herramientas● proceso de envío de notificaciones de

idealista● ¿cómo trabajamos juntos?

/índice

Page 30: desarrollando la app de idealista
Page 31: desarrollando la app de idealista

“Las APIs son el pegamento de las apps e internet”

Page 32: desarrollando la app de idealista

Mobile Backend = API + Notificaciones Push

Page 33: desarrollando la app de idealista

API REST

● JSON (formato de facto)● Stack en Java: Spring framework, Solr,

Oracle, MongoDB, Redis, ActiveMQ

Page 34: desarrollando la app de idealista

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

Page 35: desarrollando la app de idealista

¿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)

Page 36: desarrollando la app de idealista

Alertas de nuevos inmuebles

1. Email

2. Notificaciones push

Page 37: desarrollando la app de idealista

Push Notifications

¿Cuántas notificaciones recibimos al día?

Page 38: desarrollando la app de idealista

Tipo de notificaciones

1. Notificaciones masivas (todos)

2. Suscripción a un topic concreto

3. Notificaciones individuales al usuario

Page 39: desarrollando la app de idealista

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

Page 40: desarrollando la app de idealista

Herramientas disponibles: soluciones de terceros

Page 41: desarrollando la app de idealista

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

Page 42: desarrollando la app de idealista

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

Page 43: desarrollando la app de idealista

● 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)

Page 44: desarrollando la app de idealista

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

Page 45: desarrollando la app de idealista

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)

Page 46: desarrollando la app de idealista

¿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

Page 47: desarrollando la app de idealista

¿preguntas?

[email protected]

enrique fau@kikefau

chema rodríguez@durbon

¿quieres trabajar con nosotros? mándanos tu CV!