안드로이드 웹뷰에서 ..카카오링크 하는방법이 ?

html 페이지

자바스크립트 부분

 Kakao.init('xxxxxxxxxxxxxxxxxx');

// 카카오톡 링크 버튼을 생성합니다. 처음 한번만 호출하면 됩니다.
Kakao.Link.createTalkLinkButton({
  container: '#kakao-link-btn',
  label: '스타와 디자이너의 썸&쌈 콜라보레이션 패션왕 코리아에 초대 합니다. ',
  image: {
    src: 'http://xxx.xxx.xxx/xxx.png',
    width: '100',
    height: '100'
  },
  webButton: {
    text: 'Blarblar,
    url: 'https://play.google.com/store/apps/details?id=com.xxx.xxx' // 앱 설정의 웹 플랫폼에 등록한 도메인의 URL이어야 합니다.
  }
});

그리고 웹뷰의 MainActivity에서 는

private class myWebViewClient extends WebViewClient {
    	public static final String INTENT_PROTOCOL_START = "intent:";
        public static final String INTENT_PROTOCOL_INTENT = "#Intent;";
        public static final String INTENT_PROTOCOL_END = ";end;";
        public static final String GOOGLE_PLAY_STORE_PREFIX = "market://details?id=";

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith(INTENT_PROTOCOL_START)) {
                final int customUrlStartIndex = INTENT_PROTOCOL_START.length();
                final int customUrlEndIndex = url.indexOf(INTENT_PROTOCOL_INTENT);
                if (customUrlEndIndex < 0) {
                    return false;
                } else {
                    final String customUrl = url.substring(customUrlStartIndex, customUrlEndIndex);
                    try {
                        getBaseContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(customUrl)));
                    } catch (ActivityNotFoundException e) {
                        final int packageStartIndex = customUrlEndIndex + INTENT_PROTOCOL_INTENT.length();
                        final int packageEndIndex = url.indexOf(INTENT_PROTOCOL_END);

                        final String packageName = url.substring(packageStartIndex, packageEndIndex < 0 ? url.length() : packageEndIndex);
                        getBaseContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(GOOGLE_PLAY_STORE_PREFIX + packageName)));
                    }
                    return true;
                }
            } else {
                return false;
            }
        }
   			//return super.shouldOverrideUrlLoading(view, url);    //To change body of overridden methods use File | Settings | File Templates.
        }
    }

아래 부분을 추가 했습니다.

getContext() → getBaseContext() 만 변경 했구요…

html 에서 웹버튼을 클릭 하면 market://details?id=com.kakao.talk@referer={22appkey%22 이면서 웹페이지를 표시 할 수 없다고 나옵니다.

  1. Kakao.Link.createTalkLinkButton함수의 webButton파라미터에 넘기는 url파라미터에는, 공유할 '웹페이지’의 주소가 들어가야 합니다.

  2. shouldOverrideUrlLoading에서 url값을 찍어보면 어떤 값이 나오는지요?

저도 같은 문제입니다.
android os 4.2
옵티머스G 입니다.

market://details?id=com.kakao.talk&referrer={%22appkey%22:%22fd8db193107e649174e8d7c9056c10ad%22,%22KA%22:%22sdk/1.0.13%20os/javascript%20lang/ko-KR%20device/Linux_armv7l%22}

라고는 url이 나오네요.

참고로 갤럭시 S4 os 4.4에서는 위에 코드로 아무 문제 없이 잘 돌아갑니다.
4.2로 왔을시 저런 문제가 발생합니다.

안드로이드 4.1.2 에서는

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    	if(url.startsWith("intent:") || url.startsWith("kakaolink:") || url.startsWith("market:")){
    		Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
    		startActivity(intent);
    	}else{
    		view.loadUrl(url);;
    	}
    	return super.shouldOverrideUrlLoading(view, url);
    }

이코드로 하면 정상적으로 되고
android 4.4.2에서 위의 코드로 하면 오류가 발생 합니다.
url은

						Log.d("URL", customUrl);
						getBaseContext().startActivity(	new Intent(Intent.ACTION_VIEW, Uri.parse(customUrl)));

에서 출력된 내용은

kakaolink://send?appkey=APIKEY&appver=1.0&apiver=3.0&linkver=3.5&objs=%5B%7B%22objtype%22%3A%22label%22%2C%22text%22%3A%22%EC%8A%A4%ED%83%80%EC%99%80%20%EB%94%94%EC%9E%90%EC%9D%B4%EB%84%88%EC%9D%98%20%EC%8D%B8%26%EC%8C%88%20%EC%BD%9C%EB%9D%BC%EB%B3%B4%EB%A0%88%EC%9D%B4%EC%85%98%20%ED%8C%A8%EC%85%98%EC%99%95%20%EC%BD%94%EB%A6%AC%EC%95%84%EC%97%90%20%EC%B4%88%EB%8C%80%20%ED%95%A9%EB%8B%88%EB%8B%A4.%20%22%7D%2C%7B%22objtype%22%3A%22image%22%2C%22src%22%3A%22http%3A%2F%2Fbnsfolio.com%2Ffk%2Fimages%2Ffk_icon_100.png%22%2C%22width%22%3A100%2C%22height%22%3A100%7D%2C%7B%22objtype%22%3A%22button%22%2C%22text%22%3A%22%ED%8C%A8%EC%85%98%EC%99%95%20%EC%BD%94%EB%A6%AC%EC%95%84%20(SBS%EA%B3%B5%EC%8B%9D%EC%95%B1)%22%2C%22action%22%3A%7B%22type%22%3A%22web%22%2C%22url%22%3A%22https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.xxx.XXXXXX%22%7D%7D%5D 입니다.

참고로 에뮬레이터 에러 내용 입니다.
System.err(2775): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

@by_zerowater @kwangwook_jnn

아래 글 내용 참조 부탁드립니다~ 안드로이드 4.4부터 웹뷰의 내부 구현방식이 변경되었습니다.

https://devtalk.kakao.com/t/4-4/457/3?u=vincent