안드로이드 하이브리드 앱을 만들 때 앱과 웹의 구분을 하고 싶어하는 경우가 있다.


언제 앱에서 오고, 언제 웹에서 오는 지 어떻게 구분하는 걸까?


생각해보니 보통은 제품을 사용하니까 제품에서 특정 스크립트를 제공하거나 통신 시에 앱에서만 특정한 정보를 전달하는 경우가 있는데...제품을 사용하지 않고, 그냥 하려면 어떻게 하는 게 좋을까하고 조금 생각해보았다.


그래서 든 생각이 앱에서 http request를 던질 때 header를 커스텀하는 것이 생각나서 해봤는데, 꽤나 괜찮은 방법이었다.


그래서 열심히 검색 -> http://stackoverflow.com/questions/7610790/add-custom-headers-to-webview-resource-requests-android



 WebView  host = (WebView)this.findViewById(R.id.webView);
 String url = "<yoururladdress>";

 Map <String, String> extraHeaders = new HashMap<String, String>();
 extraHeaders.put("Authorization","Bearer"); 
 host.loadUrl(url,extraHeaders);


키밸류를 가지는 해쉬맵을 하나 만들어서 헤더에 추가하는 방법이다. (API Level 8 부터 지원한다)


앱에서만 이 정보가 넘어오므로, 서버에서는 해당 정보를 보내는 녀석만 앱으로 인식하면 된다.



응? 그런데 무엇인가 이상하다...어떤 폰은 잘 되는데, 어떤 폰은 서버에서 그런 키가 없다고 한다.


무엇이 문제란 말인가???


헤더를 읽어보니 크로미움을 적용하는 킷캣부터는 헤더의 키 값이 모두 소문자로 보내진다.


아항...그렇구나.


그럼 소문자로 키와 밸류를 별도로 적용하기로 한다.


안드로이드 젤리빈까지는 헤더에 값을 넣은대로 서버에서 헤더가 인식되는데, 킷캣부터는 내가 커스텀한 헤더의 정보는 모두 소문자로 들어가는 이슈가 있었던 것.


이걸로 잠시 삽질을 했다.


+ Recent posts