Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde senhores,
estou fazendo a versão mobile para um site antigo, mas me deparei com o seguinte desafio:
Preciso descobrir se o site está sendo acessado de um desktop ou de um browser mobile (caso seja mobile fazer um redirect para a nova versão)
pensei em fazer uma função que verificasse em um array se o user_agent do browser é mobile, mas existem tantas variações de browser para dispositivos móveis que acho meio complicado, tipo se aparecer um novo modelo eu teria de atualizar a função.
Também tem o problema dos browsers wap que não faço idéia de como descobrir se o browser é ou não wap.
Alguma sugestão de como resolver essa questão?
Vlws!
Obrigado.
fiz uma pequena correcao e adaptação no script do russel
<?php
function getEnvs( $s_var ){
$rs = false;
if( @getenv( $s_var ) ){
$rs = strtolower( getenv( $s_var ) );
}else{
if( isset( $_SERVER[$s_var] ) ){
$rs = strtolower( $_SERVER[$s_var] );
}
}
return $rs;
}
class browse{
static $op;
static $ua;
static $ac;
static $ip;
function init( ){
self::$op = strtolower( getEnvs( 'HTTP_X_OPERAMINI_PHONE' ) );
self::$ua = strtolower( getEnvs( 'HTTP_USER_AGENT' ) );
self::$ac = strtolower( getEnvs( 'HTTP_ACCEPT' ) );
self::$ip = strtolower( getEnvs( 'REMOTE_ADDR' ) );
}
function isMobile( ){
$isMobile = false;
$op = self::$op;
$ua = self::$ua;
$ac = self::$ac;
$ip = self::$ip;
$isMobile = strpos($ac, 'application/vnd.wap.xhtml+xml') !== false
|| $op != ''
|| strpos($ua, 'sony') !== false
|| strpos($ua, 'symbian') !== false
|| strpos($ua, 'nokia') !== false
|| strpos($ua, 'samsung') !== false
|| strpos($ua, 'mobile') !== false
|| strpos($ua, 'windows ce') !== false
|| strpos($ua, 'epoc') !== false
|| strpos($ua, 'opera mini') !== false
|| strpos($ua, 'nitro') !== false
|| strpos($ua, 'j2me') !== false
|| strpos($ua, 'midp-') !== false
|| strpos($ua, 'cldc-') !== false
|| strpos($ua, 'netfront') !== false
|| strpos($ua, 'mot') !== false
|| strpos($ua, 'up.browser') !== false
|| strpos($ua, 'up.link') !== false
|| strpos($ua, 'audiovox') !== false
|| strpos($ua, 'blackberry') !== false
|| strpos($ua, 'ericsson,') !== false
|| strpos($ua, 'panasonic') !== false
|| strpos($ua, 'philips') !== false
|| strpos($ua, 'sanyo') !== false
|| strpos($ua, 'sharp') !== false
|| strpos($ua, 'sie-') !== false
|| strpos($ua, 'portalmmm') !== false
|| strpos($ua, 'blazer') !== false
|| strpos($ua, 'avantgo') !== false
|| strpos($ua, 'danger') !== false
|| strpos($ua, 'palm') !== false
|| strpos($ua, 'series60') !== false
|| strpos($ua, 'palmsource') !== false
|| strpos($ua, 'pocketpc') !== false
|| strpos($ua, 'smartphone') !== false
|| strpos($ua, 'rover') !== false
|| strpos($ua, 'ipaq') !== false
|| strpos($ua, 'au-mic,') !== false
|| strpos($ua, 'alcatel') !== false
|| strpos($ua, 'ericy') !== false
|| strpos($ua, 'up.link') !== false
|| strpos($ua, 'vodafone/') !== false
|| strpos($ua, 'wap1.') !== false
|| strpos($ua, 'wap2.') !== false;
return $isMobile;
}
function isBot( ){
$isBot = false;
$op = self::$op;
$ua = self::$ua;
$ac = self::$ac;
$ip = self::$ip;
$isBot = $ip == '66.249.65.39'
|| strpos($ua, 'googlebot') !== false
|| strpos($ua, 'mediapartners') !== false
|| strpos($ua, 'yahooysmcm') !== false
|| strpos($ua, 'baiduspider') !== false
|| strpos($ua, 'msnbot') !== false
|| strpos($ua, 'slurp') !== false
|| strpos($ua, 'ask') !== false
|| strpos($ua, 'teoma') !== false
|| strpos($ua, 'spider') !== false
|| strpos($ua, 'heritrix') !== false
|| strpos($ua, 'attentio') !== false
|| strpos($ua, 'twiceler') !== false
|| strpos($ua, 'irlbot') !== false
|| strpos($ua, 'fast crawler') !== false
|| strpos($ua, 'fastmobilecrawl') !== false
|| strpos($ua, 'jumpbot') !== false
|| strpos($ua, 'googlebot-mobile') !== false
|| strpos($ua, 'yahooseeker') !== false
|| strpos($ua, 'motionbot') !== false
|| strpos($ua, 'mediobot') !== false
|| strpos($ua, 'chtml generic') !== false
|| strpos($ua, 'nokia6230i/. fast crawler') !== false;
return $isBot;
}
}
browse::init();
$mobi = browse::isMobile();
$bot = browse::isBot();
if( $mobi ){ // is mobile
echo 'mobi';
}
echo '<br>'; echo 'bot';
}
?>beleza hinom, vou usar essa class que você criou, eu já havia testado o script do Russel e vi que ele funciona, só não tive como testar em todos esses browser que ele lista.
Agora você sabe onde posso encontrar uma documentação mais detalhada sobre esse assunto?
Vlw
infelizmente essa área não possui padronização
procure por
"mobile HTTP_USER_AGENT"
alguns anos atrás bastava detectar "vnd.wap.xhtml" ou "xhtml" ou "wap"
mas de uns anos pra cá os browsers dos dispositivvos mobile evoluiram e possuem suporte html, flash, javascript, etc..
por isso, o ideal é obter o nome do browser.
aí também entra outra questão pois não existe padrão
a nokia adota um nome, o symbian possui outro, a ntt outro, e por aí vai..
geralmente no cabeçalho do browser tem o nome da compania ou do fabricante do aparelho.
http://www.russellbeattie.com/blog/mobile-...etection-in-php
http://www.andymoore.info/php-to-detect-mobile-phones/