하이브리드 모바일 앱(앱 + 웹)에서 웹 부분은 브라우저에서 url을 직접 치고 접근이 가능하다.
이때 필요에 의해서 앱에서만 접근이 가능하게끔 바꿀 수 있다
나같은 경우 url로 로그인 페이지에 접근해서
http://대충홈주소/login.jsp?enc_id=인코딩된_아이디값 치면 접속이 돼버리는 문제가 생겨서 그냥 브라우저에서 접근을 막았다.
해당 접근을 막는 방법은 모바일 서버에서 request의 User-Agent 값을 확인하는 것이다
User-Agent는 간단히 말해 내가 어떤 OS를 쓰고 있고, 버전은 어떤 버전인지 웹 브라우저의 정보는 어떤 것인지 등을 담고 있는 번호판 같은 개념이라고 한다.
String userAgent = request.getHeader("User-Agent");
해당 값을 확인해서 웹뷰가 아니라면 접근을 차단하면 됐다.
대신 이때 접속 방법이
윈도우 PC, 안드로이드 브라우저, 안드로이드 앱
맥 PC, 아이폰 브라우저, 아이폰 앱 정도가 있는데
안드로이드 앱과 아이폰 앱만 접속 가능하도록 구현 해야했다.
User-Agent 예시
윈도우 PC , chrome
mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/94.0.4606.61 safari/537.36
안드로이드 브라우저 , chrome
mozilla/5.0 (linux; android 11; sm-a908n) applewebkit/537.36 (khtml, like gecko) chrome/94.0.4606.71 mobile safari/537.36
안드로이드 앱 , naver webview
mozilla/5.0 (linux; android 11; sm-a908n build/rp1a.200720.012; wv) applewebkit/537.36 (khtml, like gecko) version/4.0 chrome/80.0.3987.163 whale/1.0.0.0 crosswalk/25.80.14.29 mobile safari/537.36 naver(inapp; search; 1000; 11.6.7)
맥 PC , chrome
mozilla/5.0 (macintosh; intel mac os x 10_15_7) applewebkit/537.36 (khtml, like gecko) chrome/94.0.4606.61 safari/537.36
아이폰 브라우저 , chrome
mozilla/5.0 (iphone; cpu iphone os 15_0 like mac os x) applewebkit/605.1.15 (khtml, like gecko) crios/94.0.4606.52 mobile/15e148 safari/604.1
아이폰 앱 , kakaotalk webview
mozilla/5.0 (iphone; cpu iphone os 15_0_1 like mac os x) applewebkit/605.1.15 (khtml, like gecko) mobile/15e148 kakaotalk 9.5.1
구별 방법
안드로이드 앱 같은 경우 (linux; android 11; sm-a908n build/rp1a.200720.012; wv) 처럼 안에 "wv"라는 문자열이 존재해서
해당 값을 체크해서 그 문자열이 존재하면 통과시키고, 없으면 차단했다
아이폰은 "wv"같은 문자열이 없고, 대신 아이폰에서 접근하면 브라우저와 앱 모두 "iphone" 이라는 문자열이 존재하는데
여기서 브라우저만 "safari"라는 값이 추가로 더 존재하고, 앱은 없다(크롬같은 다른 브라우저도 다 safari라고 적힘)
그래서 iphone이라는 문자열이 존재할때 safari라는 문자열이 없으면 통과, 있으면 차단했다.
'안드로이드' 카테고리의 다른 글
안드로이드 앱 내에서 apk 파일 설치하기 (0) | 2024.11.28 |
---|---|
Firebase 클라우드 메시징 (1) | 2024.10.04 |
패러미터로 인터페이스 전달하기 (0) | 2024.09.10 |
SharedPreferences (0) | 2024.06.14 |