웹뷰(WebView) 캐시 설정

종종 멀티 플랫폼을 지원하는 서비스를 사용해 보면, 앱에서 웹뷰(WebView)를 사용해서 서버의 페이지를 보여주는 경우를 쉽게 볼 수 있다. 하지만, 네트웍이 안 되는 경우에는 아래와 같은 에러 페이지를 볼 수 있다. 사용자 관점에서 이 화면은 아주 안 좋은 경험(UX)을 줄 수 있고, 이 경우를 개선하기 위해서 네트웍을 사용할 수 없는 경우에 마지막에 본 페이지를 캐시해서 보여주기도 한다.

그래서, 네트웍을 사용할 수 없는 경우, 위의 에러 화면이 아니라 마지막으로 본 페이지를 보여주는 방법을 간단하게 살펴보면 아래와 같다.

public static void setWebView(Context context) {
	webView.getSettings().setAppCachePath(getContext().getCacheDir().getAbsolutePath());
	webView.getSettings().setAllowFileAccess(true);
	webView.getSettings().setAppCacheEnabled(true);
	webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);

	// 네트웍 연결여부를 확인한다. 
	if(!isNetworkAvailable(context)) {
	  webView.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
	}
}

public static boolean isNetworkAvailable(Context context) {
  ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo netInfo = cm.getActiveNetworkInfo();
  return netInfo != null && netInfo.isConnected();
}