하이브리드 앱 카카오 플러스 친구 1:1 채팅 질문요

하이브리드 앱을 만들고있습니다.
Kakao.PlusFriend.chat({
plusFriendId: ‘’ // 플러스친구 홈 URL에 명시된 id로 설정합니다.
});

이렇게 스크립트에서 적용해놨으며, 네이티브에서 적용해야할 소스가 어떤건가요?

Android는 shouldOverrideUrlLoading 에 잡히지 않으며 onCreateWindow 를 통해서 팝업이 생성됩니다. shouldOverrideUrlLoading 여기에 잡히지 않아서 연결을 시킬수가 없구요.

ios는 Wkwebview 에서 decidePolicyFor 함수에서 kakaoplus 를 골라내서 앱으로 연결 가능하게 해놨으나, 안드로이드 동일하게 createWebViewWith 함수를 통해 팝업창이 뜨는데 이걸 없애고 싶습니다.

각 os 에 어떤방식으로 해야되나요?

override 하신 onCreateWindow 구현이 어떻게 되나요? 안드로이드 웹뷰의 기본 onCreateWindow 구현은 return false 이고 아무 동작도 하지 않을 거에요. 아래와 비슷하게 구현을 해주셔야 팝업 내에서의 shouldOverrideUrlLoading 을 잡으실 수 있습니다.

        webview.settings.javaScriptEnabled = true
        webview.settings.setSupportMultipleWindows(true)
        webview.webViewClient = webViewClient

        val self = this // 컨텍스트를 넘겨줘야 함.
        webview.webChromeClient = object : WebChromeClient() {
            override fun onCreateWindow(
                view: WebView?,
                isDialog: Boolean,
                isUserGesture: Boolean,
                resultMsg: Message?
            ): Boolean {
                val targetWebView = WebView(self)
                targetWebView.settings.javaScriptEnabled = true
                targetWebView.webViewClient = object : WebViewClient() {
                    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
                        // 커스텀 스킴 처리
                        return true
                    }
                }
                val transport = resultMsg!!.obj as WebView.WebViewTransport
                transport.webView = targetWebView
                resultMsg.sendToTarget()
                return true
            }
        }

OnCreateWindow가 호출이 되신다고 하는걸 보니 supportMultipleWindows 설정 true 로 해주셨다고 추측했는데요. Child web view 또한 반드시 javascriptEnabled를 true로 설정해 주셔야 해요. 위와 같이 한번 테스트 해보시겠어요?

@dan.jwp @richard.jeon

3개의 좋아요