안드로이드 웹뷰에서 카카오네비 앱 호출 시 구글 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%7B%22KA%22%3A%22sdk%2F1.43.0%20os%2Fjavascript%20sdk_type%2Fjavascript%20lang%2Fko-KR%20device%2FLinux_aarch64%20origin%2Fhttps%253A%252F%252Fkorean.visitkorea.or.kr%22%7D%26param%3D%7B%22destination%22%3A%7B%22name%22%3A%22%EC%9E%A5%EC%B6%A9%EB%8F%99%20%EC%A1%B1%EB%B0%9C%20%EA%B3%A8%EB%AA%A9%22%2C%22x%22%3A127.0057825956%2C%22y%22%3A37.5604832175%7D%2C%22option%22%3A%7B%22coord_type%22%3A%22wgs84%22%2C%22vehicle_type%22%3A1%2C%22rpoption%22%3A100%2C%22route_info%22%3Afalse%7D%7D

  • 디코딩 된 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 구문을 파싱해서 스토어로 이동시키는 로직이 있다면 제거해주시면 정상동작할 것으로 보입니다.