이전 글에서 User-Agent를 통해서 로그인 연동을 하였다고 하였습니다.

Cordova 문서를 살펴보면 아래와 같은 설정(config.xml)을 통해서 User-Agent를 전부 또는 추가할 수 있습니다.

http://cordova.apache.org/docs/en/edge/guide/platforms/android/config.html


<preference name="OverrideUserAgent" value="Mozilla/5.0 My Browser" />
<preference name="AppendUserAgent" value="Test/1.0" />

User-Agent:Mozilla/5.0 (Linux; Android 4.4.4; SHV-E370K Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 Test/1.0


하지만 해당 설정은 기본 WebView에서만 사용할 수 있는 설정입니다.

Cordova 4.0부터는 Crosswalk WebView(Google Chromium)를 플러그인 형태로 추가할 수 있습니다. 안드로이드 WebView가 기본적으로 느리고 ionic에서 사용하는 몇몇 기능들 동작들이 제대로 안되는 문제도 있습니다. 다만 Crosswalk WebView를 추가하게 되면 앱 사이즈가 20MB정도 늘어납니다.

Crosswalk WebView에서 위의 설정을 사용할 수가 없어 Crosswalk WebView 소스에서 커밋된 리스트 중에 User-Agent를 설정하는 부분을 찾았습니다.

https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview/commit/0bea1d0313d05bfd74f02e52d2f85efdd7c48f4e


해당 commit위의 소스를 하나 더 적용시키면 중요한 소스는 아래와 같습니다.

private void initWebViewSettings() {

        webView.setVerticalScrollBarEnabled(false);

        String xwalkUserAgent = preferences == null ? "" : preferences.getString(PREF_USER_AGENT, "");

        if (!xwalkUserAgent.isEmpty()) {

            webView.setUserAgentString(xwalkUserAgent);

        }

    }

그런데 위의 소스는 Override되기만 하기 때문에 User-Agent에 들어가는 안드로이드 버전, 디바이스 정보 등등을 알수가 없습니다. 그래서 검색을 해보니 아래와 같이 변경을 하면 됩니다.

http://stackoverflow.com/questions/4103963/is-there-a-way-to-obtain-the-default-user-agent-string-aside-from-webview-getset


private void initWebViewSettings() {

        webView.setVerticalScrollBarEnabled(false);

        String xwalkUserAgent = preferences == null ? "" : preferences.getString(PREF_USER_AGENT, "");

        if (!xwalkUserAgent.isEmpty()) {

            String userAgent = System.getProperty( "http.agent" );

            webView.setUserAgentString(userAgent + " " + xwalkUserAgent);

        }

    }

User-Agent:Dalvik/1.6.0 (Linux; U; Android 4.4.4; SHV-E370K Build/KTU84P) Test/1.0


User-Agent 값을 비교해보시면 아시겠지만 브라우저 정보는 보이지 않습니다. 브라우저 정보는 Crosswalk WebView라 어떻게 보면 굳이 꼭 필요한가란 생각과 시간의 문제도 있고 이정도면 괜찮을 것 같습니다.


iOS에는 기본 WebView를 사용할 수도 있는데 아직 테스트는 해보지 않았습니다.


Posted by resisa