chema rodríguez
@durbon
mobile backed
app idealista
10 julio 2014
Slide 2
Slide 2 text
● api first!
● notificaciones push
● herramientas
● proceso de envío de notificaciones de
idealista
● ¿cómo trabajamos juntos?
/índice
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
“las APIs son el pegamento de las apps e
internet”
Slide 5
Slide 5 text
Mobile Backend = API + Notificaciones Push
Slide 6
Slide 6 text
API REST
● JSON (formato de facto)
● Stack en Java: Spring framework, Solr,
Oracle, MongoDB, Redis, ActiveMQ
Slide 7
Slide 7 text
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
Slide 8
Slide 8 text
¿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)
Slide 9
Slide 9 text
alertas de nuevos
inmuebles
1. email
2. notificaciones push
Slide 10
Slide 10 text
Push
Notifications
¿Cuántas notificaciones recibimos al día?
Slide 11
Slide 11 text
Tipo de notificaciones
1. Notificaciones masivas (todos)
2. Suscripción a un topic concreto
3. Notificaciones individuales al usuario
Slide 12
Slide 12 text
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
Slide 13
Slide 13 text
Herramientas disponibles: soluciones de terceros
Slide 14
Slide 14 text
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
Slide 15
Slide 15 text
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
Slide 16
Slide 16 text
● 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)
Slide 17
Slide 17 text
PushMessage
String localizedAlert;
List localizedArgs;
Map 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
Slide 18
Slide 18 text
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)
Slide 19
Slide 19 text
¿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
Slide 20
Slide 20 text
¿preguntas?
[email protected]
¿quieres trabajar con nosotros? mándanos tu CV!