2015-09-16 11 views
6

che voglio sapere se i miei utenti stanno visitando una pagina nella mia applicazione rotaie conControllare tipo di dispositivo tramite user_agent (binari)

  • un tablet o
  • un dispositivo mobile o
  • un computer desktop

Ho scavato attraverso molte soluzioni diverse. Qui sono i miei preferiti:

  1. La UA-parser gemma: https://github.com/ua-parser/uap-ruby che sembra essere molto pulito, ma purtroppo trame sempre Other quando uso parsed_string.device - posso rilevare il sistema operativo e browser con molto bene.
  2. scrittura da zero

scrittura da zero finiti in sth come questo:

if request.user_agent.downcase.match(/mobile|android|iphone|blackberry|iemobile|kindle/) 
    @os = "mobile" 
elsif request.user_agent.downcase.match(/ipad/) 
    @os = "tablet" 
elsif request.user_agent.downcase.match(/mac OS|windows/) 
    @os = "desktop" 
end 

Tuttavia, quello che mi manca è una documentazione completa della user agent definizioni 'dispositivo'.

Ad esempio: Quali motivi devo osservare se l'utente sta navigando su un tablet/dispositivo mobile o desktop? Non posso solo indovinare e controllare ad es. la regex di ua-parser non mi aiuta neanche (molto complicato): https://github.com/tobie/ua-parser/blob/master/regexes.yaml

Esiste una soluzione semplice per risolvere il mio problema? Come funziona google analytics? Ho provato a cercare ma non sono riuscito a trovarlo. Visualizzano anche dispositivi (desktop/tablet/mobile).

+0

dare [browser] (https://github.com/fnando/browser) una prova. È meglio di 'ua-parser' in molti modi – usmanali

+0

che sembra promettente, grazie – DonMB

risposta

0

Il browser gem ha un suggestion per fare questo, ma fino a che viene aggiunta si potrebbe ancora utilizzare la gemma di capirlo usando browser.device?

0

che sto cercando di fare il 2 ° opzione, perché ne ho bisogno come magra-n-media possibile. Ci sono molte informazioni nella stringa User-Agent, che non ho proprio bisogno. E non voglio una funzione che cerchi di analizzare tutto. Semplicemente: bot, desktop, tablet, mobile e altro.

È una specie di molto da leggere, ma sto cercando parole chiave usando this extensive list.

Finora, le seguenti parole chiave sembrano funzionare per me. Sono espressioni regolari in php, ma tu avrai l'idea.

//try to find crawlers 
// https://developers.whatismybrowser.com/useragents/explore/software_type_specific/crawler/ 
if (preg_match('/(bot\/|spider|crawler|slurp|pinterest|favicon)/i', $userAgent) === 1) 
    return ['type' => 'crawler']; 

//try to find tablets 
// https://developers.whatismybrowser.com/useragents/explore/hardware_type_specific/tablet/ 
// https://developers.whatismybrowser.com/useragents/explore/hardware_type_specific/ebook-reader/ 
if (preg_match('/(ipad| sm-t| gt-p| gt-n|wt19m-fi|nexus 7| silk\/|kindle| nook)/i', $userAgent) === 1) 
    return ['type' => 'tablet']; 

//try to find mobiles 
// https://developers.whatismybrowser.com/useragents/explore/hardware_type_specific/mobile/ 
// https://developers.whatismybrowser.com/useragents/explore/hardware_type_specific/phone/ 
if (preg_match('/(android|iphone|mobile|opera mini|windows phone|blackberry|netfront)/i', $userAgent) === 1) 
    return ['type' => 'mobile']; 

//try to find desktops 
// https://developers.whatismybrowser.com/useragents/explore/hardware_type_specific/computer/ 
if (preg_match('/(windows nt|macintosh|x11; linux|linux x86)/i', $userAgent) === 1) 
    return ['type' => 'desktop']; 

return ['type' => 'other']; 
Problemi correlati