-
abr13
Interacción entre una aplicación Android y una aplicación Grails (francés)
publicado por Enrique Medina Montenegro en Grails
652 visitas
Enrique Medina Montenegro
Con más de 14 años de experiencia en el mundo de las TI, donde comenzó desarrollando aplicaciones de escritorio en Delphi o Visual Basic, este Ingeniero en Informática por la Universidad de Alicante (1991-1996) ha ido perfilando su actividad profesional hacia las arquitecturas J2EE, donde siempre ha seguido muy atento, e incluso colaborado en ocasiones, con proyectos open-source como MyFaces, Spring, Hibernate, Groovy o Grails. Ocupando puestos desde Programador Junior hasta Arquitecto Senior de Soluciones, Enrique ha sido testigo de cómo ha ido evolucionando la tecnología en torno al desarrollo de aplicaciones web, adquiriendo un conocimiento y experiencia que le permiten evaluar con detalle las necesidades de cada proyecto y aplicar las herramientas que maximizan su productividad. Actualmente, Enrique se ha especializado en el framework de desarrollo Grails, y ejerce la Dirección Técnica de proyectos basados, entre otras, en esta tecnología.
¿Sabías que… puedes utilizar los filtros web para detectar el tipo de cliente que está intentando cargar tu aplicación?
En los tiempos que corren, muchos desarrolladores implementan sus aplicaciones web de forma que, dependiendo del tipo de cliente que haga la petición, se redirecciona a una zona de la web u a otra. Por ejemplo, imaginemos la típica web que quiere dar soporte a los teléfonos con Android, como el Samsung Galaxy S; entonces recibiría una cabecera de ‘user-agent’ como la siguiente:
Mozilla/5.0 (Linux; U; Android 1.5; es-es; Galaxy Build/CUPCAKE) AppleWebkit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1
Aparte de versiones y nomenclatura que nos pueda sonar, podemos identificar claramente el texto “Android 1.5″, ¿correcto? Pues, entonces, ¿por qué no usar un filtro web en Grails para obtener el ‘user-agent’ de cada petición, analizar si contiene la cadena de texto “Android”, y entonces redirigir la petición a la parte ‘móvil’ de nuestra aplicación? Veamos un ejemplo:
detectarAndroid (controller:'*', action:'*') {
// Buscamos la cadena 'Android' antes de procesar la petición.
before = {
request['peticionAndroid'] = false
if (request.getHeader('user-agent') =~ /(?i)android/) {
request['peticionAndroid'] = true
}
// Permitimos que se sigan ejecutando el resto de filtros web.
return true
}
// El resto de eventos no nos interesan...
after = { }
afterView = { }
}
Una vez hemos detectado que se trata de un dispositivo móvil con Android, ya sólo nos queda redirigir la petición en nuestros controladores a, por ejemplo, unas vistas que se llamen igual que las ‘normales’, pero con el sufijo ‘_android’:
def afterInterceptor = { model, modelAndView ->
if (request['peticionAndroid']) {
modelAndView.viewName = modelAndView.viewName + "_android"
}
}
Para nuestro controlador, si nos llega que la petición es de tipo ‘Android’, entonces en vez de renderizar la vista, por ejemplo, “list.gsp”, le decimos que su versión móvil es “list_android.gsp”. Fácil, ¿eh?
NOTA: El lector avispado habrá notado que el interceptor que redirige a la vista en su versión ‘móvil’ debe definirse en todos y cada uno de los controladores de nuestra aplicación, lo cual puede suponer un auténtico quebradero de cabeza. Pero bueno, aquí sólo se presenta un boceto de solución y, además, ¿para que están, si no, las transformaciones AST de Groovy?
NOTA: Aquí os dejo un listado de ‘user agents’ para dispositivos móviles: List of user agents for mobile phones.
Recuerda: Puedes aprovecharte de los filtros web para ‘cazar’ el tipo de cliente que hace la petición y redireccionarlo en base a sus características.


Entradas relacionadas 
(2 votos, media: 3,50)
Comentarios recientes