Language/JavaScript (WEB)

๐ŸŒ ์›นํŽ˜์ด์ง€ ์ ‘์† ๊ธฐ๊ธฐ(๋ชจ๋ฐ”์ผ / ํƒœ๋ธ”๋ฆฟ / PC) ๊ตฌ๋ถ„ํ•˜๊ธฐ

์ธํŒŒ_ 2022. 3. 7. 12:57

detect-mobile-tablet-pc

์›นํŽ˜์ด์ง€ ์ ‘์† ๊ธฐ๊ธฐ ์ข…๋ฅ˜ ์ฒดํฌ

์š”์ฆ˜์€ ๋ฐ˜์‘ํ˜• ์›น์ด ๊ธฐ๋ณธ์ธ ์‹œ๋Œ€๋ผ, css์˜ @media screen์„ ํ†ตํ•ด PC์™€ ๋ชจ๋ฐ”์ผ ํ™”๋ฉด์„ ๋‹ค๋ฅด๊ฒŒ ์„ค์ • ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋…์ž์ ์ธ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์šฉ UI๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ, ํ™ˆํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋Š” ๊ธฐ๊ธฐ๊ฐ€ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ ์—ฌ๋ถ€ ๋˜๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ์ธ์ง€ ์•„์ดํฐ์ธ์ง€ ์ข…๋ฅ˜๋ฅผ ํ™•์ธ์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค.

์ด๋ฐ–์— ๋ชจ๋ฐ”์ผ ํ™”๋ฉด์—์„  ์ผ๋ถ€ css๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š๊ฒŒ ํ•˜์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๋…ธ๋ฆด๋•Œ๋„ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ ๊ฐ์ง€๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค. (Detecting a mobile browser)

detect-mobile-tablet-pc


๋ชจ๋ฐ”์ผ / 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๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

 

Detect Mobile Browsers - Open source mobile phone detection

 

detectmobilebrowsers.com

๋ชจ๋ฐ”์ผ-ํƒœ๋ธ”๋ฆฟ-PC-๊ตฌ๋ถ„
๋ชจ๋ฐ”์ผ-ํƒœ๋ธ”๋ฆฟ-PC-๊ตฌ๋ถ„

๋‹ค์šด์„ ๋ฐ›์œผ๋ฉด ํ•จ์ˆ˜ ์‹คํ–‰์‹ ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ธด ํ…์ŠคํŠธ ํŒŒ์ผ์„ ๋‚ด๋ ค๋ฐ›๋Š”๋ฐ, ์ด๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ ์‹คํ–‰์‹œํ‚ค๋ฉด, ๋ชจ๋ฐ”์ผ์ผ ๊ฒฝ์šฐ http://detectmobilebrowser.com/mobile ๋กœ ๋‚ ์•„๊ฐ€๊ฒŒ ๋œ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ์˜ if() ๋ฌธ ๋ถ€๋ถ„๋งŒ ๋”ฐ์™€ ์ ์ ˆํ•˜๊ฒŒ ์ปค์Šคํ…€ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

๋ชจ๋ฐ”์ผ์—์„œ๋งŒ CSS ํŒŒ์ผ ๋กœ๋“œํ•˜๊ธฐ

PC๊ฐ€ ์•„๋‹Œ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ๋งŒ ํŠน์ • css ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋„๋ก ์ง€์ •ํ•จ์œผ๋กœ์จ ๋ฆฌ์†Œ์Šค ์ตœ์ ํ™”๋ฅผ ๋…ธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿš€ ๋ชจ๋ฐ”์ผ / ํƒœ๋ธ”๋ฆฟ ์—์„œ๋งŒ CSS ํŒŒ์ผ ๋กœ๋“œ ์ตœ์ ํ™”

CSS ํŒŒ์ผ ๋กœ๋“œ ์ตœ์ ํ™” ๋ณดํ†ต ํƒœ๊ทธ์˜ css ํŒŒ์ผ ๋กœ๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จ(blocking) ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, css ํŒŒ์ผ์ด ํฌ๋ฉด ํด์ˆ˜๋ก ๊ทธ๋งŒํผ ์›นํŽ˜์ด์ง€ ์†๋„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์™ ๋งŒํ•ด์„  css ํŒŒ์ผ

inpa.tistory.com


์•ˆ๋“œ๋กœ์ด๋“œ / ์•„์ดํฐ ๊ตฌ๋ถ„ํ•˜๊ธฐ

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐ ์›น ์•ฑ์„ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด 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๋กœ ๊ตฌํ˜„๋œ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ ์ฒดํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํฌํŒ… ๋ฒ„์ „ ์ด๋‹ค.

๊ธฐ๊ธฐ ๋ฐ ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ณ , ๋˜ํ•œ ์ •ํ™•๋„ ์—ญ์‹œ ๋†’์•„์„œ ๋งค์šฐ ์œ ์šฉํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.

 

mobile-detect

Device detection (phone, tablet, desktop, mobile grade, os, versions). Latest version: 1.4.5, last published: a year ago. Start using mobile-detect in your project by running `npm i mobile-detect`. There are 546 other projects in the npm registry using mob

www.npmjs.com

$ 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 );
}