반응형
PC나 모바일 웹 환경에서는 카카오 공유하기가 정상적으로 작동하지만
웹뷰로 카카오 공유하기 기능을 이용할 때 작동을 하지 않는다.
공식 카카오 Q&A에 올라온 코드도 정상적으로 작동하지 않아서 이곳저곳 긁어서 커스터마이징했다.
올바른 구현은 아닐 수 있지만 개인적으로 정상 작동해서 쓰는 중이다.
언어는 Kotlin이며 webViewClient에 shouldOverrideUrlLoading를 오버라이딩해서 구현한다.
MainActivity.kt
val myWebView: WebView = findViewById(R.id.webView)
myWebView.settings.run {
// 웹뷰 자바스크립트 허용
javaScriptEnabled = true
javaScriptCanOpenWindowsAutomatically = true
setSupportMultipleWindows(true)
}
myWebView.webViewClient = object: WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView,request: WebResourceRequest): Boolean {
Log.d(TAG, request.url.toString())
if (request.url.scheme == "intent") {
try {
// Intent 생성
val intent = Intent.parseUri(request.url.toString(), Intent.URI_INTENT_SCHEME)
// 카카오톡이 깔려 있으면 그대로 코드 실행, 깔려 있지 않으면 예외 발생
packageManager.getPackageInfo("com.kakao.talk", PackageManager.GET_ACTIVITIES)
startActivity(intent)
return true
} catch (e: URISyntaxException) {
Log.e(TAG, "Invalid intent request", e)
} catch (e: Exception) {
// 실행 못하면 웹뷰는 에러가 발생하므로
// 본인이 원하는 사이트로 이동(보통 메인으로 redirect)
myWebView.loadUrl("https://stir.tistory.com")
// 플레이 스토어 - 카카오톡으로 이동
val intentStore = Intent(Intent.ACTION_VIEW)
intentStore.addCategory(Intent.CATEGORY_DEFAULT)
intentStore.data = Uri.parse("market://details?id=com.kakao.talk")
startActivity(intentStore)
}
}
return false
}
}
AndroidManifest.xml
아래 queries 부분을 추가해준다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<queries>
<package android:name="com.kakao.talk" />
</queries>
728x90
'🗂️ Etc' 카테고리의 다른 글
NAVER DEVIEW DAY 2 - 런타임 데드 코드 분석 도구 Scavenger (0) | 2023.03.03 |
---|---|
ChatGPT로 공룡 그려 달라고 하기 (0) | 2023.01.10 |
웹 개발자를 위한 안드로이드 웹뷰 만들기 (2) | 2023.01.05 |
이모지(Emoji) 단축키 및 MySQL과 Javascript에서 사용하기 (0) | 2022.12.17 |
Hosts 파일 경로, 형식, 원리 (0) | 2022.12.14 |