V1.28.1 안드로이드 installTalk가 먹히지 않는 이슈

안녕하세요

구글 ‘사기성 광고’ 심사기준을 피하기 위해
카카오톡이 설치되어 있지 않은경우에는 구글플레이로 보내는 기능을 막으려고 합니다.

이미 비슷한 이슈로 올라온 글이 있어 읽어 보았습니다.

이 전의 글에서 말씀하신대로
자바스크립트 SDK를 업데이트 했고
installTalk : false 로 설정하였습니다.
그런데 여전히 구글플레이로 강제 이동되는 현상이 있습니다.

이 부분 다시한번 확인 부탁드립니다.

<테스트 환경>
kakao.min.js (v1.28.1)
안드로이드 8.0.0

안녕하세요.
개발 중인 사이트 URL을 알려주실 수 있을까요? (재현이 되지 않아서요.)

그 이후 단말기에 카카오톡 앱을 설치하고 삭제하니 구글플레이로 이동되는 현상은 사라졌습니다.
현상이 다르게 나타나는 것이 카카오톡 앱 설치 후 삭제한 것과 연관이 있는지는 모르겠습니다.

그런데 그 이후 또 다른 현상이 발생합니다.
저희쪽 앱의 안드로이드 웹뷰에서 카카오톡 실행 시 저희 앱이 죽어버리는 현상이 생깁니다.
몇번을 재현해도 마찬가지 입니다.

kakao js를 구버전으로 롤백하니 앱이 죽어버리는 현상은 없어졌습니다.
대신 이전에 말씀드린대로 구글플레이로 강제 이동 시키고 있습니다.

  • kakao js 1.28.1 안드로이드 오류 로그입니다.

2019-03-06 15:10:11.202 27311-27311/com.himart.main E/AndroidRuntime: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=kakaolink://send?appkey=e2d7a0abaed86e78d070ab163620df70&appver=1.0&linkver=4.0&template_json={“P”:{“TP”:“Feed”,“ME”:"${ME}",“SID”:“capri_54246”,“DID”:“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104",“SNM”:“하이마트”,“SIC”:“https://k.kakaocdn.net/14/dn/btqp9mMehMZ/Oz3LoikYoa3k9Mk732HSOk/o.jpg”,“L”:{“LCA”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink”,“LCI”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink”,“LPC”:“http://www.e-himart.co.kr”,“LMO”:“http://www.e-himart.co.kr”,“LCP”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink”,“LCM”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink”,“LA”:“market://details?id=com.himart.main”,“LI”:“https://itunes.apple.com/app/id503522370”},“SL”:{“LCA”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink”,“LCI”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink”,“LPC”:“http://www.e-himart.co.kr”,“LMO”:“http://www.e-himart.co.kr”,“LCP”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink”,“LCM”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink”,“LA”:“market://details?id=com.himart.main”,“LI”:“https://itunes.apple.com/app/id503522370”},“LA”:“market://details?id=com.himart.main”,“LI”:“https://itunes.apple.com/app/id503522370”,“VA”:“6.0.0”,“VI”:“5.9.8”,“VW”:“2.5.1”,“VM”:“2.2.0”,“FW”:true,“RF”:“out-client”},“C”:{“THC”:1,“THL”:[{“TH”:{“THU”:“https://k.kakaocdn.net/dn/cChBMp/bWYtqnj9tlm/466FwtBftsKCklkRSek84K/kakaolink40_original.jpg”,“W”:300,“H”:300},“L”:{“LCA”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink?url=http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,“LCI”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink?url=http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,“LPC”:“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,“LMO”:“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”}}],“TI”:{“TD”:{“T”:"하이마트 쇼핑몰\n[최대혜택가:157”,“D”:“하이마트 쇼핑몰\n[최대혜택가:157”},“L”:{“LCA”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink?url=http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,“LCI”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink?url=http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,“LPC”:“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104",“LMO”:“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”}},“BUL”:[{“BU”:{“T”:"웹으로 보기”},“L”:{“LPC”:“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104",“LMO”:“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”}},{“BU”:{“T”:"앱으로 보기”},“L”:{“LCA”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink?url=http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,“LCI”:“kakao508f5dcef98bd80a90822827132e77f6://kakaolink?url=http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,“LPC”:“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104",“LMO”:“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”}}]}}&template_args={"${IMAGE_WIDTH}":“300”,"${SECOND_BUTTON_WEB_URL}":“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,"${SECOND_BUTTON_MOBILE_WEB_URL}":“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,"${IOS_EXECUTION_URL}":“kakao508f5dcef98bd80a90822827132e77f6://kakaolink?url=http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,"${IMAGE_URL}":“https://k.kakaocdn.net/dn/cChBMp/bWYtqnj9tlm/466FwtBftsKCklkRSek84K/kakaolink40_original.jpg”,"${IMAGE_COUNT}":“1”,"${FIRST_BUTTON_TITLE}":"웹으로 보기”,"${DESCRIPTION}":“하이마트 쇼핑몰\n[최대혜택가:157”,"${SHARED_COUNT}":"","${ANDROID_EXECUTION_URL}":“kakao508f5dcef98bd80a90822827132e77f6://kakaolink?url=http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,"${FIRST_BUTTON_IOS_EXECUTION_URL}":"","${FIRST_BUTTON_MOBILE_WEB_URL}":“http://m.e-himart.co.kr/app/goods/goodsDetail?go
2019-03-06 15:10:11.203 27311-27311/com.himart.main E/AndroidRuntime: akao508f5dcef98bd80a90822827132e77f6://kakaolink?url=http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,"${SUBSCRIBER_COUNT}":"","${IMAGE_HEIGHT}":“300”,"${TITLE}":“하이마트 쇼핑몰\n[최대혜택가:157”,"${SECOND_BUTTON_TITLE}":“앱으로 보기”,"${MOBILE_WEB_URL}":“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104","${FIRST_BUTTON_ANDROID_EXECUTION_URL}":"","${VIEW_COUNT}":"","${WEB_URL}":“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,"${LIKE_COUNT}":"","${FIRST_BUTTON_WEB_URL}":“http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”,"${SECOND_BUTTON_ANDROID_EXECUTION_URL}":“kakao508f5dcef98bd80a90822827132e77f6://kakaolink?url=http://m.e-himart.co.kr/app/goods/goodsDetail?goodsNo=0001947104”}&template_id=3140&extras={“KA”:"sdk/1.28.1 os/javascript lang/ko-KR device/Linux_armv8l origin/http%3A%2F%2Fm.e-himart.co.kr”} flg=0x14008000 }

구글플레이 이동 된 현상은 캐시가 남아 있어서 발생했던 것 같아요.

kakao js sdk 1.22.0 버전을 사용 + 톡이 설치된 환경에서도 동일한 현상이 있는지 확인 부탁드릴게요.

  • 1.22.0 버전 + 톡이 설치된 환경
    테스트결과 : 카카오톡 앱이 실행 됩니다.
1개의 좋아요

웹뷰에서 카카오링크 인텐트를 캐치하여 별도로 톡을 실행하는 코드가 어떻게 되나요?

말씀해주신 예외 기준으로는 아마 아래와 같은 방식으로 shouldOverrideUrlLoading()에서 intent:kakaolink://send 로 들어오는 요청을 캐치하여 startActivity를 하고 계실 것 같아요.

        override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
            if (request.url.toString().startsWith("intent:")) {

                val url = request.url.toString().substring(7)
                val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
                startActivity(intent)
                return true
            }
            return super.shouldOverrideUrlLoading(view, request)
        }

이 때 톡이 설치되어있지 않은 경우에 ActivityNotFoundException 이 발생하기 때문에 아래와 같이 예외를 잡아주시고 개발자님의 별도 처리를 해주셔야할 것 같아요.

        override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
            if (request?.url.toString().startsWith("intent:")) {

                val url = request?.url.toString().substring(7)
                val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))

                try {
                    startActivity(intent)
                } catch (e: ActivityNotFoundException) {
                    Log.e("activityNotFound", e.toString())
                }
                return true
            }
            return super.shouldOverrideUrlLoading(view, request)
        }

Intent 를 잡는 방식은 제가 간단하게 구현한 것이고 이 부분은 개발자님이 더 좋은 로직으로 개발해 주시면 될 것 같고 try catch 부분만 추가해 주시면 됩니다! 이 방식으로도 해결이 안되면 또 댓글 달아주세요 :slight_smile:

1개의 좋아요