desarrollando la app de idealista
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 pushTRANSCRIPT
![Page 1: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/1.jpg)
desarrollando la app de idealista
enrique fau@kikefau
![Page 2: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/2.jpg)
● equipo● metodología de desarrollo● herramientas● ¿problemas ios? consejos● mobile backend (api, push notifications)
/índice
![Page 3: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/3.jpg)
¿cuánta gente hay detrás?
![Page 4: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/4.jpg)
![Page 5: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/5.jpg)
desarrollo ágil
![Page 6: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/6.jpg)
● dailies (skype)● sprint● retrospectivas
/agile
desarrollo basado en: scrum
![Page 7: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/7.jpg)
/scrum
![Page 8: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/8.jpg)
/git
● develop● features/xxx● bugs/xxx● release● master
ramas para todo!
![Page 9: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/9.jpg)
herramientas
![Page 10: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/10.jpg)
● jira (kanbantool, trello)● stash (bitbucket, github)● sourcetree● diffmerge● testflight● crashlytics● xiti (google analytics)
/herramientas
![Page 11: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/11.jpg)
![Page 12: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/12.jpg)
pair programming
![Page 13: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/13.jpg)
piloto - copiloto
![Page 14: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/14.jpg)
pomodoros
/pair programming
![Page 15: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/15.jpg)
ping-pong
/pair programming
![Page 16: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/16.jpg)
calidad del producto
![Page 17: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/17.jpg)
● 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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/19.jpg)
¿desarrollando para iOS pueden surgir problemas?
![Page 20: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/20.jpg)
![Page 21: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/21.jpg)
● 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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/22.jpg)
/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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/23.jpg)
y entonces llegó... ARC!
![Page 24: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/24.jpg)
/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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/25.jpg)
/statusbar
![Page 26: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/26.jpg)
● ¿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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/27.jpg)
/problemas/dependencias
● AFNetworking● RHAddressBook● iRate● SSKeychain● SVProgressHUD
cocoapods con COCO!
![Page 28: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/28.jpg)
chema rodríguez@durbon
mobile backed app idealista.com
10 julio 2014
![Page 29: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/29.jpg)
● 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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/30.jpg)
![Page 31: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/31.jpg)
“Las APIs son el pegamento de las apps e internet”
![Page 32: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/32.jpg)
Mobile Backend = API + Notificaciones Push
![Page 33: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/33.jpg)
API REST
● JSON (formato de facto)● Stack en Java: Spring framework, Solr,
Oracle, MongoDB, Redis, ActiveMQ
![Page 34: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/35.jpg)
¿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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/36.jpg)
Alertas de nuevos inmuebles
1. Email
2. Notificaciones push
![Page 37: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/37.jpg)
Push Notifications
¿Cuántas notificaciones recibimos al día?
![Page 38: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/38.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/39.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/40.jpg)
Herramientas disponibles: soluciones de terceros
![Page 41: desarrollando la app de idealista](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/43.jpg)
● 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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/45.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/46.jpg)
¿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](https://reader033.vdocuments.site/reader033/viewer/2022060115/557c464dd8b42a23598b526e/html5/thumbnails/47.jpg)
¿preguntas?
enrique fau@kikefau
chema rodríguez@durbon
¿quieres trabajar con nosotros? mándanos tu CV!