- 안드로이드 웹뷰에서 카카오톡 공유 실행 시, (카카오톡 앱이 설치 되어 있어도) 웹으로 연결되어 아래처럼 로그인 페이지로 이동합니다.
- 로그 찍어보면 shouldOverrideUrlLoading 메서드를 거치지 않고 바로 setWebChromeClient의 onCreateWindow이 호출됩니다.
- IOS 웹뷰에서는 정상적으로 동작함
==> Javascript SDK에서 호출 쪽은 문제 없는 것으로 보입니다.
Kakao.Share.sendCustom({
templateId: 77237,
installTalk: true,
templateArgs: {
title: String(text),
description: "",
link: url,
thumb_url: img,
thumb_width: img_w,
thumb_height: img_h,
},
});
- 안드로이드에서 설정한 내용
AndroidManifest.xml
<manifest ...>
...
<queries>
<package android:name="com.kakao.talk" />
</queries>
...
<application ...>
<activity
android:name=".MainActivity"
android:exported="true"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="kakaolink"
android:scheme="kakao{네이티브앱키 입력함}" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
Log.d(TAG, "shouldOverrideUrlLoading: " + url);
if (url == null) {
return false;
}
try {
if (
url.startsWith("intent")
|| url.startsWith("intent:kakaolink")
|| url.startsWith(kakaoChannelUrl)
|| url.contains("kakao")
) {
try {
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
Intent existPackage = getPackageManager().getLaunchIntentForPackage(intent.getPackage());
if (existPackage != null) {
startActivity(intent);
} else {
Intent marketIntent = new Intent(Intent.ACTION_VIEW);
marketIntent.setData(Uri.parse("market://details?id=" + intent.getPackage()));
startActivity(marketIntent);
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
startProgress();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return false;
}
위 코드로 이전에는 카카오톡앱으로 바로 호출되었던 것으로 기억하는데, 이번에 SDK 업데이트 이후에 안되는 듯 합니다.(정확하지 않음)
여기 가이드처럼 똑같이 설정하고 intent 부분도 아래처럼
if (request.url.scheme == "intent") {
처리해도, shouldOverrideUrlLoading메서드로 진입을 하지 않아서 확인이 안됩니다.
intent 자체가 아예 url로 안들어오는 것으로 보이는데 어떻게 해야 할까요?
아니면 위와 같이 동작하는게 정상일까요?