1. 程式人生 > >通過UA判斷手機的型別

通過UA判斷手機的型別

開發十年,就只剩下這套架構體系了! >>>   

先上程式碼:

var UA = window.navigator.userAgent.toLocaleLowerCase()

if(/iphone|ipad|ipod/.test(UA)){//ios


}else if(/gt-|sm-|sch-/.test(UA)){ //三星


}else if(/huawei|honor/.test(UA)){ //華為


}else{//其他手機


}
 

 

 

=======================

從UA看廠商
    最近手上的H5平臺要相容各種螢幕大小,又由於平臺生產出的圖片尺寸的限制,為了使圖片不變形,不裁切,只能採用寬方向壓縮的方案進行處理,具體適配方案討論可以參看另一篇BLOG。如果有好的螢幕適配方案,可以聯絡我一起討論哈。

    現在我們進入正題,看看各大廠商的UA: 首先來看

    三星:三星不愧是大廠,各系列產品清晰的呈現在UA裡面,而且UA的規則也是非常統一的,根據不同產品線,分為GT-,SM-,SCH-開頭的UA,可以通過/GT-|SM-|SCH-/ig直接選擇出三星系列的手機。

    小米:小米的UA簡直是一團亂,各種奇葩特徵,簡直不忍直視,看起來使用機型來命名的,但也不全是,比如紅米有幾種:redmi, HM,2014501之類的各種命名規則,對小米的UA檢測,估計只能使用列舉的正則了:/HM|RedMi|Mi/ig,不過這種方式難保完整和齊全。

    華為:作為國內一線大廠,華為的UA可圈可點,和三星有些類似,華為的UA是按照產品線來進行標註識別的,主要分為huawei(華為)和honor(榮耀)兩個系列,所以華為的UA識別也和簡單:/huawei|honor/ig一個正則足夠了。

    OPPO:出乎意料的oppo手機相當的多,看來oppo的營銷做得相當不錯啊,不過他們家的UA已經超越小米到了令人髮指的程度,同一款手機有各種不同的表達,簡直崩潰,更可怕的是,根本沒法通過簡單正則判斷是不是oppo手機。

    vivo:這個廠的手機UA做的相當規範,不管什麼型號,至少都是以vivo開頭,這樣就可以通過簡單正則判斷他了,比如/vivo/ig

另外一些雜牌手機,確實很多,android的痛點也就在這裡了,各種碎片化,完全沒有章法。

【附錄】從訪問日誌裡提取的貨真價實ua

三星:

GT-I9152P Build/JLS36C 
SM-E7000 Build/KTU84P 
SM-G9200 Build/LMY47X 
GT-I9128I Build/JDQ39 
GT-I9500 Build/JDQ39 
SM-N9008V Build/LRX21V 
SM-N7506V Build/JLS36C 
SM-G3609 Build/KTU84P 
SCH-W2013 Build/IMM76D

小米:

HM NOTE 1LTE Build/KTU84P 
Redmi Note 2 Build/LRX22G 
m1 Build/KTU84P 
2014501 Build/KOT49H 
2014011 Build/HM2014011 
2013022 Build/HM2013022 
MI-ONE Plus Build/GINGERBREAD

華為:

HUAWEI G6-C00 Build/HuaweiG6-C00 
HUAWEI C8816D Build/HuaweiC8816D 
PE-TL00M Build/HuaweiPE-TL00M 
PLK-AL10 Build/HONORPLK-AL10(榮耀系列) 
Che2-TL00 Build/HonorChe2-TL00 
H30-U10 Build/HuaweiH30-U10 
SCL-AL00 Build/HonorSCL-AL00 
PE-TL20 Build/HuaweiPE-TL20 
H30-U10 Build/HuaweiH30-U10 
H60-L01 Build/HDH60-L01

OPPO:

OPPO R7 Build/KTU84P 
OPPO R7t Build/KTU84P 
R7007 Build/JLS36C 
R2017 Build/JLS36C 
R6007 Build/JLS36C 
1105 Build/KTU84P 
N5117 Build/JLS36C 
M571C Build/LMY47D 
R7Plus Build/LRX21M 
X909T Build/JDQ39 
A31t Build/KTU84P 
A31 Build/KTU84P 
R8207 Build/KTU84P 
R833T Build/JDQ39

vivo:

vivo Y13iL Build/KTU84P 
vivo X5Pro D Build/LRX21M 
vivo Y22L Build/JLS36C 
vivo Y13T Build/JDQ39 
vivo X5Max Build/KTU84P

一加:

ONE A2001 Build/LMY48W

酷派:

Coolpad 8297 Build/JDQ39 
SK1-02 Build/KTU84P

華碩:

ASUS_Z00ADB Build/LRX21V

魅族:

M578C Build/LMY47D 
MX5 Build/LRX22C 
M571C Build/LMY47D

HTC: 
HTC T528d Build/IMM76D 
HTC One X Build/IML74K 
HTC M8t Build/LRX22G

聯想:

Lenovo A360t Build/KOT49H

美圖:

MeituM2 Build/JDQ39 
MeituM4 Build/JDQ39

SOYN: 
L50t Build/17.1.E.2.67

uimi: 
UIMI F7 Build/KOT49H

樂視: X600 Build/ABXCNOP5000609151S

努比亞: NX505J Build/KVT49L 
NX511J Build/LRX22G

金立: F103 Build/LRX21M 
V188 Build/KOT49H 
NX601J Build/KVT49L

中興:

ZTE G718C Build/KVT49L

雜牌: Q001 Build/KOT49H(歐沃) 
Aquaris M5 Build/LRX22G 
ZZBAO_Z5E Build/KTU84M(掌中寶) 

Nexus 4 Build/LRX22C(google)

搬運