Sinclalir Li,
Yu Zheng,
SWO
2014-08-07

一, User Agent string

中文名称“用户代理”,它是浏览器大战时代的产物(可在“百度百科”搜索“用户代理”来了解一下浏览器发展史),要用于服务器识别浏览器端设备的各种能力,以便服务器端发送与 之能力相应的内容。也就是项目中经常遇到的"User Agent String"(或Ua string)。由于数据业务是近年来手机的主要功能,很多数据服务网站仍需要参考UA信息提供正常服务, 尤其在运营商的服务系统中使用最多。

二,User Agent string 分类

和公司的产品线主要分为feature phone和smart phone一样,Ua string 也因平台不同有所不同,但主要也分为feature phone 和smart phone 两大类; 根据手机应用的不同,又可分为browser UA和MMS UA. 其中下面先介绍browser UA,即浏览器中使用到的UA string.

1,针对smartphone 而言,当前browser UA分为以下几类:

  1.1   Android 平台智能机,分为以下两种情况

    (1),一般Android 平台项目, UA string规则

该ua string规则,主要针对的是default 浏览器(注意不是chrome浏览器),它一般存在于Google CDD文档3.4 Web Compatibility章节中(见左侧Google CDD 文档),会定义具体的android 版本所对应的Ua string格式、参数,项目组可将其中的参数确认好,再将拼合在一即可。


例如,ONE TOUCH 6012X的UA string为
Mozilla/5.0 (Linux; Android 4.4.2; en-us; ONE TOUCH 6012X Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36

另外,需要注意的是:
  • 务必选择android版本对应的的CDD文档
  • 注意ua string字符间的空格问题
  • 注意ua string参数$(Model) ,指的是about phone -> module nubemr的值,请项目组务必认真确认好。
  • 关于参数$(Local) ,默认中出中国区为"zh-cn", Global为en-us即可,且这个参数会跟随着手机系统参数的修改而自动更新。
  • 运营商可能会对User ageng string进行相关定制工作,比如Vodafone,经常要求在最后面加上SVN版本号,例如SVN/XX.XX.XX.XX,项目只要按着他们的需求定制即可
  • 关于android 4.4 user agent string中新增的chrome version,请项目组通过使用android default browser访问 logme.mobi来读取chrome真正的版本号,直接查看chrome 浏览器应用的版本是不对的
    (2),中国移动项目(google android 平台 )CMCC UA string 规则
与OEM厂商不同,仅中国移动定义了自己的一套UA准则,与其Google的格式有所不同,其中需要确认的参数也有所不同,项目组只要按照它的格式确认即可。
例如: TCL S838M /V1 Linux/3.4.5 Android/4.3 Release/JELLYBEAN browser/AppleWebKit534.30 Mobile Safari/534.30 MBBMS/2.2 System/Android 4.3;
  • 友情提醒下:根据之前的项目反馈,CMCC user agent string中一旦出现TCL字符,就报出google search无法使用的问题,一般项目都修改为TCT
1.2,Firefox UA string规则

Firefox 系统对UA并无相关可供参阅的文档,根据既往的经验项目组可以通过下面两个步骤来生成Ua String

(1)使用默认浏览器访问what'smyuseragent.com或者logme.mobi,确认当前系统的默认的浏览器user agent 是什么,一般而言应该是类似于下面的字符串,且红色的部分会 随着Firefox OS的版本变化而不断变化。

Mozilla/5.0 (Mobile; rv:28.0) Gecko/28.0 Firefox/28.0

(2)鉴于Mozilla提供的UA string中并不包括与产品名相关的任何信息,导致运营商想要定制的相关部分无法实现,比如运营商服务器根据UA string来识别特定手机,以此来提供特定的服务 。

  经过我们内部与Mozilla的长期沟通,最后达成了一致,即在Firefox系统的User agent string另加入产品名,例如下所示, 需要项目组确认的是请确认产品名与下面的一致。

Mozilla/5.0 (Mobile; ALCATELOneTouch4012X; rv:18.1) Gecko/18.1 Firefox/18.1

(3)根据Mozilla方面确认的信息,MMS 并无特定格式的UA string,它与Browser 共用同一个UA string.

1.3 Windows phone UA规则

鉴于公司当前仅做过一款wp的产品,所以对此系统的user agent并无太多的参考资料,留待下一步研究。

2,针对feature phone browser UA:

feature phone时代,由于各家使用操作系统不尽相同,也就造成了不同的厂商使用不同的的UA string规范。我们公司也有自己的UA string规范,主要由产品名,java能力,浏览器版本组 成,具体详见下图:
另外,有下面一些事情需要注意:

  • 软件版本号默认为1.0,针对有软件版本号需求的运营商需求,可以直接修改该版本号
  • 如果当前feature phone并不支持Java,可省略JAVA部分
  • 注意字符间的分隔符及空格
  • 浏览器的类型和名称可能会随着项止使用的不同有所更改,比如ObigoInternetbrowser/Q3C,DORADO/2.0(展讯平台)
  • 不管当前feature phone使用提MTK平台还是展讯平台,feature phone ua规范都适用.

3, MMS UA介绍

  • 关MMS UA string一直以来都没有一个正式的说法和规范。
  • 当前针对feature phone和smart phone自定义了如下的规范
    • feature phone的MMS UA String与browser UA 共用
    • Android平台的MMS UA string使用下面的规范"产品名-MMS/2.0",例如"ONE_TOUCH_6032X-MMS/2.0"
    • Fireofx phone, Windows Phone由于并没有相关明确说过与MMS ua string的相关信息,所以这两种平台没有MMS string
    • 从当前的智能手机发展趋势来看,MMS UA string很快会消失,不再需要

三,User agent string 中经常遇到的问题

1,feature phone

  根据既往的经验,项目组经常会遇到手机浏览器在打开网页时,服务器端提供的不是适合手机端浏览的页面, 而是pc版本页面的问题。这种情况一般都是由于服务器没有正确解析UA string 所导 致的, 主要原因在于Feature Phone时代,不同的厂家并无一致的UA string规范,所以导致服务器也没有统一的规范来解析,所以出现这种问题并不奇怪。解决方法是去相关网站联系注册UA string。 一般而言需要CTS出面处理,但相关的注册的范围也仅限于运营商的网页。对于其它非运营商网站出现该问题,SWO认为没有必要去花太大的精力去Push.

2, Smartphone

  在android系统,我们当前存在多种名称定义,包括commerical name, marketing name, module name, code name等,但User agent string会用的仅仅是code name,它应该仅仅与about phone -> module number保持一致,主要用于与在进行google CTS测试时会核对这两项是否一致,其它的命名规则与UA无关。

3, 关于user agent 信息的备份

  由于user agent信息在运营商投标中会被频繁用到,所以在项目组申请UA信息的请务必做好备份工作,备份的内容主要包括:
  • user agent string
    • browser user agent string
    • MMS user agent string (如果与browser user agent 不同)
  • Profile 链接
一般情况下,ua string和profile必需同时备份。 。由于当前在线自动生成的系统尚在酝酿中,所以备份工作暂由上海,宁波,成都,深圳,惠州sides 的UA信息负责人手动操作备份。备份网址链接如下:
User Agent Backup
请在打开该链接后找到文件“Project User agent info(From_2014_10_29)”。由于该文件所在的SPS系统使用了VSS版本独占管理工具,所以各位在编辑完文件后,务必“签收入/check in ”至服务器,否则后面的人无法编辑该文件。 如果不了解“签入/签出”操作方法,请参考同网页中“A_关于Check in_Check out“文件。