2013-02-01 9 views
14

Il modo ovvio per rilevare Android dal server è cercare la stringa "Android" dall'intestazione HTTP User-Agent. Ma - ho lamentato che questo non funziona su alcuni dispositivi (ad esempio nel mio HTC Evo), non vengono rilevati come Android. whatsmyuseragent.com fornisce il browser Web HTC Evo 3D: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, come Gecko) Chrome/11.0.696.34 Safari/534.24. Nessuna stringa o versione Android. Potrebbe non essere sicuro di un software di sicurezza sul dispositivo che lo altera o di un problema specifico di HTC.Impossibile rilevare Android nel server Web

Ovviamente Android Chrome sullo stesso dispositivo ha un altro, e meglio UA: Mozilla/5.0 (Linux; Android 4.0.3; HTC EVO 3D X515m build/IML74K) AppleWebKit/535,19 (KHTML, come Gecko) Chrome/18,0. 1025.166 Mobile Safari/535.19, ma non posso solo sperare che ad es. L'app reader QR Code apre Chrome e non il browser Android integrato, che ha UA non valido.

C'è un trucco buono (chiamata javascript?) Per rilevare in modo affidabile Android su dispositivi e browser?

Edit: sembra stesso problema con Galaxy S III, la stessa stringa User-Agent: Android Phone Browser Detection

+0

Non risolve il problema, ma forse potresti cercare la risoluzione del browser insieme a User-Agent? – RMalke

+1

Forse fornirebbe ulteriori informazioni, ma mi piacerebbe utilizzare una soluzione pronta e più o meno a prova di proiettile invece di avviare la gestione del database dei dispositivi con ID utente/risoluzione/alcune altre combinazioni di intestazione. – JaakL

risposta

8

Sembra che abbia selezionato "Mostra versione desktop" nelle impostazioni del browser Web Android. Una volta disattivato, l'agente utente è all'interno di Android. Questa sembra essere una caratteristica di ICS, HTC non deve essere incolpato: google per l'agente utente sbagliato che ho dato per vedere che succede su molti telefoni diversi.

2

Per questo particolare compito, Potrei suggerire utilizzando wurfl lato server.

È possibile rilevare android da fare qualcosa di molto semplice:

$requestingDevice = $wurflManager->getDeviceForHttpRequest($_SERVER); 
if ($requestingDevice->getCapability("device_os") == "Android") { 
    //the magic 
} 
+1

Sono davvero scettico se wurfl userà qualcosa di meglio di User-Agent, quindi non dovrebbe funzionare. Ho provato con t.wurfl.com e non ha rivelato device_os – JaakL

+0

Capisco cosa intendi - beh la mia ricerca indica che se "orientamento" è definito così come "onuchstart" - e NON è un iphone, blackberry o windows phone dall'agente utente, può si presume che sia probabilmente un androide - ma sfortunatamente, questo è il più accurato possibile se non inviano il proprio UA :( –

0

Quello che ho capito dal tuo problema è che si stanno ottenendo user agent su un device e su pochi del dispositivo rifiuta di dare quella. quindi presumo che tu abbia un'applicazione sul dispositivo Android che sta chiamando il tuo server attraverso qualche servizio web e da questo stai cercando di estrarre l'agente utente. quindi quale soluzione posso vedere qui è l'applicazione Android aggiungere il parametro user agent dal codice in modo che sarà pubblicato nell'intestazione HTTP e dal server è possibile estrarre così facilmente

HttpClient httpclient = new DefaultHttpClient(); 
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Android"); 

ho avuto lo stesso problema, ma io risolto in questo modo.

+0

Egli afferma nella domanda più volte che desidera rilevare i dispositivi Android in un browser, non consumando un servizio web – crazylpfan

+0

poi scrivere piccola utility con WebView che chiamerà Android versione build nativa che conferma che si tratta di dispositivo Android Android.os.Build.VERSION –

+1

Il caso d'uso è in realtà il codice QR per scaricare app:... problema originale è quel lettore QR con browser web non viene rilevato correttamente.Un'altra utility in più sarebbe inutile – JaakL

1

Controllare l'agente utente è sempre stato il metodo consigliato per determinare in modo affidabile il dispositivo dell'utente, (almeno con le impostazioni predefinite comunque). Forse potresti provare a rendere la tua ricerca più solida? Mozilla suggerisce invece di cercare la stringa "Mobi".

+2

Ho fornito un esempio di user agent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, come Gecko) Chrome/11.0.696.34 Safari/534.24". Non ci sono Mobi, Android ecc – JaakL

Problemi correlati