Впервые в своей практике, делал мобильную версию сайта. Должен скачать, что сделать сайт, который одинаково работал бы на огромном зоопарке мобильных браузеров, задача не из легких. Однако, в этой статье речь пойдет не об этом.
После того, как сайт был готов, возникла необходимость автоматически определять с какого типа устройств зашел пользователь, и отправлять его на соответствующую версию сайта.
Самый верный вариант: проверять возможности браузера при помощи js и затем перенаправлять. Но, это не подходит если мы не хотим чтобы пользователь грузил лишние килобайты, а автоматически был перенаправлен на нужную страничку. Поэтому требовалось серверное решение.
Когда-то, очень давно, я слышал про сервис Яндекс.Детектор. Его назначение просто и понятно: вы отправляете ему заголовки или user_agent, которые прислал Вам браузер, а сервис в ответе присылает технические характеристики устройства. То ли сервис чего-то напутал, то ли я чего-то не понял, но Яша упорно не мог определить ни десктопные браузеры, ни мобильные. Единственно верно он определил мобильный браузер моего Fly (на Андроие 2.3.5). Такой расклад меня мягко говоря не устроил, я решил поискать другие решения.
Как я и предполагал, одной из самых популярных решений - это поиск ключевых слов типа IPhone, Android, Blackberry и т.п. в user_agent браузера. Примеров в сети было много, и собрав несколько из них вполне можно было получить работоспособную функцию. Но учитывая дико растущий рынок смартфонов, и появления новых девайсов и операционок, я все же надеялся найти сервис, который бы пополнялся изо дня в день.
Такого сервиса я не нашел, но было найдено компромиссное решение: определение браузера по ключевым словам, но с использованием постоянно обновляющегося класса написанного на php. Раз в пол года, Вы обновляете скрипт, и получаете всегда актуальную проверку.
Представляю Вам легкий класс PHP для обнаружения мобильных устройств mobiledetect. Вот, что пишут его создатели про свой скрипт
Mobile_Detect это легкий класс PHP для обнаружения мобильных устройств. Он использует строку user агента в сочетании со специфическими заголовки HTTP для обнаружения мобильной среды.
Скачать скрипт можно на его githab страницы
Использовать достаточно просто
Подключение
<?php include 'Mobile_Detect.php'; $detect = new Mobile_Detect();
В наше время никого не удивишь 3-мя версиями сайта: основной(для десктопа), адаптированной(для планшетов), и мобильной.
Метод, который позволит определить, что пользователь зашел с мобильного устройства (смартфон, телефон и т.п.):
<?php if ($detect->isMobile()) { // выводим мобильную версию сайта }
С планшета
<?php if($detect->isTablet()){ // выводим адаптированную версию браузера }
Я не делал отдельной адаптированной версии, поэтому меня устроил такой вариант:
if ($detect->isMobile() or $detect->isTablet()){ // выводим мобильную версию }
Для моего проекта было актуально: показывать рекламу того приложения для устройства с которого зашел пользователь. Т.е. зашел он с Android, предлагаем ему скачать Android программу из Play Store, зашел с Iphone даем ссылку на AppStore. С данным классом определить операционную систему можно так:
<?php if($detect->isiOS()){ // выводим рекламу для яблокофонов }
<?php if($detect->isAndroidOS()){ // рекламируем приложение корпорации добра }
Есть еще куча методов isIphone(), isIpad(), isBlackBerry(), isKindle(), isOpera() и т.д. полный список можно посмотреть запустив demo.php из скачанного архива, либо на demo странице официального сайта скрипта
Проект активно развивается, и используется уже в куче известных систем Drupal, WordPress и т.д.
В конце лишь напишу, что надо дать возможность пользователю решать, нужна ли ему мобильная версия. Я сделал так: в самом низу мобильной версии сайта, была ссылка на основной сайт, но с параметром http://sitename.ru/?nomobile
А на сервере просто ставим куку, чтобы в дальнейшем не перенаправлять этого пользователя. Примерно так:
if( isset($_GET['nomobile']) ){ setcookie('nomobile','1',time()+3600*24,'/'); $_COOKIE['nomobile'] = 1; } define('NOMOBILE',isset($_COOKIE['nomobile']));
и наш скрипт автоматического перенаправления будет выглядеть так:
require_once 'Mobile_Detect.php'; $detect = new Mobile_Detect(); if(!NOMOBILE and ($detect->isMobile() or $detect->isTablet())){ header("Location: ".'http://m.'.$_SERVER['HTTP_HOST']); exit(); }
Спасибо за внимание
Комментарии
RSS лента комментариев этой записи