안드로이드 웹뷰에서 카카오네비 앱 호출 시 구글 Play Store 리다이렉션 문제

카카오네비 앱이 설치되지 않은 안드로이드 기기에서
웹뷰 기반의 타 서비스에서 카카오네비 앱 호출 시 구글 Play Store로 리다이렉션되는 과정에서 발생하는 문제입니다.
해당 현상을 재현해보면 아래의 이미지와 같습니다.

ezgif-5-52924a476c


아무래도 Google PlayStore로 Redirect 시 URL의 형식 문제인것 같은데요.
404 오류가 발생하는 URL은 다음과 같습니다.

  • 디코딩 전 URL

http://market.android.com/details?id=package=com.locnall.KimGiSa;S.browser_fallback_url=https%3A%2F%2Fkakaonavi.kakao.com%2Flaunch%2Findex.do%3Fappkey%3D44732c3ca5b90a4f1f49c6b38df023d1%26apiver%3D1.0%26extras%3D%257B%2522KA%2522%253A%2522sdk%252F1.43.0%2520os%252Fjavascript%2520sdk_type%252Fjavascript%2520lang%252Fko-KR%2520device%252FLinux_aarch64%2520origin%252Fhttps%25253A%25252F%25252Fkorean.visitkorea.or.kr%2522%257D%26param%3D%257B%2522destination%2522%253A%257B%2522name%2522%253A%2522%25EC%259E%25A5%25EC%25B6%25A9%25EB%258F%2599%2520%25EC%25A1%25B1%25EB%25B0%259C%2520%25EA%25B3%25A8%25EB%25AA%25A9%2522%252C%2522x%2522%253A127.0057825956%252C%2522y%2522%253A37.5604832175%257D%252C%2522option%2522%253A%257B%2522coord_type%2522%253A%2522wgs84%2522%252C%2522vehicle_type%2522%253A1%252C%2522rpoption%2522%253A100%252C%2522route_info%2522%253Afalse%257D%257D

  • 디코딩 된 URL

http://market.android.com/details?id=package=com.locnall.KimGiSa;S.browser_fallback_url=https://kakaonavi.kakao.com/launch/index.do?appkey=44732c3ca5b90a4f1f49c6b38df023d1&apiver=1.0&extras={“KA”:“sdk/1.43.0 os/javascript sdk_type/javascript lang/ko-KR device/Linux_aarch64 origin/https%3A%2F%2Fkorean.visitkorea.or.kr”}&param={“destination”:{“name”:“장충동 족발 골목”,“x”:127.0057825956,“y”:37.5604832175},“option”:{“coord_type”:“wgs84”,“vehicle_type”:1,“rpoption”:100,“route_info”:false}}

우선 해당 서비스에서 활용한 Kakao SDK는 2.0.1 버전이며 import 코드는 다음과 같습니다.

<script src="https://t1.kakaocdn.net/kakao_js_sdk/2.0.1/kakao.min.js" integrity="sha384-eKjgHJ9+vwU/FCSUG3nV1RKFolUXLsc6nLQ2R1tD0t4YFPCvRmkcF8saIfOZNWf/" crossorigin="anonymous"></script>

해당 버전 SDK의 minify 버전이 아닌 원본 버전의 코드를 살펴본 결과

원본 버전 URL : https://t1.kakaocdn.net/kakao_js_sdk/2.0.1/kakao.js

코드라인 5500~5600 부근에 callWeb2app() 메소드에서 androidIntent 변수에 해당하는 URL 값에 문제가 있는게 아닌가하여 임의로 코드를 수정하여 임시 방편으로 처리했습니다.

  • 기존 코드
function callWeb2app(naviScheme, fallbackUrl) {
  var androidIntent = ["intent:".concat(naviScheme, "#Intent"), 'com.locnall.KimGiSa', "S.browser_fallback_url=".concat(encodeURIComponent(fallbackUrl)), 'end;'].join('&');
  ...
}
  • 변경 후 코드
function callWeb2app(naviScheme, fallbackUrl) {
  var androidIntent = ["intent:".concat(naviScheme, "#Intent"), 'com.locnall.KimGiSa&S.browser_fallback_url='.concat(encodeURIComponent(fallbackUrl)), 'end;'].join     (';');
  ...
}

해당 문제가 발생하는 현상 본 내용 참고하시어 조치하는데 도움이 되시길 바라며,
혹시나 저희 서비스 혹은 소수 일부의 서비스에 한해 발생하는 문제라면 추가 가이드 주시면 좋을것 같습니다.

안녕하세요.
먼저 현상 제보해주셔서 감사드립니다.

404 페이지가 랜딩되는 현상은 디코딩 전 URL의 형식이 잘못된 것이 원인으로 추정하고 있습니다.

404 케이스: http://market.android.com/details?id=package=com.locnall.KimGiSa;S.browser_fallback_url=~
정상 케이스: http://market.android.com/details?id=com.locnall.KimGiSa

네이티브 웹뷰 구현에서 intent의 package=com.locnall.KimGiSa 구문을 파싱하고 있지 않은지 확인 부탁드려요.
만약 package 구문을 파싱해서 스토어로 이동시키는 로직이 있다면 제거해주시면 정상동작할 것으로 보입니다.