?

Log in

No account? Create an account

Previous Entry | Next Entry

"UAProf" - Wapforum реализация W3C стандарта "CC/PP". Иногда употребляются как синонимы.

Предназначение CC/PP, UAProf - предоставить серверу (а также прокси и гейту) информацию о технических возможностях мобильного устройства (телефона)  пользователя и о его, пользователя предпочтениях (например, на каком языке он предпочитает видеть контент, включён ли у него звук и т.п.).
 

Информация об устройстве и его установках передаётся в X_WAP_PROFILE (http header "x-wap-profile" или "profile" ) либо в виде ссылки на .xml/rdf лежащий на сайте производителя телефона, либо в виде самого .xml (реже, т.к. он большой). Возможны смешанные варианты, когда внутри xml отдельные блоки представлены ссылками.
К примеру, общий профайл телефона может содержать ссылки на блоки относящиеся к Software (и хранящиеся на сайте symbian.com), Hardware (на сайте nokia.com) и UserPreferences (прямым XML'ем, в профайле).

Этот подход позволяют обеспечить эффективное кэширование и минимизировать трафик между устройством и гейтом.

Поскольку реальные устройства по установкам отличаются от исходных заводских (например, может быть увеличена память или в данный момент быть выключен звук) отличия передаются отдельно, в X_WAP_PROFILE_DIFF (http header "x-wap-profile-diff" или "profile-diff") хотя, по стандарту они вполне могут быть включены внутрь X_WAP_PROFILE.
С точки зрения обмена между устройством и гейтом, при выключении звука на устройстве, гейту посылается только информация об этом факте, после чего гейтом вносится изменение в хранящийся в кэше профайл. С точки зрения же сервера, гейт выдаёт полную информацию (кэш+изменения присланные ему устройством). Данный факт отражается в X_WAP_PROFILE_WARNING соответствующим кодом.

Вся передаваемая через CC/PP информация относится исключительно к текущей HTTP сессии.

Важно, что прокси/гейты могут менять передаваемый профайл, дополняя его новыми разделами (например, для учёта ограничений накладываемых данной сотовой сетью) или заменяя ссылки на блоки их реальным содержимым. Причём, если достать содержимое по ссылке не удалось, прокси/гейт может послать обратный запрос устройству с целью получить полный профайл (не содержащий ссылок).

Свойства (capabilities) устройств стандартизированы, их словарь содержится в XML Scheme,  на который ссылается профайл (например: http://www.wapforum.org/profiles/UAPROF/ccppschema-20020710 ). Однако, некоторые производители могут добавлять свои свойства, в этом списке отсутствующие или использовать разные словари. Так что, одно и то же свойство потенциально может быть обозначено по-разному. Кроме того, есть жалобы на недоступность профайлов на сайтах производителей и на ошибки в них.

Кстати, существует возможность устраивать DOS атаки, указывая в профайле вместо ссылок на блоки, ссылки на атакуемую систему.

По данным на 2007 год CC/PP профайлы передают примерно 70% устройств.

Встречаются сайты, где люди собирают базы данных по устройствам, преимущественно на основе UAProf, но кто во что горазд в смысле форматов и условий доступа. К примеру:
http://wurfl.sourceforge.net
http://www.mobilemultimedia.be/en/uaprof/parser.php
http://www.detectright.com/page/index
http://devices.pdata.ru/
http://deviceatlas.com/devices

Итак, с практической точки зрения (реализация WAP сайтов, учитывающих возможности девайса) существуют два разных подхода:

1.Принимаем CC/PP профайл, на лету распарсиваем и решаем, что и как отдавать.

Недостатки:
- Запрос на получение блоков профайла по ссылкам может отнимать очень ощутимое время.
- Не все телефоны присылают CC/PP профайл. Некоторые присылают его не вполне корректно.

Так что, первый вариант представляется неразумным.

2.Принимаем USER_AGENT, содержащий название телефона. На его основе лезем в базу (расположенную у нас), из которой достаём нужную информацию о его возможностях. Если данный телефон передал еще и CC/PP данные, _при_необходимости_  достаём из них то, что относится к настройкам телефона и используем совместно с данными из нашей базы.

Если исходить из варианта (2) то можно идти как минимум двумя путями:

а) Сформировать эту базу самим, путём сбора статистики HTTP заголовков с какого-нибудь нашего посещаемого WAP сайта.

б) Использовать существующую базу WURFL, бесплатную и свободную в т.ч. и для коммерческого использования (содержит около 5000 устройств, обновляется, по одному из исследований покрывает порядка 75% устройств. UAProf - 70%).

Полезные ссылки:

http://www.w3.org/Mobile/CCPP/ - (официальная страница CC/PP)
http://www.w3.org/TR/NOTE-CCPP/ (общее описание CC/PP)
http://www.w3.org/TR/NOTE-CCPPexchange (передача CC/PP данных поверх HTTP)
http://www.w3.org/TR/CCPP-struct-vocab/ (общее описание CC/PP)
http://www.wapforum.org/profiles/UAPROF/ccppschema-20020710 (пример списка возможностей устройств по CC/PP)
http://delicon.sourceforge.net/profiles.html (список UAProf профайлов устройств. 500 шт.)
http://www.w3.org/TR/REC-rdf-syntax/ (RDF)
http://en.wikipedia.org/wiki/UAProf
http://developer.openwave.com/dvl/tools_and_sdk/wurfl_and_wall/intro_wurfl.htm (популярное описание WURFL)
http://www.wapforum.org/what/technical/SPEC-UAProf-19991110.pdf - стандарт UAProf (не самая свежая версия)
http://delicon.sourceforge.net/ (DELI API and validator for UAProf and CC/PP. Java.)
http://www.detectright.com/docs/DetectRight_Compared.pdf (сравнительная таблица особенностей WURLF, UAProf, DetectRight, Browsercaps)
http://developer.openwave.com/dvl/tools_and_sdk/wurfl_and_wall/intro_wall.htm
http://wall.laacz.lv/

(написано несколько месяцев назад)


Tags:

Comments

( 2 comments — Leave a comment )
wasechkin
Apr. 10th, 2009 08:52 am (UTC)
Спасибо, за пост. Сейчас решаю сходную проблему.

Можем ли мы анализируя все хедеры с высокой долей уверенности определить - Mobile device к нам пришел или general browser?

Предположим, что UA не определяется в существующих базах, а UA-Prof не передаётся.
cr_it
Apr. 10th, 2009 10:48 am (UTC)
"mobile device" - понятие растяжимое.
Скажем так - если надо выяснить является ли девайс компьютером или это мобильный телефон, то мне видится только два более-менее надёжных подхода:
1.смотрим HTTP_USER_AGENT и ищём там определенные характерные подстроки (samsung, nokia и т.п.)
2.смотрим REMOTE_ADDR и сверяемся по базе - относится ли он к ip диапазонам принадлежащим сотовым операторам.
И то и другое при аккуратном подходе даст более 90% точности, мне кажется. Обычно используют вариант (1). Пример из одного wap счётчика:

if(strpos($ua, "SonyEricsson") !== false) $brand = 2;
elseif(strpos($ua, "Nokia") !== false) $brand = 3;
elseif((strpos($ua, "SAMSUNG") !== false) || (strpos($ua, "Samsung") !== false) || (strpos($ua, "SGH-") !== false)) $brand = 4;
elseif(strpos($ua, "SIE") !== false) $brand = 5;
elseif(strpos($ua, "MOT") !== false) $brand = 6;
elseif(strpos($ua, "LG") !== false) $brand = 7;
elseif(strpos($ua, "SAGEM") !== false) $brand = 8;
elseif(strpos($ua, "Opera") !== false) $brand = 9;
elseif(strpos($ua, "Panasonic") !== false) $brand = 10;
elseif(strpos($ua, "FLY") !== false) $brand = 11;
elseif(strpos($ua, "SHARP") !== false) $brand = 12;
elseif(strpos($ua, "PHILIPS") !== false) $brand = 13;
elseif(strpos($ua, "Alcatel") !== false) $brand = 14;
elseif((strpos($ua, "Mozilla") !== false) || (strpos($ua, "MSIE") !== false) || (strpos($ua, "Netscape") !== false)) $brand = 15;
else $brand = 1;
( 2 comments — Leave a comment )