在无线互联网开发中,服务器端能够自动获取并识别用户的手机机型、手机浏览器型号、手机号码、IMEI号等几个关键参数,对于提升用户体验、简化用户交互操作以及进行所谓的精准式营销等具有很重要的意义。
与此相关的几个典型的应用场景:
- 用户注册时候,可以直接联网注册,服务器端直接获取用户的手机号和机型,简化注册过程;
- 用户下载客户端或其他软件资源时候不用手工选择厂商及机型;
- 通过wap网关自动获取用户机型,通过wap push方式下发配置信息;
- 用户浏览wap网页时候,能够自动根据用户屏幕大小进行适配,以得到最好的浏览效果
- 根据用户的机型,自动推送相关的内容
1、用户手机机型/浏览器信息获取
从技术层面而言,目前自动获取用户手机机型/浏览器信息的方法:
- 客户端获取:如果有自己的客户端,可以通过各手机操作系统提供的函数来获取操作系统信息,从而得到手机机型信息
- 服务器端获取:从技术角度而言,在用户使用手机浏览器上网时候,在http header的User-Agent中携带了手机机型、浏览器型号的信息,因此实际上可以通过User-Agent来获取用户的机型信息。
例如使用touch diamond中国移动心机版的pie上网的User-Agent完整信息(没有阉割过的)应该为:
dopod S900_CMCC/5.2.1941/WAP2.0 Profile/MIDP2.0 Configuration/CLDC1.1 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)
只不过在中国特色的cmwap环境下,伟大的中国移动秉承与时俱进的河蟹理念,推出了所谓的“白名单”,只有在白名单中的wap服务器才能够获取用户相对 完整的User_Agent,不在白名单中的,只能获取部分无关紧要的信息。于是乎出现了专门以提供白名单服务(UA)为生的公司。
在cmnet条件下倒没有这样的限制,只不过在cmnet昂贵的资费策略下,又有多少人使用这玩意上网。3G时代会更好吗???
2、用户手机号的获取
从技术层面而言,手机的SIM卡上并不会存储手机号码信息,只会存储IMSI(International Mobile Subscriber Identification Number)。手机号码(MSISDN)都是登记在HLR(Home Location Register)中的,在HLR中会把IMSI和MSISDN关联在一起。
中国移动的SIM卡里只有IMSI号码而没有存储手机号码,在中国移动的HLR中会有一张映射表,专门用于把用户手机SIM卡的IMSI号映射成为用户的 手机号码,这就是移动丢卡不丢号的业务也就是缘于此,也是一卡多号的原理。而电信CDMA(原来联通CDMA)的机卡合一的手机卡里会同时存在IMSI和 手机号码。
- 客户端获取:在客户端对移动用户而言只能够获取诸如IMSI、IMEI号等,并不能直接获得手机号。而对电信CDMA机卡合一用户可以获取手机号码。
- 服务器端获取:在早期的移动白名单中是能够获得明文的手机号的,最近移动策略变了,手机号变成了天书般的唯一串号。因此目前从服务器端直接获取手机号也不行了。
目前能够想到的能够相对可靠地自动获取用户手机号的方法只有通过短信方式。
- 通过短信方式:让用户上行一条短信,通过短信网关获取用户手机号,从而将用户id与手机号绑定
3、手机机型信息参数获取
在获取了手机机型及浏览器型号后,必须自己维护一个相对完整的手机机型信息库来做适配操作,对于一般的公司而言,要完整维护一个完备的机型库基本上很难,好在还有很多无私奉献的人在为此做出贡献。
WURFL:http://wurfl.sourceforge.net/
项目的原本用处是做服务器端web、wap多服务用的,在国内这样被河蟹和阉割的环境下,此目的基本上没有太大的意义。
只不过WURFL中关于各种手机机型参数倒是蛮完备的,而且更新也挺及时的,因此将这些数据用于维护手机机型库倒是不错的应用。
例如N95的机型信息:
<device id="nokia_9500_ver1" user_agent="Nokia9500" fall_back="nokia_generic_series80_dp20" actual_device_root="true">
<group id="product_info">
<capability name="uaprof" value="http://nds1.nds.nokia.com/uaprof/N9500r100.xml"/>
<capability name="model_name" value="9500"/>
</group>
<group id="j2me">
<capability name="j2me_midp_2_0" value="true"/>
<capability name="j2me_wav" value="true"/>
<capability name="j2me_bits_per_pixel" value="16"/>
<capability name="j2me_aac" value="true"/>
<capability name="j2me_mpeg4" value="true"/>
<capability name="j2me_screen_height" value="200"/>
<capability name="j2me_mp3" value="true"/>
<capability name="j2me_screen_width" value="640"/>
<capability name="j2me_btapi" value="true"/>
<capability name="j2me_heap_size" value="20971520"/>
</group>
<group id="drm">
<capability name="oma_v_1_0_forwardlock" value="true"/>
</group>
<group id="object_download">
<capability name="ringtone_mp3" value="true"/>
<capability name="video_3gpp2" value="false"/>
<capability name="video_3gpp" value="true"/>
<capability name="video_mp4" value="true"/>
<capability name="ringtone_awb" value="true"/>
<capability name="video" value="true"/>
<capability name="video_wmv" value="false"/>
<capability name="ringtone_aac" value="true"/>
</group>
<group id="sound_format">
<capability name="awb" value="true"/>
<capability name="aac" value="true"/>
<capability name="mp3" value="true"/>
</group>
<group id="image_format">
<capability name="colors" value="65536"/>
</group>
<group id="storage">
<capability name="max_deck_size" value="4194304"/>
</group>
<group id="mms">
<capability name="mms_max_size" value="300000"/>
<capability name="mms_vcalendar" value="true"/>
</group>
<group id="display">
<capability name="max_image_width" value="640"/>
</group>
<group id="bearer">
<capability name="wifi" value="true"/>
<capability name="max_data_rate" value="200"/>
</group>
</device>
4、参考资料
WURFL:http://wurfl.sourceforge.net/
Mobile Browser ID (User-Agent) Strings :http://www.zytrax.com/tech/web/mobile_ids.html
Browser ID (User-Agent) Strings:http://www.zytrax.com/tech/web/browser_ids.htm