🗂️ Etc

안드로이드 웹뷰 카카오 공유하기 기능 멈춤 현상

loose 2023. 1. 8. 02:46
반응형

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