본문 바로가기

프로그래밍 TIP/Android

android webview custom url 처리 오류

저의 경우는 custom:\\{"job":"do","key":"data"} 와 같은 형태로 사용하고 있습니다.

현재 그렇게 사용할 경우 클라이언트 부분에서 javascript에서 오류가 발생해서 사용할 없습니다.

custom:\\{"job":"do","key":"data"}와 같은 코드는 아래의 함수를 사용해서 인코딩 후 사용하셔야 합니다.

encodeURIComponent
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    return commonUrlLoading(view, request.getUrl().toString());
}

해당 코드는 아래와 같이 앞부분 커스텀 스킴 부분을 삭제하고 디코드해서 사용하시면 됩니다.

String temp = url.replace(APP_SCHEME, "");
Log.d(TAG, "commonUrlLoading temp : " + temp);
// 인코딩된 문자열인지 확인하고 디코딩
try {
    // URLDecoder를 사용하여 디코딩
    temp = URLDecoder.decode(temp, StandardCharsets.UTF_8.toString());
    Log.d(TAG, "commonUrlLoading decoded temp : " + temp);
} catch (Exception e) {
    Log.e(TAG, "URL decoding error", e);
}
// JSON 문자열을 Map으로 변환
Type mapType = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> param = gson.fromJson(temp, mapType);
Log.d(TAG, "commonUrlLoading: param : " + param);
// Map에서 job 값 추출
String job = MapUtils.getString(param, KEY_JOB, "");