Come rilevare i tablet Android in generale. Useragent?


103

Ho cercato ovunque. Stiamo usando un Motorola Zoom per provare il nostro sito per tablet. Il problema è che l'Android Useragent è un Useragent generico e non c'è differenza tra tablet Android e mobile Android. Non voglio solo scegliere come target un dispositivo specifico come Xoom Useragent poiché molto probabilmente Android sarà su più dispositivi tablet nel prossimo futuro.

Stiamo utilizzando Umbraco CMS e abbiamo esaminato l'utilizzo della soluzione 51Degrees.mobi e in questo momento non funzionerà per le nostre esigenze. Forse in futuro. So che 51Degrees e alcune delle persone di Umbraco faranno un po 'di integrazione in Umbraco, ma il progetto finale probabilmente non uscirà per un paio di mesi.
Quindi, perché vorremmo rilevare la stringa Useragent di un tablet Android e non dirigerlo al nostro sito mobile come lo è attualmente.

Se qualcuno sa come rilevare e tablet Android in generale, non il dispositivo specifico sarebbe molto utile.


2
Sto solo indovinando, ma forse c'è un modo per vedere quanto è alta anche la risoluzione di visualizzazione?
Phonon

@Phonon, Sì, stiamo cercando di utilizzare Javascript per inviare un valore res al server. Stiamo provando a farci un __doPostBack ma sembra che non ci restituisca il valore. Abbiamo un valore di input nascosto, mostra il lato client ma non lo stiamo riportando sul lato server.
ClosDesign

Non sono sicuro di poterti aiutare qui.
Phonon

Risposte:


112

Il problema è che lo User-Agent Android è uno User-Agent generico e non c'è differenza tra tablet Android e mobile Android.

Questo non è corretto. Mobile Android ha una stringa "Mobile" nell'intestazione User-Agent. Tablet Android no.

Ma vale la pena ricordare che ci sono parecchi tablet che segnalano Safari "Mobile" in userAgent e quest'ultimo non è l'unico / solido modo per distinguere tra Mobile e Tablet.


3
hai ragione. Stavo solo cercando una stringa che contenga Android. Ho dovuto cercare la stringa che contiene Android e! Mobile. Ho trovato l'articolo di Tim Bray su questo.
ClosDesign

6
@yoavf: Sembra che sia stato risolto con l'aggiornamento Android 3.1 di XOOM. Possiedo un XOOM e l'ho appena testato - nessun "cellulare".
CommonsWare

27
Questa risposta non è del tutto corretta. Ci sono parecchi tablet - anche il più recente Kindle Fire - che riportano Safari "Mobile" nella stringa userAgent. Non sembra esserci un modo solido per rilevare tablet o telefono a questo punto a meno che non sia una combinazione di userAgent e possibile supporto per il rilevamento della risoluzione.
vernonk

22
falso! Samsung Galaxy Tab è ovvio tablet ma ha "mobile" nel suo agente utente
puchu

1
Credo che l'aggiunta "mobile" fosse con Android 4, ci sono ancora molti dispositivi prima della 4 ... Per Android 2.x presumo per telefono, per 3.x presumo tablet (anche se ci saranno alcuni falsi positivi) ... altrimenti puoi testare per dispositivi mobili ...
Tracker1

20

@Carlos: Nel suo articolo Tim Bray lo consiglia (come fa un altro post di Google ), ma sfortunatamente non viene applicato da tutti i produttori di tablet.

... Si consiglia ai produttori di dispositivi con fattore di forma grande di rimuovere "Mobile" dall'agente utente ...

La maggior parte delle stringhe dell'agente utente per tablet Android che ho visto utilizza mobile safari, ad esempio il Samsung Galaxy Tab:

Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, come Gecko) Versione / 4.0 Mobile Safari / 533.1

Quindi al momento sto controllando i nomi dei dispositivi per rilevare i tablet Android. Finché ci sono solo pochi modelli sul mercato, va bene, ma presto questa sarà una brutta soluzione.

Almeno nel caso dell'XOOM, la parte mobile sembra essere sparita:

Mozilla / 5.0 (Linux; U; Android 3.0; en-us; Xoom Build / HRI39) AppleWebKit / 534.13 (KHTML, come Gecko) Versione / 4.0 Safari / 534.13

Ma poiché attualmente ci sono solo tablet con Andorid 3.x, sarebbe sufficiente controllare su Android 3.


1
potresti pubblicare l'elenco dei dispositivi con cui hai controllato e la codifica.
LTech

12

Mo 'meglio rilevare anche user-agent “mobile”

Anche se potresti comunque voler rilevare "android" nello User-Agent per implementare funzioni specifiche di Android, come le ottimizzazioni del touchscreen, il nostro messaggio principale è: se il tuo sito mobile dipende dallo sniffing di UA, rileva le stringhe "mobile" e "android", anziché solo "android", nello User-Agent. Questo aiuta a servire correttamente sia i tuoi visitatori mobili che tablet.

Rilevamento del dispositivo Android tramite browser

 < script language="javascript"> <!--
     var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase()));
              if (mobile) {
                  alert("MOBILE DEVICE DETECTED");
                  document.write("<b>----------------------------------------<br>")
                  document.write("<b>" + navigator.userAgent + "<br>")
                  document.write("<b>----------------------------------------<br>")
                  var userAgent = navigator.userAgent.toLowerCase();
                  if ((userAgent.search("android") > -1) && (userAgent.search("mobile") > -1))
                         document.write("<b> ANDROID MOBILE <br>")
                   else if ((userAgent.search("android") > -1) && !(userAgent.search("mobile") > -1))
                       document.write("<b> ANDROID TABLET <br>")
              }
              else
                  alert("NO MOBILE DEVICE DETECTED"); //--> </script>

3
Funziona perfettamente. Ho aggiunto a questo per iPad e iPhone / iPod. else if (userAgent.search("ipad") > -1) document.write("<b> iPad <br>") else if ((userAgent.search("iphone") > -1)||(userAgent.search("ipod") > -1)) document.write("<b> iPhone or iPod <br>")
Spencer Cole

Come funziona per mozilla / 5.0 (linux; u; android 2.2; en-gb; gt-p1000 build / froyo) applewebkit / 533.1 (khtml, like gecko) version / 4.0 mobile safari / 533.1 che ha la parola 'mobile' in esso per il Samsung Galaxy Tablet?
LTech

8

Puoi provare questo script poiché non vuoi indirizzare solo lo Xoom. Non ho uno Xoom, ma dovrebbe funzionare.

function mobile_detect(mobile,tablet,mobile_redirect,tablet_redirect,debug) {
var ismobile = (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(navigator.userAgent.toLowerCase()));
var istablet = (/ipad|android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(navigator.userAgent.toLowerCase()));

if (debug == true) {
    alert(navigator.userAgent);
}

if (ismobile && mobile==true) {
    if (debug == true) {
        alert("Mobile Browser");
    }
    window.location = mobile_redirect;
} else if (istablet && tablet==true) {
    if (debug == true) {
        alert("Tablet Browser");
    }
    window.location = tablet_redirect;
}
}

Ho creato un progetto su GitHub. Dai un'occhiata - https://github.com/codefuze/js-mobile-tablet-redirect . Sentiti libero di inviare problemi se c'è qualcosa di sbagliato!


1
Questo non funzionerà per le versioni Android> 3.0, come ICS (4.0). Penso che la risposta accettata sia quella giusta: controlla se "Mobile Safari" è nell'agent utente.
Suman

Non sono sicuro degli altri Kindle, ma il Kindle Fire 1 NON ha "kindle" nella stringa dell'agente utente - né contiene "android"; gli unici indizi sono le parole "Silk" e "Silk-Accelerated".
mklement0

6

Una volta rilevato Android nell'agente utente, è così che distinguo tra browser per tablet e smartphone (questo è utilizzando Python, ma è altrettanto semplice per altri linguaggi di programmazione):

if ("Android" in agent):
  if ("Mobile" in agent):
    deviceType = "Phone"
  else:
    deviceType = "Tablet"

AGGIORNATO: per riflettere l'uso di Chrome su Android, come da commenti di seguito.


Perché non cercare semplicemente "Mobile" nell'agente?
Eren Tantekin

Penso che potrebbe funzionare anche tu, ma penso che potrebbe essere pericoloso cercare solo "Mobile" - potrebbero esserci dispositivi con nomi, ad esempio "HTC Mobile", ecc. Penso che questo sia l'approccio consigliato.
Suman

1
Ora che Google ha rilasciato Chrome per Android, il tuo approccio potrebbe diventare un po 'problematico. Perché, Chrome su Android si segnalerà come "Chrome Mobile" invece del solito "Mobile Safari" come sta facendo il browser Android di serie. Per alcuni consigli ufficiali: developers.google.com/chrome/mobile/docs/user-agent
Eren Tantekin

4

Basato sulle stringhe degli agenti su questo sito:

http://www.webapps-online.com/online-tools/user-agent-strings

Questi risultati sono emersi:
Primo:

Tutti i dispositivi tablet dispongono di:
1. Tablet
2. iPad

Secondo:

Tutti i dispositivi telefonici hanno:
1. Cellulare
2. Telefono

Terzo:

I dispositivi tablet e telefono dispongono di:
1. Android

Se riesci a rilevare livello per livello, penso che il risultato sia vero al 90%. Come i canali del dispositivo di SharePoint.


2

Ecco cosa uso:

public static boolean onTablet()
    {
    int intScreenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;

    return (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE) // LARGE
    || (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE + 1); // Configuration.SCREENLAYOUT_SIZE_XLARGE
    }

2

Sebbene non possiamo dire se alcuni tablet omettono "mobile", molti, incluso il Samsung Galaxy Tab , hanno il cellulare nel loro user-agent, rendendo impossibile il rilevamento tra un tablet Android e un telefono Android senza ricorrere al controllo delle specifiche del modello. Questo IMHO è una perdita di tempo a meno che non si preveda di aggiornare ed espandere l'elenco dei dispositivi su base mensile.

Sfortunatamente la soluzione migliore qui è lamentarsi di questo con Google e convincerli a riparare Chrome per Android in modo che aggiunga del testo per identificare tra un dispositivo mobile e un tablet. Diavolo, anche una singola lettera M o T in un punto specifico della stringa sarebbe sufficiente, ma immagino che abbia troppo senso.


1

Xoom ha la parola Xoom nell'agente utente: Mozilla / 5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66) AppleWebKit / 534.13 (KHTML, come Gecko) Versione / 4.0 Safari / 534.13

Galaxy Tab ha "Mobile" nell'agente utente: Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, come Gecko) Versione / 4.0 Mobile Safari / 533.1

Quindi, è facile rilevare lo Xoom, difficile rilevare se una specifica versione di Android è mobile o meno.


1

La maggior parte dei tablet moderni esegue Honeycomb aka 3.x Nessun telefono esegue 3.x per impostazione predefinita. La maggior parte dei tablet che attualmente eseguono 2.x hanno una capacità inferiore e potrebbero comunque essere migliori se presentati con un sito mobile. So che non è impeccabile .. ma immagino sia molto più preciso dell'assenza di cellulare ..


1
In realtà i telefoni non possono nemmeno eseguire 3.x perché era una versione solo per tablet di Android e non era open source.
Eren Tantekin

1

Sebbene Mobile Android possa avere "mobile" nella stringa dello user-agent, cosa succede se utilizza Opera Mobile per Android su un tablet? Avrà ancora "mobile" nella stringa dello user-agent, ma dovrebbe visualizzare siti di dimensioni tablet. Dovrai testare per "mobile" che non è preceduto da "opera" piuttosto che solo "mobile"

o potresti semplicemente dimenticarti di Opera Mobile.


1
Opera mobile non utilizza "mobile" nella stringa utente, utilizza "mobi". Vedi qui
Ian Stanway

2
Opera Mobile per cellulari ha "Opera Mobi" nella stringa dell'agente utente, ma Opera Mobile per tablet ha "Opera Tablet" nella stringa dell'agente utente.
tagawa

1

Suggerirei di utilizzare Categorizr per rilevare se l'utente è su un tablet. È possibile visualizzare i risultati dei test di categorizr qui .


1

Se usi l'assenza di "Mobile", allora è quasi corretto. Ma ci sono HTC Sensation 4G (4,3 pollici con Android 2.X) che non invia la parola chiave Mobile.

Il motivo per cui potresti volerlo trattare separatamente è dovuto a iframesecc.


0

La beta di 51Degrees, 1.0.1.6 e l'ultima versione stabile 1.0.2.2 (4/28/2011) ora hanno la capacità di annusare per tablet. Fondamentalmente sulla falsariga di:

string capability = Request.Browser["is_tablet"];

Spero che questo ti aiuti.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.