안드로이드에서만 작동하는 네이티브 앱의 경우는 알 수 없다.
다만 내가 웹을 위주로 개발을 하다보니…
안드로이드의 경우에도 모바일 앱이 아닌 모바일 웹인 경우가 많다.
즉, 화면만 모바일 기기로 보는 것일 뿐, 안에 내용은
일반적인 웹 서비스이다.
다만 모바일로 보기 위하여 WebView 라는 클래스의 도움을 받아
화면에 뿌려줄뿐…
여기서 문제가 발생한다.
웹 서비스의 경우 대부분 javascript 로 구성되어져있다.
안드로이드 환경에서 모바일 웹을 구현 할때에는
웹 서비스 URL 의 경우 h ttps(SSL)이 기본으로 되어 있어야만
javascript 를 사용할 수 있다.
※ 물론 예외는 있다.
SSL 이 적용 되지 않은 웹 서비스는 모바일 웹 어플리케이션을
개발 할 수 없다는 말인가..?
그것은 아니다.
@Javascritp 라는 어노테이션을 이용하여 다음과 같이 구현 할 수 있다.
MainActivity.java
//javascript 사용여부 true mWebView.getSettings().setJavaScriptEnabled(true); //웹서비스 <-> 안드로이드간 통신할 클래스 및 객체명 정의 mWebView.addJavascriptInterface(new WebBridge(), "android");
MainActivity.java
아래와 같이 기기 고유 ID 와 Push 메시지를 보낼 때 필요한 토큰 값을 return 받는
메소드를 정의하여 준다.
public class WebBridge{ @JavascriptInterface public String getPhoneId(){ return Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID); } @JavascriptInterface public String getToken(){ return FirebaseInstanceId.getInstance().getToken(); } }
모바일 웹서비스에서 호출 방법은 간단하다.
아래와 같이 사용하면 위에서 정의한 phoneId 와 token 값을 확인 할 수 있다.
//모바일웹과 일반웹을 구분하기 위함 if(window.android){ alert(window.android.getPhoneId()); alert(window.android.getToken()); }
물론 위와 같이 사용하였을 경우 일반적인 웹 서비스에서는 window.android 객체를
찾을 수 없기 때문에 실행되지 않지만, 모바일 웹에서는 정상 작동한다.
위와 같이 작업을 마치고 APK를 생성한 다음 Google Play Console 에 등록하면..
이상한(?) 메일을 받아 볼 수 있다..
설명을 보면…
상세사유와 수정해야 할 APK 버전, 그리고 수정 마감일(?)이 날아온다.
어플리케이션을 등록 해본 적이 처음이라 주의 사항 같은건가. .싶어서 넘어갔었는데..
수정마감일이 지나면, 구글플레이에서 등록한 어플리케이션이 등록 취소 된다.
즉, 다운 로드 받을 수 없는 상황이 발생되기 때문에…
사용자가 많은 어플리케이션의 경우 큰 타격을 입지 않을까 싶다.
하여 처음에는 Webview에서 URL을 호출 할때 http -> https 로 변경한 후
어플리케이션을 등록해보았다… (테스트 할 당시 캐시 문제인지 정상작동..ㅠㅠ)
//이전버전 //mWebView.loadUrl("http://esoclan.com"); //임시변경 mWebView.loadUrl("https://esoclan.com");
절대.. 네버.. SSL 이 등록되어 있지 않다면, 위와 같은 실수는 할지 말 것..!
웹어플리케이션을 실행해보면, 흰 화면만 나오고.. 아무것도 진행이 안된다;;
물론 SSL 처리가 되어있다면 위와 같은 방식으로 처리해도 될 지도…?
하지만 SSL 처리가 되어 있었다면… 여기저기 search 할 필요도 없었겠지만..;;
최종적으로 찾은 결과는 아래와 같다.
//javascript 사용여부 true mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(final WebView view, String url) { if(url.indexOf("test.php") > -1) { String phoneId = Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID); String tokenId = FirebaseInstanceId.getInstance().getToken(); mWebView.loadUrl("javascript: updateInfo('" + phoneId + "', '" + tokenId + "');"); } } });
javascript 사용여부는 true이고
WebView 클래스의 mWebView 객체에 내장되어 있는
setWebViewClient 클래스를 선언하여 이용한다.
onPageFinished 메소드를 오버라이드 한다.
특정 URL에 해당하면 javascript 명을 호출하여준다.
※ 해당 URL 에서 javascript 메소드가 선언되어 있거나,
선언되어있는 js를 include 해주어야 한다.
이때 javascript 의 인자는 필요한 값을 넘겨주면 된다.
위와 같이 하고 플레이 스토어에 다시 등록하면, 별다른 보안 이슈 메일이 오지 않고,
정상적으로 등록되어 서비스를 이어 나갈 수 있게 된다.
0 글이 마음에 드셨다면 하트 꾸욱~