3 commenti mobile, php

I diversi dispositivi di navigazione richiedono una una diversa progettazione del sito ed una ottimizzazione delle pagine tali da migliorare l'esperienza d'uso e garantire un'agevole fruizione dei contenuti del proprio sito web.

L'individuazione di un dispositivo mobile può essere eseguita in diversi modi, alcuni dei quali funzionano meglio di altri. Questo potrà essere effettuato seguendo soluzioni lato server (php) o lato client (javascript e css).

 

Metodi basati sull'user agent

Il tradizionale metodo impiegato per eseguire questa operazione si basa sull'analisi dell'user agent header. Questo contiene una riga di testo che consente di identificare diverse caratteristiche del client.

Esso si articola in modo vario e contiene una serie di informazioni indicanti il browser e la versione, il rendering engine e il sistema operativo (anche altro).

Analizzando il contenuto di tale testo sarà pertanto possibile rintracciare il dispositivo di navigazione corrente.

 

Il problema, tuttora irrisolto, è che il formato di tale stringa assume una serie estremamente variegata di sintassi a seconda dei diversi browser (mobile e non) e dei diversi dispositivi (ad es. anche nei diversi modelli di uno stesso marchio).

Per farvi un'idea di quanto affermo vi segnalo questo link in cui potrete trovare la lista di tutte le stringhe che costituiscono gli user agent utilizzati dai dispositivi mobile.

Inoltre, i futuri device che verranno introdotti andranno a perpetuare tale problematica e, considerando la frequenza con la quale il mercato ne presenta di nuovi, si tratta di un problema non da poco.

In sostanza, i metodi di detection basati sull'user agent richiedono un frequente aggiornamento dello script in base alle nuove versioni di browser e/o ai nuovi modelli di device.

 

Infine, Voglio porre l'attenzione su un aspetto, in parte marginale, sul quale sono incappato personalmente: l'invididuazione di un dispositivo mobile può basarsi sul browser o sul sistema operativo e questo può dar luogo, in alcuni casi, ad apparenti contraddizioni.

 

Nonostante tali considerazioni, allo stato dei fatti, l'analisi dell'user agent costituisce il metodo più affidabile e dai cui non si può prescindere per effettuare l'individuazione dei dispositivi mobile.

 

Analisi dell'user agent con Php 

Quella di cui tratterò in questo articolo è l'individuazione dei dispositivi mobile attraverso php.

 

Da un punto di vista tecnico la questione è relativamente semplice.

Per ottenere l'user agent con php avremo la variabile $_SERVER['HTTP_USER_AGENT']. Un semplice script per eseguire la mobile detection con php potrebbe essere il seguente.

<?php
function isMobile(){
	$array_mobile = array(
				'iphone',
				'ipod', 
				'ipad', 
				'android', 
				'blackberry', 
				'opera mobi', 
				'windows ce',
				'windows phone os',
				'symbian'
				/* and more... */
				);

	$UA = isset($_SERVER['HTTP_USER_AGENT']) ? (string) $_SERVER['HTTP_USER_AGENT'] : '';
	$regex = "/(" . implode("|", $array_mobile) . ")/i";
	return preg_match($regex, $UA);	
	}

if(isMobile()){
	echo 'welcome mobile...';
	}
?>

 

Uno script di questo genere è perfettamente funzionante su una larghissima gamma di dispositivi mobile, e sicuramente lo sarà fra quelli più diffusi. Tuttavia, le problematiche precedentemente esposte mi portano a consigliare l'impiego di una classi sviluppate con dovizia e "rodate".

 

Classi e script per detect mobile 

Nell'ultimo anno sono state diffuse diverse classi e funzioni per individuare i dispositivi mobile con php. Non tutte sono degne di nota (alcune di queste le ritengo scadenti).

Ne ho raccolte alcune che ritengo essere le migliori.

  1. Mobileesp: La più aggiornata (nel momento in cui scrivo questo articolo l'ultima modifica è del 16 maggio 2012) e con una ampia serie di metodi per individuare sistema operativo (iOS, Android, WindowsPhone, Symbian, BlackBerry), piattaforme (smatphone, tablet, Game cosole) nonchè la capacità del dispositivo di gestire css e javascript. E' retrocompatibile anche su verioni php precedenti alla 5. Lo sviluppo di questa classe rientra in un progetto più ampio e lo script è disponibile anche in altri linguaggi di programmazione. E' totalmente gratuita.
  2. Mobile_Detect: Scritta in maniera molto raffinata e compatta tale da rendenderla ulteriormente implementabile con estrema facilità. I metodi che la compongono sono divisi in 4 gruppi: Phones, Tablets, Operating systems, Mobile browsers. Ha numerose funzionalità e, rispetto alle altre, dispone di metodi che consentono di individuare il brand (Iphone, Samsung, BlackBerry, HTC, Nexus, Motorola, Sony, Acer etc.).
  3. Detect Mobile Browsers: è uno script che nella sua versione originale serve per eseguire un redirect; una semplice modifica può però adattarla a vari scopi; non ha particolari funzionalità ma semplicemente stabilisce (tramite un'unica regex) se un device è mobile o meno; disponibile in diversi linguaggi di programmazione; nel momento in cui scrivo l'ultimo aggiornamento dello script risale al 28 febbraio 2012.
  4. Detect Mobile Browser: E' gratutita per un uso personale o no-profit (ma occorre fare un post su Facebook o un tweet su Twitter) per altri tipi di uso occorre una licenza a pagamento. Personalmente ho avuto modo di provare una vecchia versione (ai tempi era gratuita). Si trattava di un'unica funzione (non una classe) dalla struttura abbastanza semplice.

In abito italiano l'unico progetto/script dalle interessanti potenzialità è MobileDetect, sviluppato dal programmatore italiano Maurizio Tarchini. Rispetto alle altre questa classe non sarebbe degna di nota per come è implementata ma la cito in quanto è totalmente diversa dalle precedenti "appoggiandosi" ad un file xml. Tale caratteristica potrebbe renderla fortemente espandibile. Purtroppo al momento non è stata ulteriormente sviluppata ed il progetto è fermo.

 

Le mie preferite sono le prime due, quantomeno per i frequenti aggiornamente che gli vengono apportate e per la completezza di funzioni che vengono messe a disposizione.

 

Conoscete qualche altra classe, funzione o script per eseguire l'individuazione di un dispositivo mobile con php? 

Voi cosa utilizzate a tale scopo?

Olimpio Romanella

Sono un appassionato di Web Developing con un particolare debole per php. Mi dedico principalmente dello sviluppo back-end ed in particolare programmazione lato server con php, sviluppo di database relazionali MySql e progettazione di CMS di piccole e medie dimensioni.

Mi avvalgo del framework javascript Jquery, utilizzando molti dei suoi plugin e nei dei miei progetti utilizzo spesso il framework MVC Codeigniter.

3 Commenti presenti

avatar Idel

Idel

10 September 2012 ore 19:54

Ciao,
te ne segnalo un'altro che si chiama Apache Mobile Filter ed è una suite di filtri per Apache che permette di risolvere le problematiche di device detection, è stato segnalato anche da html.it.

Fammi sapere che ne pensi.

Idel

avatar Riccardo

Riccardo

26 July 2012 ore 15:14

Ciao, ottimo articolo l'ho usato anche io per un mio progetto con versione mobile "ad hoc" anche se come dice Marco qui sopra anche io sono più per il responsive design "adattato".

P.s nel captcha dei tuoi commenti a volte non si capisce nulla xD

avatar Marco Grazia

Marco Grazia

25 June 2012 ore 00:08

Nella pratica ho sempre preferito le media query al puro sniffing, il motivo è che ad esempio con il solo sniffing non puoi assolutamente sapere se il dispositivo è in versione portrait o landscape, già questo basterebbe per evitare lo sniffing puro e semplice.
Se poi si ha la necessità di sapere per certo la dimensione dello schermo... javascript! E si può tranquillamente riprogrammare il sito.

Poi ovvio, i motivi possono essere più specifici e quindi si rende necessario effettuare questo tipo di sniffing, però bisogna sempre prevedere una via di fuga sicura se ci si è sbagliati (ad esempio stringhe UA esoteriche o modificate ad arte o dispositivi moderni o comunque non previsti nell'elenco).

M.