๐ ์นํ์ด์ง ์ ์ ๊ธฐ๊ธฐ(๋ชจ๋ฐ์ผ / ํ๋ธ๋ฆฟ / PC) ๊ตฌ๋ถํ๊ธฐ
์นํ์ด์ง ์ ์ ๊ธฐ๊ธฐ ์ข ๋ฅ ์ฒดํฌ
์์ฆ์ ๋ฐ์ํ ์น์ด ๊ธฐ๋ณธ์ธ ์๋๋ผ, css์ @media screen์ ํตํด PC์ ๋ชจ๋ฐ์ผ ํ๋ฉด์ ๋ค๋ฅด๊ฒ ์ค์ ํ๋ค. ํ์ง๋ง ๋ ์์ ์ธ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ฉ UI๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ, ํํ์ด์ง์ ์ ์ํ๋ ๊ธฐ๊ธฐ๊ฐ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ์ฌ๋ถ ๋๋ ์๋๋ก์ด๋ ์ธ์ง ์์ดํฐ์ธ์ง ์ข ๋ฅ๋ฅผ ํ์ธ์ ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
์ด๋ฐ์ ๋ชจ๋ฐ์ผ ํ๋ฉด์์ ์ผ๋ถ css๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ์ง ์๊ฒ ํ์ฌ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๋ ธ๋ฆด๋๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ๊ฐ์ง๊ฐ ํ์์ ์ด๋ค. (Detecting a mobile browser)
๋ชจ๋ฐ์ผ / PC ๊ตฌ๋ถํ๊ธฐ
โ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ์์์ ๋ธ๋ผ์ฐ์ ์ ๋ณด ๋ฐ ๋๋ฐ์ด์ค ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ User-Agent ๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์์ดํฐ, ์์ดํจ๋, ์์ดํ, ์๋๋ก์ด๋ ๊ธฐ๊ธฐ ์ฌ๋ถ๋ฅผ ํ์ธํด true/false๋ฅผ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ๊ฐํธํ๊ฒ ๊ตฌํํ ์ ์๋ค.
useragent๋, ์ ์ํ์๋ฉด "๋ธ๋ผ์ฐ์ ์ ๋ํ ์๋ณ ์ฝ๋" ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ฉฐ ์ฌ๋์ผ๋ก ์๊ฐํ๋ฉด "์ฃผ๋ฏผ ๋ฑ๋ก์ฆ" ๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
์๋ณ๋๋ ๊ฒ์ ์ปดํจํฐ(๋จ๋ง๊ธฐ)์ ๋ํ OS ์ ๋ณด, ๋ธ๋ผ์ฐ์ ๋ฒ์ , ๋ ์ด์์ ์์ง ์ข ๋ฅ ๋ฑ ๋ด์์ ํญ์ ์๋ฒ์ ํต์ ํ ๋ ์ ์์ ์ ๋ณด๋ฅผ ๋ปํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
var isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); // ์๋๋ก์ด๋ ์์ดํฐ์ ๊ฒ์ฌํด ์ฒดํฌ
// ๋๋
var isMobile = /Mobi/i.test(window.navigator.userAgent); // "Mobi" ๊ฐ User agent์ ํฌํจ๋์ด ์์ผ๋ฉด ๋ชจ๋ฐ์ผ
ํ๋ธ๋ฆฟ์ ๊ตฌ๋ถํ๋ ๋ก์ง์ ๋ฐ๋ก ์๋ค. ํด๋น ์ฝ๋๋ ํ๋ธ๋ฆฟ์ ๊ตฌ๋ถํ์ง๋ ์๋๋ค.
(ํ๋ธ๋ฆฟ๋ง ๊ตฌ๋ถํ๋ ๋ก์ง์ ์๋์ ์ถ๊ฐ ํฌ์คํ ํ๋ค.)
๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ง์
ํ์ด์ง์๋, ๋ค์ํ ์ธ์ด๋ก ๊ตฌํ๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ฅผ ๊ฐ์งํ ์ ์๋ ์์ค ์ฝ๋๊ฐ ํฌํจ๋์ด ์๋ค.
๋งค์ฐ ๊ธด ์ ๊ท์์ ์ฌ์ฉํด์ ๋ค์ํ ์กฐ๊ฑด์ ํด๋นํ๋ ๊ธฐ๊ธฐ์์ ์ ์ํ๋ฉด true ํน์ false๋ฅผ ๋ฐํํ๋ ํจ์๊ฐ ๊ตฌํ๋์ด ์๋ค.
๋ค์ด์ ๋ฐ์ผ๋ฉด ํจ์ ์คํ์ ์ฝ๋๊ฐ ๋ด๊ธด ํ
์คํธ ํ์ผ์ ๋ด๋ ค๋ฐ๋๋ฐ, ์ด๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํด์ ์คํ์ํค๋ฉด, ๋ชจ๋ฐ์ผ์ผ ๊ฒฝ์ฐ http://detectmobilebrowser.com/mobile ๋ก ๋ ์๊ฐ๊ฒ ๋๋ค. ํด๋น ์ฝ๋์ if() ๋ฌธ ๋ถ๋ถ๋ง ๋ฐ์ ์ ์ ํ๊ฒ ์ปค์คํ
ํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ชจ๋ฐ์ผ์์๋ง CSS ํ์ผ ๋ก๋ํ๊ธฐ
PC๊ฐ ์๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์๋ง ํน์ css ํ์ผ์ ๋ก๋ํ๋๋ก ์ง์ ํจ์ผ๋ก์จ ๋ฆฌ์์ค ์ต์ ํ๋ฅผ ๋ ธ๋ฆด ์ ์๋ค.
์๋๋ก์ด๋ / ์์ดํฐ ๊ตฌ๋ถํ๊ธฐ
ํ์ด๋ธ๋ฆฌ๋ ๋ฐ ์น ์ฑ์ ๋ง๋ค๋ค๋ณด๋ฉด Android ์ IOS๋ฅผ ๊ตฌ๋ถํด์ผํ๋ ๋ถ๋ถ๋ค์ด ์๊ธด๋ค.
๋ค์์ User-Agent๋ฅผ ํตํด ์ป์ด๋ธ Android, IOS ๊ฐ ๊ธฐ๊ธฐ์ ์ ๋ณด์ด๋ค.
- Android
- Mozilla/5.0 (Linux; Android 9; SM-G955N Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3770.89 Mobile Safari/537.36
- IOS
- Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/71.0.3758.78 Mobile/15E148 Safari/605.1
โ์ ๋ณด๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ์๋๋ก์ด๋ํฐ์์๋ Android, ์์ดํฐ์์๋ iPhone์ด๋ผ๋ ๋ฌธ์์ด์ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ฅผ ํตํด์ ๋ฌธ์์ด ๊ฒ์์ผ๋ก ์์ดํฐ๊ณผ ์๋๋ก์ด๋ํฐ์ ๊ตฌ๋ถํ ์ ์๋ค.
var varUA = navigator.userAgent.toLowerCase(); //userAgent ๊ฐ ์ป๊ธฐ
if ( varUA.indexOf('android') > -1) {
//์๋๋ก์ด๋
} else if ( varUA.indexOf("iphone") > -1 || varUA.indexOf("ipad") > -1 ||varUA.indexOf("ipod") > -1 ) {
//IOS
} else {
//์์ดํฐ, ์๋๋ก์ด๋ ์ธ ๋ชจ๋ฐ์ผ
}
ํฐ์น ๊ธฐ๊ธฐ ๊ตฌ๋ถํ๊ธฐ
ํฐ์น ๋์ ์น UI๋ฅผ ์ ์ํ๋ ๊ฒฝ์ฐ ํฐ์น ๊ฐ๋ฅํ ์ฅ์น์ธ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ, ๋๋ ํฐ์น ๋์ ๊ธฐ๊ธฐ ๊ตฌ๋ถ์ ํด์ผํ๋ค.
const isTouchDevice = (navigator.maxTouchPoints || 'ontouchstart' in document.documentElement);
๋ชจ๋ฐ์ผ / ํ๋ธ๋ฆฟ ๊ตฌ๋ถํ๊ธฐ
mobile-detect ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ด์ ์ PHP๋ก ๊ตฌํ๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ ์ฒดํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ฐ์คํฌ๋ฆฝํธ ํฌํ ๋ฒ์ ์ด๋ค.
๊ธฐ๊ธฐ ๋ฐ ๋ธ๋ผ์ฐ์ ์ ๋ํ ์์ธ ์ ๋ณด๋ฅผ ์ป์ ์ ์๊ณ , ๋ํ ์ ํ๋ ์ญ์ ๋์์ ๋งค์ฐ ์ ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
$ npm install mobile-detect --save
<!-- cdn ๋ค์ด ๋งํฌ -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/mobile-detect/1.4.5/mobile-detect.min.js"></script>
๋ง์ผ userAgent ์ ๋ณด๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ํ๋ฉด,
- Mozilla/5.0 (Linux; U; Android 4.0.3; en-in; SonyEricssonMT11i Build/4.1.A.0.562)
AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
var md = new MobileDetect(navigator.userAgent);
console.log( md.mobile() ); // 'Sony'
console.log( md.phone() ); // 'Sony'
console.log( md.tablet() ); // null
console.log( md.userAgent() ); // 'Safari'
console.log( md.os() ); // 'AndroidOS'
console.log( md.is('iPhone') ); // false
console.log( md.is('bot') ); // false
console.log( md.version('Webkit') ); // 534.3
console.log( md.versionStr('Build') ); // '4.1.A.0.562'
console.log( md.match('playstation|xbox') ); // false
์ฝ๋์์ ๋ณผ์ ์๋ฏ์ด, ๋ค์ํ ์ ๋ณด๋ฅผ ์ทจ๋ํ ์์๋ api ๋ฉ์๋๋ฅผ ์ง์ํด์ค ์๊ธดํ๊ฒ ์ฐ์ผ์ ์๋ค.
์ด์์ฒด์ ๊ตฌ๋ถํ๊ธฐ
ํํ์ด์ง์ ์ ์ํ ์ด์์ฒด์ ๊ฐ MS์๋์ฐ, ๋งฅOS, ๋ฆฌ๋ ์ค ์ธ์ง ์ฒดํฌํ๋ค. ์ด๋ฅผ ์ด์ฉํด์ ์์คํ OS๊ฐ ์๋๋ฉด ๋ชจ๋ฐ์ผ๋ก ๊ฐ์ฃผํ๋ ๋ฐฉ๋ฒ๋ ์ฌ์ฉ์ ํ ์์๋ค.
๊ตฌ๊ธ ๋ฅ์์ค5 ๊ฐ์ ์ผ๋ถ ํน์ํ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ "linux", ๋๋ "null"์ ๋ฐํํ๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค.
//๋ฐ์คํฌํ ์ด์์ฒด์ ์ฒดํฌ
function isDesktopOS(){
return ( 'win16|win32|win64|windows|mac|macintel|linux|freebsd|openbsd|sunos'.indexOf(navigator.platform.toLowerCase()) >= 0 );
}