Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Santiago

Detecção mobile

Recommended Posts

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>';
if( $bot ){ // is robot search engine
	echo 'bot';
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.