A SpringSource liberou a versão 1.0 do Spring Mobile contendo extensões para o Spring MVC que auxiliam o desenvolvimento de aplicações web para dispositivos móveis.
O Spring Mobile segue a abordagem de aplicações servidoras, fazendo a detecção de dispositivos móveis no servidor e permitindo que os desenvolvedores retornem diferentes tipos de conteúdo, com base no tipo de dispositivo. A abordagem se contrapõe ao uso das consultas de mídia (media queries) do CSS3 e às técnicas de design responsivo para web, em que a detecção e o aperfeiçoamentos progressivos são aplicados no lado do cliente. O Spring Mobile tem três características principais, detalhadas a seguir.
Resolução de dispositivos
A resolução (ou identificação) de dispositivos é o processo de análise da requisição HTTP com o objetivo de determinar o dispositivo que originou a requisição. Essa informação é tipicamente obtida verificando-se o valor do cabeçalho User-Agent e outros cabeçalhos da requisição. A funcionalidade é útil quando há necessidade de lidar de forma diferente com navegadores para desktop e para ambientes móveis. Para habilitar o recurso de resolução de dispositivos, adicione o DeviceResolverHandlerInterceptor à configuração do DispatcherServlet.
<mvc:interceptors> <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" /> </mvc:interceptors>
O LiteDeviceResolver é usado por padrão para fazer a resolução (identificação) do dispositivo, que é baseado no algoritmo de detecção do pacote Mobile do WordPress. Pode-se adicionar outra implementação do DeviceResolver passando o argumento DeviceResolverHandlerInterceptor no construtor. Outras soluções mais sofisticadas para a identificação de dispositivos, como o WURFL, são capazes de identificar configurações específicas do dispositivo, como tamanho da tela, fabricante, modelo ou tipo de código de marcação (ex.: XHTML, WML etc.) preferida.
Pode-se identificar o dispositivo móvel através do método DeviceUtils.getCurrentDevice(). Também é possível definir o dispositivo passando-se um argumento para um dos seus métodos @Controller, depois de configurar o DeviceWebArgumentResolver.
<mvc:annotation-driven> <mvc:argument-resolvers> <bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" /> </mvc:argument-resolvers> </mvc:annotation-driven>
Gerenciamento de preferências de sites
O gerenciamento de preferências de sites permite que o usuário indique se prefere usar a versão do site normal ou a voltada a dispositivos móveis. A implementação correspondente do Spring Mobile está no StandardSitePreferenceHandler, que suporta a indicação de preferências de sites baseada em parâmetros de consultas e o armazenamento modular de SitePreference.
Se nenhum SitePreference for explicitamente informado pelo usuário, serão usadas as configurações de preferências padrão do dispositivo móvel. As preferências do site indicadas são armazenadas no SitePreferenceRepository, e a implementação padrão armazena as preferências em um cookie no lado do cliente.
Para habilitar o gerenciamento de preferências do site, adicione a configuração do SitePreferenceHandlerInterceptor ao DispatcherServlet:
<mvc:interceptors> <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" /> <bean class="org.springframework.mobile.device.site.SitePreferenceHandlerInterceptor" /> </mvc:interceptors>
O usuário pode indicar as preferências para o site clicando em um link que submete o parâmetro de consulta site_preference:
<a href="?site_preference=normal">Normal</a> | <a href="?site_preference=mobile">Mobile</a>
O SitePreference indicado é disponibilizado como um atributo da requisição chamado "currentSitePreference". Pode-se também passar o SitePreference atual como um argumento para um método @Controller, depois de configurar o SitePreferenceWebArgumentResolver.
<mvc:annotation-driven> <mvc:argument-resolvers> <bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" /> <bean class="org.springframework.mobile.device.site.SitePreferenceWebArgumentResolver" /> </mvc:argument-resolvers> </mvc:annotation-driven>
Site Switching
A característica de troca de sites (Site Switching) permite que o usuário troque o site de acordo com o dispositivo e as preferências de site indicadas. Há atualmente três implementações para o SiteSwitcher. O método de fábrica "mDot" constrói um SiteSwitcher que redireciona para o endereço m.${DOMAIN}; o método "dotMobi" constrói um SiteSwitcher que redireciona para o endereço ${DOMAIN - TLD}.mobi. E o método "urlPath" constrói um que redireciona para o endereço ${DOMAIN}/${MOBILE_PATH}.
Aqui está um exemplo de como configurar o SiteSwitcher do tipo mDot:
<mvc:interceptors> <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" /> <bean class="org.springframework.mobile.device.switcher.SiteSwitcherHandlerInterceptor" factory-method="mDot"> <constructor-arg value="domain.com" /> </bean> </mvc:interceptors>
Para mais informações, assista o screencast de quatro minutos sobre o Spring Mobile e leia o manual de referência do Spring Mobile. Para começar a usar o Spring Mobile, pode-se baixar a versão de distribuição ou adicionar a seguinte dependência do Maven:
<dependency> <groupId>org.springframework.mobile</groupId> <artifactId>spring-mobile-device</artifactId> <version>1.0.0.RELEASE</version> </dependency>
No GitHub há mais exemplos de uso do Spring Mobile.