Identifikace prohlφ₧eΦ∙ v mobilnφch telefonech
P°i tvorb∞ strßnek se sna₧φm odd∞lovat vzhled od obsahu tφm, ₧e pou₧φvßm XHTML a CSS. Nedßvno jsem ale narazil na jeden problΘm. Vytvß°el jsem strßnku, ve kterΘ jsem navigaΦnφ nabφdku umis¥oval absolutnφm pozicovßnφm do levΘho sloupce. Nic by na tom nebylo, kdybych se na strßnku nepodφval mobilnφm telefonem. Zjistil jsem, ₧e navigaΦnφ menu nikde nenφ.
Testovßnφm jsem dosp∞l k zßv∞ru, ₧e m∙j mobilnφ telefon sice podporuje n∞kterΘ vlastnosti CSS, ale ne vÜechny a asi ne ·pln∞ sprßvn∞. P°ivedlo m∞ to tedy na myÜlenku, ₧e kdybych pro mobilnφ telefony odstranil definici CSS, strßnky by se zobrazovaly sprßvn∞. Zkusil jsem to ud∞lat ruΦn∞ a bylo to skuteΦn∞ tak.
Jen₧e jsem narazil na problΘm, jak programov∞ zjistit, ₧e se na strßnky dφvß n∞kdo z mobilnφho telefonu. Napadlo m∞, ₧e by se dal mobilnφ prohlφ₧eΦ (prohlφ₧eΦ v mobilnφm telefonu) rozpoznat podle v²skytu urΦitΘho °et∞zce v identifikaci prohlφ₧eΦe. Ka₧d² prohlφ₧eΦ se toti₧ strßnce identifikuje urΦit²m °et∞zcem, kter² obsahuje r∙znΘ informace o typu prohlφ₧eΦe. Tato identifikace se naÜt∞stφ dß zjistit jednoduch²m skriptem.
Ukßzka skriptu pro PHP:
Ukßzka skriptu pro ASP:
Te∩ u₧ jen zb²valo zφskat dostateΦn∞ velk² vzorek identifikacφ r∙zn²ch druh∙ prohlφ₧eΦ∙ (hlavn∞ t∞ch mobilnφch) a sestavit n∞jak² °φdφcφ °et∞zec, podle kterΘho by se daly identifikovat mobilnφ prohlφ₧eΦe.
Poda°ilo se mi na internetu najφt seznam, kter² obsahoval vφce ne₧ p∞t tisφc r∙zn²ch identifikacφ prohlφ₧eΦ∙, p°evß₧n∞ z mobilnφch telefon∙, a na zßklad∞ tohoto seznamu jsem sestavil °φdφcφ °et∞zec a naprogramoval funkci, kterß podle test∙ dokß₧e na 98,2 % identifikovat prohlφ₧eΦ z mobilnφho telefonu. Funkci jsem nazval IsMobile
a jejφ k≤d m∙₧ete vid∞t nφ₧e.
Funkce IsMobile
pro PHP:
function IsMobile()
{
// funkcφ ERegI zjistφm v²skyt n∞kterΘ Φßsti °φdφcφho °et∞zce
// v °et∞zci identifikace prohlφ₧eΦe
$ret = ERegI(QuoteMeta("UP.LINK|MIDP|UP.BROWSER|NOKIA|MOT|SEC-".
"|WAP|ERICSSON|SAMSUNG|SIE-|PHONE|PANASONIC".
"|MITSU|LG|PORTALMMM|BLACKBERRY|SYMBIAN|PHILIPS".
"|SENDO|KLONDIKE|SAGEM|MOBILE|ALCATEL|SONY"),
$_SERVER["HTTP_USER_AGENT"]);
// vrßcenφ nßvratovΘ hodnoty
return $ret;
};
?>
Funkce IsMobile
pro ASP:
Function IsMobile()
'deklarace prom∞nnΘ pro regulßrnφ v²razy
Dim regEx
'vytvo°enφ prom∞nnΘ pro regulßrnφ v²razy
Set regEx = New RegExp
'nastavenφ regulßrnφho v²razu (°φdφcφ °et∞zec)
regEx.Pattern = "UP\.LINK|MIDP|UP\.BROWSER|NOKIA|MOT|SEC-" _
& "|WAP|ERICSSON|SAMSUNG|SIE-|PHONE|PANASONIC" _
& "|MITSU|LG|PORTALMMM|BLACKBERRY|SYMBIAN|PHILIPS" _
& "|SENDO|KLONDIKE|SAGEM|MOBILE|ALCATEL|SONY"
'nastavenφ nerozliÜovßnφ velikosti pφsmen
regEx.IgnoreCase = True
'spuÜt∞nφ porovnßnφ (vrßtφ nßvratovou hodnotu funkce)
IsMobile = regEx.Test(Request.ServerVariables("HTTP_USER_AGENT"))
End Function
%>
Jak jsem dosp∞l k v²sledk∙m?
Nejd°φve jsem vytvo°il strßnku, kterß pou₧φvala v²Üe uvedenΘ skripty pro vypsßnφ identifikace prohlφ₧eΦe, ze kterΘ jsem cht∞l zφskßvat identifikace mobilnφch telefon∙ na zßklad∞ p°φsp∞vk∙ od u₧ivatel∙ strßnek. Ukßzalo se, ₧e to nenφ dobrß metoda, a proto mi DuÜan Janovsk² (Yuh∙) poskytl seznam osmdesßti Üesti identifikacφ mobilnφch prohlφ₧eΦ∙ z LOGu jeho webu, co₧ bylo sice velmi malΘ mno₧stvφ, ale postaΦujφcφ pro zßkladnφ anal²zu.
Vzhledem k tomu, ₧e zp∙sob zφskßvßnφ identifikaΦnφch °et∞zc∙ se mi zdßl nedostateΦn² (zdlouhav² postup a malß pravd∞podobnost zφskßnφ v∞tÜφho poΦtu zßjemc∙ o ·Φast), napadlo m∞, ₧e bych se po identifikacφch mobilnφch prohlφ₧eΦ∙ mohl poohlΘdnout na internetu. Poda°ilo se mi najφt seznam, kter² obsahoval (po odstran∞nφ r∙znΘho smetφ) 5 102 zßznam∙, a ten se mi zdßl ji₧ dostateΦn∞ velk² k praktickΘmu pou₧itφ.
Anal²zou tohoto seznamu jsem sestavil nejΦast∞ji se vyskytujφcφ °et∞zce, kterΘ jednoznaΦn∞ identifikovaly mobilnφ prohlφ₧eΦe, a sestavil jsem je podle Φetnosti jejich v²skytu do °φdφcφho °et∞zce, kter² jsem pak pou₧il v regulßrnφm v²razu ve funkci IsMobile
.
Metodika pou₧itß p°i anal²ze
Nejprve jsem provedl odhad nejΦast∞ji se vyskytujφcφch °et∞zc∙ v identifikacφch mobilnφch prohlφ₧eΦ∙. Podφval jsem se tedy na identifikace a °et∞zec, kter² se na prvnφ pohled vyskytoval nejΦast∞ji, jsem pou₧il. PotΘ jsem poΦφtal Φetnost v²skytu t∞chto jednotliv²ch °et∞zc∙ a kontroloval °ßdky, kterΘ do v²sledku nezapadaly. Postupn∞ jsem tak urΦoval dalÜφ °et∞zce, kterΘ se daly pou₧φt. Postupn²m poΦφtßnφm Φetnostφ v²skytu t∞chto °et∞zc∙ jsem dosp∞l a₧ ke koneΦnΘmu sestavenφ °φdφcφho °et∞zce.
Vyu₧itφ funkce IsMobile
Tato funkce m∙₧e poslou₧it vÜem tv∙rc∙m strßnek, a¥ u₧ p°ipravovan²ch "ruΦn∞" Φi dynamicky generovan²ch, kte°φ necht∞jφ nebo nemohou udr₧ovat vφce verzφ strßnek (pro mobily a desktopy). Funkce se dß pou₧φt nejen pro odfiltrovßnφ definic CSS, ale v podstat∞ pro jakoukoli jinou filtraci informacφ, kterΘ se majφ nebo nemajφ zobrazovat p°i p°φstupu z mobilnφho telefonu (nap°φklad odfiltrovßnφ reklamnφch banner∙ a podobn∞).
Odkazy a zdroje
- Data k v²sledku v²zkumu mobilnφch prohlφ₧eΦ∙ - Bohumφr Bedna°φk (Bob∙v weblog, 3. 10. 2004)
- Seznam p°φstup∙ z mobilnφch prohlφ₧eΦ∙ (www.postfile.com)