User-Agent를 사용한 장치 감지
12273 단어 javascriptwebdevfrontendux
나는 보통 데스크탑에서 검색할 때 모바일 사용자만을 위한 것이 분명한 사이트의 콘텐츠를 접하게 됩니다.
User-Agent는 이 시나리오에서 도움이 될 수 있습니다.
MDN defines 사용자 에이전트는 다음과 같습니다.
The User-Agent request header is a characteristic string that lets servers and network peers identify the application, operating system, vendor, and/or version of the requesting user agent.
사용자 에이전트 문자열의 일반적인 형식은 다음과 같습니다.
모질라/5.0 (
<system-information>
) <platform>
( <platform-details>
) <extensions>
사용자의 장치 감지
사용자가 모바일에 있는지 확인하려면 아래 예에서 볼 수 있듯이 사용자 에이전트 문자열에서 "Mobi"를 찾아야 합니다.
const BUTTON = document.querySelector("button");
const { userAgent } = window.navigator;
// Set device to "mobile" if "Mobi" exists in userAgent else set device to "desktop"
const device = userAgent.includes("Mobi") ? "mobile 📱" : "desktop 💻";
BUTTON.addEventListener("click", () => alert(`You are on ${device}`));
위의 예는
데스크톱 데모
모바일 데모
브라우저에서 테스트
브라우저에서 이를 테스트하려면 개발자 도구를 열고 '장치 전환' 아이콘을 클릭하세요. 변경 사항을 적용하려면 페이지를 새로고침하세요.
실제 예
다음은 내 React 애플리케이션에서 이에 대한 실제 예입니다.
페더레이션 로그인에서 이것을 사용했습니다.
// Context API for device
import { createContext, useEffect, useState } from "react";
export type TDevice = "mobile" | "desktop";
export const DeviceContext = createContext<TDevice>("mobile");
const DeviceContextProvider: React.FC = ({ children }) => {
const [device, setDevice] = useState<TDevice>("mobile");
useEffect(() => {
const { userAgent } = navigator;
// Set device state
userAgent.includes("Mobi") ? setDevice("mobile") : setDevice("desktop");
}, []);
return (
<DeviceContext.Provider value={device}>{children}</DeviceContext.Provider>
);
};
export default DeviceContextProvider;
// login with provider hook
const useLoginWithProvider = (redirect: (path: string) => void) => {
const device = useContext(DeviceContext);
const [signInAttempt, setSignInAttempt] = useState(false);
const login = async (provider: string) => {
if (device === "mobile") { // Check if user is mobile
firebase.auth().signInWithRedirect(providers[provider]);
setSignInAttempt(true);
} else {
firebase
.auth()
.signInWithPopup(providers[provider])
.then(handleResult)
.catch(error => setError(error.message));
}
};
useEffect(() => {
if (signInAttempt) {
firebase
.auth()
.getRedirectResult()
.then(handleResult)
.catch(error => setError(error.message));
}
}, []);
return login;
};
export default useLoginWithProvider;
결론
분명히 이것이 미디어 쿼리를 대체하기 위한 것이 아니라는 것을 알 수 있지만 이것은 프로젝트에서 매우 유용할 수 있습니다. 미디어 쿼리는 주로 반응형 페이지에 사용되는 반면 이 방법은 장치별 기능이나 콘텐츠에 사용됩니다. 이는 주로 모바일 앱이 데스크톱 버전과 다르게 동작하기를 원할 때 유용합니다.
이를 사용하여 특히 프로그레시브 웹 앱을 다룰 때 모바일 사용자에게 앱과 같은 경험을 제공할 수 있습니다.
Read more from MDN docs
사진 제공: Daniel Korpai on Unsplash
Reference
이 문제에 관하여(User-Agent를 사용한 장치 감지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bugs_bunny/device-detection-with-the-user-agent-4fbj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)