Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Gestire i dispositivi mobili con Apache Mobile Filter

Un'estensione per Apache in grado di riconoscere tutte le funzionalità dei dispositivi mobili che accedono ad un sito Web
Un'estensione per Apache in grado di riconoscere tutte le funzionalità dei dispositivi mobili che accedono ad un sito Web
Link copiato negli appunti

Una delle esigenze attualmente più sentite dagli sviluppatori web è progettare i propri siti in modo compatibile con gli innumerevoli dispositivi mobili che il mercato offre. Per gli utilizzatori del web server Apache esiste un progetto open source, denominato AMF (Apache Mobile Filter), che permette in modo semplice di individuare le caratteristiche del dispositivo che sta inviando richieste HTTP. Le informazioni raccolte risulteranno disponibili al programmatore come variabili d'ambiente.

L'idea, sviluppata da Idel Fuschini, consiste nel mettere in comunicazione Apache con un Device Description Repository, ovvero un archivio di informazioni sulle funzionalità e caratteristiche di moltissimi dispositivi quali smart phone, tablet, console.

Alcuni dei repository utilizzabili sono WURFL, DetectRight e 51Degrees. Potremo così conoscere, ad esempio, la risoluzione dello schermo usato dal visitatore o se il suo browser supporta Ajax: in altri termini tutto ciò che ci consenta di adattarci alle sue peculiarità e rendere positiva l'esperienza di navigazione delle nostre pagine. In più il software consente il ridimensionamento automatico delle immagini e la ridirezione verso contenuti appositamente predisposti.

AMF richiede mod_perl 2, tramite tale modulo accede infatti alle API di Apache. Esso è costituito da una dozzina di componenti tra cui i "detection filters" rivestono il ruolo principale. Le informazioni raccolte (capabilities) da questi ultimi vengono poi passate ad altri moduli. Per non sovraccaricare il server, AMF implementa inoltre un meccanismo di caching. In realtà i sistemi sono due: uno utilizza il filesystem della macchina per memorizzare i dati, il secondo, dedicato ad architetture più complesse, si basa su memcached.

Di seguito vedremo come installare e configurare questo software open source, prendendo come riferimento un server Linux con sistema operativo Fedora e web server Apache 2.2.

Installazione

Come già accennato vi sono alcuni prerequisiti che dobbiamo rispettare. Sul nostro sistema dovranno essere installati:

  • il webserver Apache versione 2.0.x o 2.2.x o successive;
  • l'interprete Perl versione 5.8.8 o successive;
  • il modulo di Apache mod_perl2 versione 2.0.4 o successive;
  • Memcached versione 1.4.4 o più recenti.

Considerando Apache già funzionante, l'eventuale mancanza di qualche componente risulta velocemente risolvibile con YUM (su sistemi RedHat). Assunti i privilegi di root possiamo passare all'installazione dei pacchetti necessari:

$ yum install perl perl-GD mod_perl memcached

La presenza di Apache Mobile Filter all'interno dell'archivio perl CPAN, ci facilita ulteriormente il lavoro. Utilizzando gli automatismi dell'omonimo comando ci basterà digitare:

$ cpan Apache2::AMFWURFLFilter

Se non fosse disponibile, installate con YUM il pacchetto rpm perl-CPAN.  Dopo aver atteso con un po' di pazienza l'output del comando cpan, finalmente potremo cominciare a testare il modulo AMF. Per prima cosa dobbiamo creare una directory di lavoro per il programma e renderla scrivibile da Apache. Ad esempio:

$ mkdir /home/AMF
$ chown apache.apache /home/AMF

A questo punto non ci resta che iniziare i nostri esperimenti partendo da alcune direttive di base per poi passare a qualche configurazione più avanzata.

Configurazione

Considerando di lavorare a livello globale, modifichiamo il file httpd.conf aggiungendo le righe:

PerlSetEnv AMFMobileHome /home/AMF
PerlTransHandler +Apache2::AMFLiteDetectionFilter

Riavviamo Apache e già la console ci fornirà una serie di messaggi che indicano l'attivazione del modulo. La prima istruzione ha il compito di indicare la directory di lavoro, la seconda di caricare AMFLiteDetectionFilter. Si tratta di un filtro di base, che non richiede l'utilizzo di un device repository, ma semplicemente scarica alcuni parametri da apachemobilefilter.org.

In /home/AMF noteremo la creazione del file amflitedetection.config. In futuro, qualora si verificassero problemi di download, verrà utilizzata l'ultima versione scaricata. Il Lite Detection Filter ci permette di sapere se alle nostre pagine sta accedendo un dispositivo mobile, ma non ne fornisce le caratteristiche.

Vediamo un semplice esempio di come sia possibile, utilizzando PHP, ottenere i risultati del filtro. Creiamo una pagina che ci mostri in output le variabili generate dal web server, ovvero l'array $_SERVER:

<?php
print_r($_SERVER);
?>

Se accediamo alla pagina utilizzando un normale browser da PC le informazioni visualizzate, ovvero le componenti dell'array $_SERVER a noi utili, saranno simili alle seguenti:

[AMFMobileHome] => /home/AMF
[AMF_DEVICE_IS_TABLET] => false 
[AMF_ID] => amf_lite_detection 
[AMF_DEVICE_IS_MOBILE] => false 
[AMF_VER] => 3.52

$_SERVER['AMF_DEVICE_IS_TABLET'] e $_SERVER['AMF_DEVICE_IS_MOBILE'] sono impostate a false, come era logico aspettarsi. Proviamo ora ad accedere utilizzando uno smart-phone HTC Tattoo:

[AMFMobileHome] => /home/AMF
[AMF_DEVICE_IS_TABLET] => false 
[AMF_ID] => amf_lite_detection 
[AMF_DEVICE_IS_MOBILE] => true 
[AMF_VER] => 3.52

come è immediato evincere dal risultato sappiamo di essere visitati da un dispositivo mobile.

Ma vediamo, nella pagina successiva, come poter rendere più raffinata la nostra configurazione.

Configurazione avanzata

Passiamo ora ad una configurazione un po' più avanzata, appoggiandoci al device database 51degrees. Innanzitutto procuriamoci una copia della versione Lite del file, liberamente prelevabile da 51degrees.codeplex.com, utilizzando il link denominato Lite Device Data - Xml Format.

Scompattiamo l'archivio in /home/AMF e rinominiamo il file come 51Degrees.xml.

Modifichiamo le direttive del file httpd.conf nel seguente modo:

PerlSetEnv AMFMobileHome /home/AMF
PerlSetEnv CacheDirectoryStore /home/AMF/cache
PerlTransHandler +Apache2::AMF51DegreesFilter

Oltre alla directory di lavoro, /home/AMF, indichiamo /home/AMF/cache come posizione della cache all'interno del nostro filesystem. Ovviamente dobbiamo creare la directory e renderla scrivibile da Apache. Infine, con l'ultima istruzione, carichiamo il modulo AMF51DegreesFilter. Ora riavviamo Apache e ricolleghiamoci alla pagina php precedentemente creata. Questa volta saremo letteralmente sommersi dalle informazioni, ad esempio:

[AMF_BROWSERNAME] => Android
[AMF_JAVASCRIPT] => true 
[AMF_HARDWAREVENDOR] => HTC 
[AMF_ISMOBILE] => true
[AMF_SCREENPIXELSHEIGHT] => 320 
[AMF_SCREENPIXELSWIDTH] => 228 
[AMF_HARDWAREMODEL] => Tattoo

Quello precedente è solo un piccolo estratto e le caratteristiche elencate sono di immediata comprensione. Normalmente alle nostre applicazioni non saranno necessarie le centinaia di informazioni disponibili, per limitarle possiamo ricorrere alla direttiva CapabilityList, di default impostata ad "all". La sua sintassi è:

PerlSetEnv CapabilityList <elenco capabilities>

Per l'elenco completo potete riferirvi al sito 51degrees.mobi.

In un ambiente di produzione è consigliabile utilizzare la direttiva AMFProductionMode, in modo che l'identificazione del dispositivo venga fatta solo la prima volta che il web server viene contattato:

PerlSetEnv AMFProductionMode true

Se il nostro server gestisce più host virtuali e vogliamo personalizzare le configurazioni all'interno dei contenitori <VirtualHost> dobbiamo inserire a livello globale la direttiva:

PerlOptions +Parent

Da ultimo vediamo un esempio di come sia possibile ottenere il ridimensionamento automatico delle immagini, in modo che si adattino allo schermo del dispositivo:

PerlSetEnv ResizeImageDirectory /home/AMF/images
<Directory /path_to_images/*>
    SetHandler modperl
    PerlOutputFilterHandler Apache2::AMFImageRendering
</Directory>

In precedenza deve essere stato attivato uno dei filtri, che non sia però AMFLiteDetectionFilter. Il "lite filter" infatti non è in grado di fornire le dimensioni dello schermo di un dispositivo.

Nel nostro esempio /home/AMF/images sarà la directory utilizzata per memorizzare le immagini ridimensionate, mentre all'interno del contenitore <Directory>, che definisce la posizione delle immagini originali, viene attivato il modulo AMFImageRendering.

Conclusioni

In queste pagine abbiamo visto alcuni semplici esempi di configurazioni, più che altro utili ad introdurre le funzionalità di Apache Mobile Filter. Per ulteriori approfondimenti vi consiglio la lettura del Wiki dedicato al progetto, ben strutturato e di semplice consultazione. Ciascun modulo della suite viene analizzato schematizzandone il funzionamento e corredando la descrizione con esempi di configurazione. 
Abbiamo installato il software ricorrendo, per semplicità, al comando cpan, risulta però possibile scaricare AMF da sourceforge e procedere all'installazione manuale.
Infine segnalo con un po' di rammarico come WURFL, the Wireless Universal Resource FiLe, forse il Device Description Repository più curato, abbia modificato negli ultimi tempi il tipo di licenza, rendendo di fatto non disponibile per AMF una versione free.

Ti consigliamo anche