Inicio > Internet, Mobile Web, Movil, Varios, WWW > WURFL (Wireless Universal Resource FiLe) y Tera-WURFL para detección de capacidades de dispositivos móviles

WURFL (Wireless Universal Resource FiLe) y Tera-WURFL para detección de capacidades de dispositivos móviles

Debido a que existe una gran cantidad de navegadores para dispositivos móviles es complicado para los desarrolladores construir aplicaciones que trabajen adecuadamente en la mayoría de los dispositivos, de entrada necesitamos conocer las características que cada dispositivo soporta y las diferencias entre dispositivos; además de que se debe evitar modificar las aplicaciones cuando un nuevo modelo salga al mercado.

Los navegadores y dispositivos son diferentes, pero comparten muchas características en común entre ellos, muchas veces son del mismo fabricante, y son por lo general una evolución del mismo hardware/software, por lo tanto las diferencias entre modelos de un mismo fabricante son mínimas además que los dispositivos de diferentes fabricantes comparten también características y pueden correr la misma aplicación, es por esto que es mejor servir el contenido de nuestras aplicaciones basado en las características que soporta el dispositivo, en lugar de servir el contenido de acuerdo al modelo del dispositivo.

WURFL y Tera-WURFL son depósitos globales de dispositivos móviles y las capacidades que soportan, están orientados para ayudar a los desarrolladores en la construcción de mejores aplicaciones y mejores servicios para los usuarios, mientras que WURFL es un archivo de configuración XML, Tera-WURFL es una base de datos MySQL (SQLServer en su versión beta) que usa WURFL como su fuente de datos, ambas son herramientas muy útiles para detección de dispositivos, sus capacidades y características de manera programática, algunos ejemplos de uso podrían ser:

  • Redirección a versiones móviles de los sitios.
  • Detectar el tipo de video que el dispositivo móvil del usuario soporta.
  • Detectar usuarios iPhone, iPad, iPod y redirigirlos a sitios específicos para estos dispositivos.
  • Detectar la resolución de la pantalla del dispositivo del usuario para servir las imágenes adecuadas para esa resolución.
  • Detectar soporte de javascript, java o flash lite.
  • Detectar si es un dispositivo touch.

WURFL está basado en el concepto de familias de dispositivos. Todos los dispositivos son descendientes de un dispositivo genérico, pero pueden también descender de familias más especializadas, este mecanismo llamado ‘fall_back’, permite a los desarrolladores derivar las capacidades de un teléfono buscando las capacidades de su familia, a menos que una cierta característica sea específicamente diferente para ese teléfono.

Por ejemplo Nokia tiene varias versiones del modelo 7110, algunas de estas no soportan tablas WML,  otras si, WURFL extrae este conocimiento gracias al mecanismo fall_back:

La familia genérica especifica una capacidad llamada “table_support”

<device fall_back=”root” id=”generic” user_agent=””>
<group id=”ui”>
:
<capability name=”table_support” value=”true” />
</group>

Esto se lee como “Dispositivos WAP Genericos soportan tablas WML”

De manera inicial, los telefonos Nokia soportan tablas porque heredan de generic (fall_back=”generic”):

<device user_agent=”Nokia” fall_back=”generic” id=”nokia_generic”>
<group id=”ui”>
<capability name=”Capacidades que acepta este grupo” value=”false” />
</group>
</device>

Tomando en cuenta el soporte de tablas, el codigo anterior implica que para un dispositivo Nokia generico (nokia_generic) debe ser usado el mismo valor que tiene en generico.

<device user_agent=”Nokia7110/1.0 (04″ fall_back=”nokia_generic” id=”nokia_7110_ver1″>
<group id=”ui”>
<capability name=”table_support” value=”false” />
</group>
</device>
<device user_agent=”Nokia7110/1.0 (04.67)” fall_back=”nokia_7110_ver1″ id=”nokia_7110_ver1_sub467″ />
<device user_agent=”Nokia7110/1.0 (04.69)” fall_back=”nokia_7110_ver1″ id=”nokia_7110_ver1_sub469″ />
<device user_agent=”Nokia7110/1.0 (04.94)” fall_back=”nokia_7110_ver1″ id=”nokia_7110_ver1_sub494″ />
<!– 7110 new-age –>
<device user_agent=”Nokia7110/1.0 (05″ fall_back=”nokia_7110_ver1″ id=”nokia_7110_ver2″> <group id=”ui”>
<capability name=”table_support” value=”true” />
</group>
</device>
<device user_agent=”Nokia7110/1.0 (05.00)” fall_back=”nokia_7110_ver2″ id=”nokia_7110_ver1_sub500″ />
<device user_agent=”Nokia7110/1.0 (05.01)” fall_back=”nokia_7110_ver2″ id=”nokia_7110_ver1_sub501″ />

Tomando en cuenta de nuevo el soporte de tablas, el código anterior se lee como “hay una familia de teléfonos de 7110 para la cual las tablas no son soportadas y hay una familia para la cual si son soportadas”, Todos los modelos 7110 están en la lista anterior, pero cada uno hereda de una u otra subfamilia, con esto se puede conocer si un dispositivo soporta tablas o no.

WURFL trabaja por medio de API’s (java y php) y genera un cache para hacer mas rápido las consultas (el archivo XML pesa más de 15MB), por lo que cuando se instala y se ejecuta por primera vez tarda tiempo dependiendo del servidor pero ya las siguientes veces corre considerablemente mas rapido el cache puede ser por medio del sistema de archivos, Memcache, APC, EAccelerator y RDBMS y se especifica el método por medio del archivo de configuración de WURFL (WURFL-config.xml)

Para mas información de como descargar e instalar el api de php hay que visitar esta liga: http://WURFL.sourceforge.net/nphp/
Para descargar el archivo XML visitar esta liga: http://sourceforge.net/projects/WURFL/files/WURFL/

Una vez instalada la api (php), solo se necesita una manera eficiente para leer la información y usarla en las aplicaciones móviles para personalizarlas dinámicamente de acuerdo a las capacidades que soporte los dispositivos y estar al pendiente de actualizar el archivo XML para soportar los nuevos dispositivos que vayan entrando al mercado, el código básico php para utilizarla es:

<?php
$WURFLconfig = ‘/ruta_donde_esta_el_archivo/de_configuracion/WURFL-config.xml’;
$WURFLmanager = WURFL_WURFLManagerProvider::getWURFLManager($WURFLconfig);
$device = $WURFLmanager->getDeviceForHttpRequest($_SERVER);
?>

En el código anterior la primer línea especifica la ruta en donde se encuentra el archivo de configuración, en la segunda se instancia el manejador WURFL que es la interfaz que se usa para hacer las operaciones como crear instancia del dispositivo por medio de una petición HTTP o una cadena de agente de usuario, y en la tercera se instancia la variable $device que regresa un arreglo que contiene una gran cantidad de información acerca del dispositivo por ejemplo:

Array (
[resolution_width] => 770
[resolution_height] => 300
[rows] => 30
[columns] => 77
[max_image_width] => 600
[max_image_height] => 600]
[wbmp] => false
[bmp] => true
[epoc_bmp] => false
[gif] => true
[gif_animated] => true
[jpg] => true
[png] => true
[tiff] => false
[flash_lite] => false
:
)

Para ver completo los valores del arreglo visitar http://WURFLapi.pointbeing.net/

Por otro lado Tera-WURFL es una librería basada en PHP y MySQL que usa usa los datos del archivo XML WURFL y los pone en la base de datos MYSQL para identificar las capacidades de dispositivos móviles, la librería encapsula las consultas a la base de datos y provee una interfaz simple orientada a objetos de los datos además provee una interfaz para obtener la ultima versión del archivo XML de WURFL de sourceforge e importarla a la base de datos.

Una de las principales ventajas sobre WURFL es el rendimiento, normalmente entre 5 y 10 veces mas rápido, como la generación del objeto implica varias consultas, Tera-WURFL guarda el resultado como una cadena serializada en en una tabla dedicada, lo que significa que las siguientes peticiones del mismo agente de usuario es reducida a una sola consulta de esa tabla a la llave primaria (que es el agente de usuario), esto combinado con el cache mismo de MySQL, hace que sea mucho más rápido al ahorrarse muchas las consultas.

El código básico php para utilizarla es:

<?php
require_once ‘/ruta_donde_esta_el_archivo/tera_WURFL/tera_WURFL.php’;
$device = new Tera_WURFL();
$device->getDeviceCapabilitiesFromAgent($_SERVER[‘HTTP_USER_AGENT’]);
?>

En la primer línea se especifica donde está el archivo tera_WURFL.php que es necesario, en la segunda se instancia la clase para poder usar tera-WURFL y en la tercera se obtiene las capacidades del agente de usuario (en caso de no encontrar ese agente de usuario busca en la cabecera HTTP-ACCEPT), en un arreglo que contiene la información acerca del dispositivo, la diferencia con el API de WURFL radica en que el arreglo de Tera-WURFL es multidimensional mientras que el de WURFL API es unidimensional, la librería requiere que pasemos $_SERVER[‘HTTP_USER_AGENT’] como parámetro para el método getDeviceForHttpRequest(), esto es la cabecera de HTTP de agente de usuario basada en la cual las consultas de Tera-WURFL usarán como parámetro en la base de datos para obtener los detalles del dispositivo a diferencia de la API de WURFL que pasa $_SERVER la cual contiene todas las cabeceras de petición del protocolo HTTP.

Para ver un ejemplo del arreglo completo visitar: http://tw.pointbeing.net/

Un ejemplo para detectar si el visitante es un usuario móvil y redirigirlo sería:

<?php
require_once ‘/ruta_donde_esta_el_archivo/tera_WURFL/tera_WURFL.php’;
$wurflObj = new Tera_WURFL();
$wurflObj->getDeviceCapabilitiesFromAgent($_SERVER[‘HTTP_USER_AGENT’]);
if ($wurflObj->getDeviceCapability(“is_wireless_device”)) //detectar si es un usuario movil
header(“Location: http://www.sitioweb.com/movil/&#8221;)//redireccionar
?>

Para descargar tera-WURFL: http://www.tera-wurfl.com/wiki/index.php/Downloads

Un problema de usar la cabecera de agente de usuario como parámetro (HTTP_USER_AGENT) es que algunos operadores cambian el agente de usuario y lo reemplazan con alguna cadena genérica, por ejemplo un usuario de Blackberry puede cambiar en las configuraciones del navegador la identificación de navegador con el que quiere navegar (BlackBerry, Firefox, Internet Explorer) por lo que si lo cambia de su modo normal (Blackberry) no se van a servir las paginas adecuadamente, otro ejemplo es Opera mini que envía su propia cabecera user-agent la cual no especifica los detalles del dispositivo en el cual está corriendo y genera otra cabecera (HTTP_X_OPERAMINI_PHONE_UA) en donde especifica el agente de usuario original, para ver un poco mas sobre esto visitar este link http://www.tera-wurfl.com/Tera-Wurfl_Doc/TeraWurfl/WurflSupport.html

Fuentes:

Pagina principal de WURFL: http://wurfl.sourceforge.net/

Grupo de Facebook de WURFL http://www.facebook.com/group.php?gid=91445168918

Grupo de Yahoo de WURFL http://tech.groups.yahoo.com/group/wmlprogramming/

Página principal de tera-WURFL: http://www.tera-wurfl.com/wiki/index.php/

Introducción a tera-WURFL: http://pointbeing.net/weblog/2008/03/introduction-to-tera-wurfl.html

WURFL Api: http://pointbeing.net/weblog/2009/04/a-first-look-at-the-new-wurfl-api-for-php.html

Otras ligas relacionadas:

Artículo sobre Detección de navegadores: http://www.jibbering.com/faq/notes/detect-browser/

Open Mobile Alliance http://www.openmobilealliance.org/

Opera Mini request headers http://dev.opera.com/articles/view/opera-mini-request-headers/

Tips a tomar en cuenta para diseñar aplicaciones móviles: http://labs.thesedays.com/2010/07/16/10-tips-for-designing-mobile-websites/

Ligas para desarrollo orientado a iPhone http://www.juan-anzaldo.com/2010/iphone/iphoneDev.html

WALL for PHP http://wall.laacz.lv/

Para usar tera-WURFL sin necesidad de instalarlo: http://wurfl.thesedays.com/

  1. Daniel
    agosto 20, 2011 a las 9:15 pm

    Hoola saludos
    tengo una pregunta… si dentro del if donde se identifica si el dispositivo es movil tengo que obtener algunas caracteristicas, como puedo poner en un if una sentencia con la que pueda saber encuentra para entonces proceder a la obtencion o si no, pss entonces direccionarlo..?

  1. septiembre 8, 2010 a las 1:08 am
  2. noviembre 8, 2010 a las 7:15 pm

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: