Реклама в Telegram-каналах DzikPic и dev.by теперь дешевле. Узнать подробности 👨🏻‍💻
Support us

О мобильных браузерах и определении их свойств

Оставить комментарий
О мобильных браузерах и определении их свойств
При разработке web-приложений, ориентированных на широкую аудиторию, достаточно часто требуется учитывать, что на сайт могут зайти и при помощи браузеров мобильных телефонов. Для таких пользователей хорошо бы предоставлять версию, оптимизированную для показа на мобильном телефоне. Как же определить, чем пользуется конкретный посетитель - мобильным телефоном или одним из "классических" браузеров? В этом посте я попытаюсь рассказать об известных мне подходах. Теоретически, в HTML существует возможность указать альтернативный CSS для мобильных телефонов при помощи конструкции вида <link rel="stylesheet" type="text/css" media="handheld" href="mobile.css" />. Практически, далеко не все телефонные броузеры такое распознают (например, мой телефон такую конструкцию игнорирует напрочь, а краткий поиск в гугле показывает, что и не он один). Кроме того, зачастую определять мобильный браузер приходится не на уровне HTML, а на уровне бизнес-логики приложения (например, в базе данных хранятся разные фотографии товаров - обычные либо минимизированные для показа на мобильном телефоне, и т.д.). Наконец, иногда может потребоваться знать не только тот факт, что пользователь зашёл с мобильного телефона, а ещё и получить доступ к свойствам данного телефона - возможно, получить размер экрана, узнать, "умеет" ли телефон показывать png либо что-то ещё. Кажется очевидным, что для решения данной проблемы следует анализировать заголовок HTTP запроса "User-Agent". В случае мобильных браузеров этот заголовок будет содержать в себе название производителя и модель мобильного телефона. Однако, конкретное значение заголовка остаётся на совесть производителя. Конечно, в первом приближении можно сказать, что браузер мобильный, если User-Agent содержит в себе либо Nokia, либо Sony Ericsson, либо Motorola, и так далее, согласно конфигурируемому списку. Без сомнения, такой способ позволит определять 90 или больше процентов мобильных телефонов. А вот с оставшимися возникнут следующие проблемы: во-первых, существует вероятность забыть какой-то о каком-то экзотическом производителе; во-вторых, список придётся периодически модифицировать в связи с появлением нового производителя, ранее неизвестного широкой публике (такое, кстати говоря, случается минимум несколько раз за год). Ситуация осложнится ещё больше, если по каким-либо причинам требуется не только определять модель телефона, но ещё и получать доступ к некоторым свойствам этого телефона. Соотвественно, требуется найти какой-то сервис, который содержит как как можно больше возможных значений User-Agent, регулярно обновляется, и, желательно, может предоставить те или иные свойства данной модели телефона. Перечислю, что удалось нагуглить: Над этой темой уже несколько лет работает W3C: http://www.w3.org/Mobile/CCPP/, однако какой-либо стандарт пока что отсутствует. Существует open-source проект WURFL: http://wurfl.sourceforge.net/. WURFL - то есть Wireless Universal Resource File - это XML файл, содержащий базу данных по мобильным устройствам (при этом информацию об устройствах вносят пользователи). Для работы с этим файлом существует API на Java, на PHP и вроде даже что-то на .NET, всё распространяется по GPL (впрочем, старая версия API существует и для многих других языков - Perl, Ruby, Python...). Вторым вариантом является DeviceAtlas, http://deviceatlas.com (создано, похоже, одним из предыдущих авторов WURFL). Информация предоставляется в наизапутаннейшем JSON файле, для работы с которым, опять же, предоставляется API на Java, .NET, PHP, Python и Ruby. Проект содержит всё то же, что и WURLF, плюс информация от производителей, операторов связи и прочих. На данный момент собрана информация по более чем 4500 устройств. Ложкой дёгтя послужит то, что проект, увы, платный. Впрочем, существует свободная девелоперская лицензия. И первый, и второй вариант работают по примерно одинаковой схеме: помимо API, требуется скачать (и, конечно же, периодически обновлять, желательно по crontab'у) некий файл с данными (XML в первом случае, JSON во втором). Этот файл в обоих случаях должен быть доступен приложению локально, никаких web-сервисов там нет. И в том, и во втором случае наиважнейшая операция - по строке User-Agent получить какое-либо свойство телефона (список поддерживаемых свойств можно получить здесь http://wurfl.sourceforge.net/help_doc.php и здесь: http://deviceatlas.com/properties, соответственно). Конкретные примеры кода приводить не буду, так как оба API достаточно хорошо документированы и содержат нужное количество примеров. DeviceAtlas апдейтиться, похоже, чаще (последний апдейт на момент написания - 9 июля), WURLF - несколько реже (3 июня). Напоследок, следует отметить о некоторых тонкостях при определении телефона с OperaMini. Дело в том, что этот браузер работает фактически через прокси: запрос идёт на opera.com, который скачивает запрошенные данные, преобразует, оптимизирует и отдаёт телефону. При этом user-agent подменяется на что-то вроде "Opera Mini", узнать модель телефона по нему станет невозможно. Такую ситуацию нужно учитывать: подлинный user-agent будет находиться в заголовке X-OperaMini-Phone-UA. Такая проблема может проявиться, вообще говоря, не только с Oper'ой Mini, но определение других случаев, а также поиск способа решения предоставляем читателю. Автор заранее благодарен за любые дополнения, комментарии, ссылки по теме.
Новый рекламный формат в наших телеграм-каналах.

Купить 500 символов за $150

Читайте также
Программирование «с пеленок» — 5 курсов для детей и подростков
Программирование «с пеленок» — 5 курсов для детей и подростков
Программирование «с пеленок» — 5 курсов для детей и подростков
Хотите превратить увлечение ребенка компьютером в полезное занятие? Мы составили подборку курсов для детей и подростков, которые помогут в этом. В нашем списке есть онлайн и оффлайн-занятия для разного бюджета. Они помогут познакомиться с основами программирования, созданием сайтов и игр, получить ценные знания и навыки и, возможно, станут первым шагом в будущую профессию. 
Microsoft прекращает поддержку Windows Phone 8.1
Microsoft прекращает поддержку Windows Phone 8.1
Microsoft прекращает поддержку Windows Phone 8.1
Сервис по продаже билетов использует ультразвук для передачи данных
Сервис по продаже билетов использует ультразвук для передачи данных
Сервис по продаже билетов использует ультразвук для передачи данных
Wargaming Mobile поможет независимым разработчикам в запуске игр
Wargaming Mobile поможет независимым разработчикам в запуске игр
Wargaming Mobile поможет независимым разработчикам в запуске игр

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

Комментариев пока нет.