아버지가 부탁하신 선박검색앱의 버그도 어느정도 잡았고, 자동 업데이트도 구현해놔서 이제 버그는 없겠지하고 안심하고 있었는데 아뿔싸..
아버지가 어느 선사의 웹페이지가 켜지지 않고 위 사진의 오류가 뜬다며 나를 호출하셨다.
증상 구현
아버지깨선 앱을 키고, 가장 먼저 '범블비호'라는 선사의 웹페이지에 접속하면 위와 같은 오류가 뜨거나 크롬 창이 감빡하고 나타났다 사라진다고 하셨다.
그로고 다른 선사들의 페이지는 멀쩡하게 접속되고, 아무 선사나 들어갔다 나간뒤 범블비호의 웹페이지에 접속하면 멀쩡해진다고 하셨다.
웹뷰 이번에도 너 때문이냐
처음에는 웹뷰 관련 오류인줄 알고 아버지께 웹뷰 업데이트와 크롬이 뭔가 안맞는거 같으니 임시로 다른 선사를 먼저 들어가고 범블비호를 들어가라고 해둔 뒤 디버깅에 돌입했다.
우선은 본인의 폰에서 테스트한 결과, 똑같이 재현되었다. 우선 웹뷰의 업데이트를 삭제하고 들어가봤는데 얼래? 똑같은 화면이 표시되었다.
일단 로그부터 까보자
웹뷰 업데이트를 제거했는데도 해당 증상이 발생한다는것은 내 코드에 문제가 있다는것이고, 그럼 로그에도 뭐든 찍힐것이기 때문에 로그가 찍히는걸 보면서 확인해봤다.
하지만 야속하게도 로그에는 워닝 조차도 쓰지 않았고, 디버깅은 미궁으로 빠져들어갔다.
설마 한국 URL 때문에?
그렇게 저 문구를 구글이던 네이버던 수십번을 검색해봤지만, 다들 과거에 있던 웹뷰 업데이트로 인한 앱 먹통사태만을 설명할뿐 내 케이스는 전혀 나오질 않았다.
그러던중 머릿속을 스쳐지나가는 생각하나.
저 URL 한글이였지 않았나?
범블비호 선사의 URL은 범블비호.com으로 한글 URL을 사용중이다.
한글 URL은 당연하게도 해외에서는 전혀 사용되지 않기 때문에 Intent 인자로 넘겨줄때 무언가 궁합이 안맞아서 허용되지 않은 문자열이 흘러들어가고,
이때문에 크롬이 튕기는건데 안드로이드는 이게 웹뷰 충돌로 튕기는것으로 착각해 웹뷰 오류창을 보여준것이라는 가설이 세워졌다.
퓨리코드 변환
그래서 해당 오류를 수정하기 위해 입력한 URL을 퓨니코드로 변환한 URL로 크롬을 열게 해주면 해결이 된다.
여기서 퓨리코드란 xn--cg4bkiv2oina.com 이런식의 누가봐도 스팸 웹사이트 냄새 풀풀나는 URL인데
사실 이는 한글URL을 기본URL에서 사용가능한 문자들로 바꾼 인코딩중 하나이다.
참고로 저 인코딩된 URL은 삼성전자.com이나, 아쉽게도 삼전으로 리다리렉트되진 않고 도메인 판매사이트로 이동된다.
이후 URL을 퓨니코드로 인코딩해 열어주는 코드만 추가하니 문제가 해결되었다
String link = selectedShip.link;
if(!link.startsWith("http://") || !link.startsWith("https://"))
link = "http://" + IDN.toASCII(link);
else
link = "http://" + IDN.toASCII(link.split("//")[1]);
Log.d("link", link);
Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse(link));
[ 해당글은 https://blog.bass9030.dev/post/14 에서 이전된 글입니다 ]
[Android] Intent로 웹페이지를 열면 웹뷰 충돌이 발생할때
아버지가 부탁하신 선박검색앱의 버그도 어느정도 잡았고, 자동 업데이트도 구현해놔서 이제 버그는 없겠지하고 안심하고 있었는데 아뿔싸.. 아버지가 어느 선사의 웹페이지가 켜지지 않고 위
blog.bass9030.dev
'코딩 스래기' 카테고리의 다른 글
마훅 - 마후마후 트윗 번역 웹훅 제작기 (0) | 2025.01.20 |
---|---|
[Web] NodeJS로 웹 푸시알림 구현하기 (0) | 2024.04.03 |
[Web] form 태그에서 js 추가 안하고 원하는 페이지로 리다이렉트하기 (0) | 2021.04.01 |
[Python] win32api 모듈을 사용한 코드를 exe로 변환시 'win32api : 지정된 모듈을 찾을수 없습니다.' (0) | 2020.03.09 |