做无线应用不像普通互联网应用那么简单,其中最麻烦的要数客户端适配的问题。全世界的手机千千万万种,屏幕尺寸、分辨率、颜色数、浏览器、操作系统、虚拟机版本等等全都不一样。要以统一的服务器端架构满足这么多种不同的客户端,并非易事。其中最困难的就是,你怎么知道客户端的配置是什么样的?
当然,HTTP协议提供了UA header,根据这个,可以拿到终端的具体型号,下面要做的就是,根据这个型号找到各种各样的规格属性了。
WURFL正是做这个事情的,它的全称是Wireless Universal Resource File,主页架在Source Forge上,
http://sourceforge.net/projects/wurfl/files/
。可以把WURFL理解成一个开源的免费的很大的XML文件,里面收集了世界上所有手机的技术参数。它是由全世界千千万万的好心人,大部分都是无线开发领域的技术人员,利用课余时间辛辛苦苦收集来的。项目的负责人叫Luca Passani,一个意大利帅哥。
WURFL真正体现了开源的精神,“源于大众,服务大众”。这是任何一个封闭的组织或者团体无法实现的。比如说,微软会把它弄成一个自己私有格式的二进制数据库,附带一个3D效果的图形化管理界面,至少一千页以上的技术文档,外加C++的API和在线激活系统,文件量600M左右,售价200美刀。现在的普遍使用的版本应该是WURFL XP,新的WURFL Vista已经上市,但由于价格涨到了2000美刀,且存在一些安全漏洞,所以买者寥寥。大多数穷苦的IT人员更愿意选用盗版的上海VLK版WURFL Vista……如果是中国政府就更不用说了,联合全世界从来就不是它的目标,它更愿意关起门来在自己家里搞搞和谐,抓抓黑砖窑包身工什么的。
闲话少说,下面就来扫一眼WURFL文件。它是个XML文件,目前的大小约为4M。格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<wurfl>
<version>...</version><!--这里说的是WURFL的版本信息,跳过-->
<devices><!--这个元素里包含了所有的设备信息,devices里包含了成千上万个device元素-->
<device user_agent="Nokia3100" fall_back="nokia_generic_series40" id="nokia_3100_ver1">
<!--这是一个设备,user_agent给出了UA信息,id给出了设备在WURFL中的ID号,fall_back给出了它的父设备的ID号-->
<!--设备的属性是继承的,如果当前设备里找不到某个属性,就继承它父设备的,直到最终的根设备-->
<group id="product_info"><!--属性按照类别进行分组,一个device下面可以有很多的group-->
<capability name="model_name" value="3100"/><!--capability代表一个属性,每个group里可以有很多capability-->
...
</group>
...
</device>
...
</devices>
</wurfl>
整个WURFL就是这么简单,稍懂XML的人都可以写个几十行的小程序读取里面的信息。由于XML的可读性,闲着没事用记事本把这个文件打开,瞅瞅自己的手机是个啥性能,也挺好玩的。
WURFL整个开源项目的地址: http://sourceforge.net/projects/wurfl/files/