8 Jun 2012 5 commenti
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.
- 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.
- 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.).
- 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.
- 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.
Roberto
11 June 2020 ore 07:26
mi correggo: iPad con Firefox (Mozilla) non funziona perchè nello useragent non appare "iPad".
saluti