안드로이드 4.4 웹뷰 사용시 카카오링크가 전송이 되지 않습니다

처음 개발할때는 정상적으로 자바스크립트로 카카오톡 링크가 됬었는데 몇일전부터
intent:kakaolinke://send 하면서 웹페이지를 표시할수 없다고 뜨네요

G-pro2,
4.4

개발자 사이트의 링크 데모들이 모두 같은 현상입니다.

webView에서 자바스크립트 호출을 하였습니다.

3개의 좋아요
     private void loadkakao(String url) {
       try {
        		Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            	intent.addCategory(Intent.CATEGORY_BROWSABLE);
            	intent.putExtra(Browser.EXTRA_APPLICATION_ID,getPackageName());
            	startActivity(intent);
        	} catch (ActivityNotFoundException e) {
        		  Intent intent = new Intent(Intent.ACTION_VIEW);
        	  intent.setData(Uri.parse("market://details?id=" + "com.kakao.talk"));
        	  startActivity(intent);
          Log.d(TAG, "카카오톡이 설치되어있지 않음 : " + e.toString());
        	} catch (Exception e) {
        		  Log.d(TAG, "기타에러 : " + e.toString());
        	}
    }

자꾸 카카오톡이 설치가 안되어있다고 그러네요 ㅜㅜ

안녕하세요, 갤럭시s3 에서 에러가 나고 있습니다 글과는 오류 상황이 약간 다른 것 같아 새로운 토픽으로 이동하였습니다.

안드로이드 4.4 SDK부터 웹뷰가 Chromium기반으로 변경되면서, User-Agent에는 Chrome이 포함되지만 Intent를 지원하지 않아서 발생하는 문제입니다.

아래와 같이 직접 Intent를 핸들링 하실 수는 있습니다.
(웹뷰의 경우 커스톰하게 변경할 수 있는 요소들이 있어서 공식 지원 대상에 포함되지는 않음을 알려드립니다.)

     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 {
                        getContext().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);
                        getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(GOOGLE_PLAY_STORE_PREFIX + packageName)));
                    }
                    return true;
                }
            } else {
                return false;
            }
        }
    }
3개의 좋아요

우왕… 해결되었습니다. 정말 감사합니다.

3개의 좋아요

저도 해결이 되었어요 감사합니다~

2개의 좋아요

이 코드를 적용해서 확인해보았는요.
카카오 앱이 깔려있으면 정상동작하는데, 앱이 없으면 마켓 설치로 이동해야되잖아요?
그런데 이동을 안하네요…
확인해보니까 final String packageName = url.substring(packageStartIndex, packageEndIndex < 0 ? url.length() : packageEndIndex); 여기 packageName에 package=com.kakao.talk 이 들어가있네요 ㅎㅎ
저처럼 삽질하지마시고 안되시는분들은 package= 는 빼고 적용하시길~

3개의 좋아요

지원 여부를 떠나 intent:kakaolink:// 라는 형식 자체에 대한 고민이 필요하지 않을까 싶습니다.

2개의 좋아요

형식이 지금
intent://join?l=sy6qczo&r=ew%3ahttp%3a%2f%2fxn--ou6bo7j.net%2f#intent;scheme=kakaoopen;package=com.kakao.talk;end
게 바뀌는 바람에 또 글짜조합했네요…

1개의 좋아요