하이브리드 앱을 만들고있습니다.
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개의 좋아요