Często bywa tak, że chcemy utworzyć mobilną wersję naszego serwisu. Cechuje się ona przeważnie skromniejszą szatą graficzną oraz umiarem w wykorzystaniu JavaScriptu. Aby wykryć przeglądarkę mobilną (używaną w telefonach komórkowych, smartphone lub palmtopach) wystarczy użyć poniższej klasy. W zaprezentowanym rozwiązaniu detekcja przeglądarki oparta jest o nagłówek HTTP_USER_AGENT lub o dodatkowe nagłówki wysyłane przez niektóre przeglądarki.
class MobileBrowserDetector
{
private static $mobileAgentPrefixes = array(
'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
'wapr','webc','winw','winw','xda','xda-'
);
private static $mobileAgentParts = array(
'up.browser', 'up.link', 'mmp', 'symbian', 'mobile safari',
'opera mobi', 'android', 'smartphone', 'midp', 'wap', 'phone'
);
public static function isMobile($userAgent = '')
{
if (!strlen($userAgent)) {
$userAgent = $_SERVER['HTTP_USER_AGENT'];
}
$isMobile = false;
$isMobile |= in_array(strtolower(substr($userAgent, 0, 4)), self::$mobileAgentPrefixes);
$isMobile |= preg_match(sprintf('#(%s)#i', implode('|', self::$mobileAgentParts)), $userAgent);
$isMobile |= strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') !== false;
$isMobile |= isset($_SERVER['HTTP_PROFILE']);
$isMobile |= isset($_SERVER['HTTP_X_WAP_PROFILE']);
$isMobile |= isset($_SERVER['ALL_HTTP']) && strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini') !== false;
return (bool)$isMobile;
}
}
Możemy łatwo użyć tej klasy na przykład w projekcie symfony, podmieniając główny layout na layout mobilny (apps/APLIKACJA/templates/layout_mobile.php) w filtrze, w poniższy sposób.
Zawartość apps/APLIKACJA/config/filters.yml
rendering: ~ security: class: sfGuardBasicSecurityFilter mobile: class: MobileFilter cache: ~ common: ~ execution: ~
Klasa filtra lib/MobileFilter.class.php:
class MobileFilter extends sfFilter
{
public function execute($filterChain)
{
if (MobileBrowserDetector::isMobile()) {
$this->getContext()->getActionStack()->getFirstEntry()->getActionInstance()->setLayout('layout_mobile');
}
$filterChain->execute();
}
}
Tags: php, przeglądarki mobilne, symfony
[...] Więcej: Wykrywanie przeglądarek na urządzenia mobilne | xlab [...]
Pisanie aplikacji na urzadzenia mobilne znacznie latwiej oprzec o dany zestaw przegladarek, ktore sa kompatybile z prawie wszystkimi telefonami. Latwiej zapewnic zgodnosc z XHTML anizeli zgodnosc dla natywnych przegladarek dla iPhone czy platforme Androida. Rozwijajac jedna wersje mozna dac gwarancje, ze bedzie wersja mobilna dziala na wielu telefonach.
@Do przedmówcy: Po części masz rację, ale zauważ, że w przypadku chociażby takiego Iphone’a, można przygotować serwis wykorzystujący funkcjonalność tego urządzenia i stworzyć dedykowany dla niego interfejs graficzny spójny wizualnie z jego OS-em (walor estetyczny i dotyczący użyteczności). Możemy także obsługiwać wbudowane animacje i akcelerometr z poziomu samego JavaScriptu. Dodatkowo Safari Mobile ma wbudowaną funkcję geolokalizacji dostępną w HTML5, co może znaleźć wiele ciekawych zastosowań w przypadku aplikacji webowych dla urządzeń mobilnych (na razie poza wspomnianą przeglądarką ta funkcjonalność jest dostępna jedynie w Firefoksie). Ponadto, w tradycyjnych wersjach serwisów często pojawia się natłok sporej ilości informacji na dzień dobry, na co nie można sobie pozwolić w przypadku serwisów mobilnych ze względu na ograniczoną rozdzielczość wyświetlacza w telefonach i palmtopach.
Witam,
skrypt nie działa pod iPadem