loose
이로운 개발하기
loose
전체 방문자
오늘
어제
  • 전체 (204)
    • ☕ Java (24)
    • 📘 Effective Java (9)
    • 🍃 Spring (47)
    • 📖 ORM (9)
    • ☸️ Kubernetes (13)
    • 🐧 Linux (5)
    • 🐋 Docker (5)
    • 🛠️ CI & CD (7)
    • 🕸️ Web (6)
    • 🔗 Distributed System (3)
    • 📜 Js (10)
    • 📈 Database (11)
    • 🗂️ Etc (34)
    • 🧑 Chitchat (11)
    • 📒 문학 (9)
    • 👜 개인 공부 창고 (1)

공지사항

반응형

최근 글

최근 댓글

loose

이로운 개발하기

🗂️ Etc

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

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

'🗂️ 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
    '🗂️ Etc' 카테고리의 다른 글
    • NAVER DEVIEW DAY 2 - 런타임 데드 코드 분석 도구 Scavenger
    • ChatGPT로 공룡 그려 달라고 하기
    • 웹 개발자를 위한 안드로이드 웹뷰 만들기
    • 이모지(Emoji) 단축키 및 MySQL과 Javascript에서 사용하기
    loose
    loose
    불만하는 사람은 90명, 해결하는 사람은 9명, 리드하는 사람은 1명 음악과 낭만을 좋아합니다.
    hELLO. 티스토리 스킨을 소개합니다.
    제일 위로

    티스토리툴바