메인 콘텐츠로 건너뛰기
해당 기능은 노티플라이 JS SDK @notifly-tech/notifly-js-sdk 2.17.8 이상 버전부터 지원됩니다.

개요

노티플라이 콘솔에서 웹 팝업의 링크 열기 방식을 외부 브라우저에서 열기로 설정하면, JS SDK가 target="_blank" 속성을 사용하여 외부 브라우저에서 링크를 엽니다. 일반 모바일 브라우저(Chrome, Safari 등)에서는 별도 설정 없이 정상 동작합니다. 하지만 네이티브 앱의 웹뷰 환경에서는 target="_blank"가 기본적으로 지원되지 않아, 아래와 같이 링크가 무시될 수 있습니다:
플랫폼기본 동작원인
Android 웹뷰같은 웹뷰에서 열리거나 무시됨setSupportMultipleWindows 기본값이 false
iOS WKWebView클릭해도 아무 반응 없음WKUIDelegatecreateWebViewWith 미구현 시 무시
앱에서 웹뷰를 통해 노티플라이 팝업을 표시하는 경우, 아래 플랫폼별 네이티브 설정을 추가해야 버튼 클릭 시 외부 브라우저로 정상 이동합니다.
웹뷰를 직접 구현하지 않고 노티플라이 Android SDK 또는 iOS SDK만 사용하는 경우(인앱 팝업), SDK 내부에서 이 처리가 포함되어 있으므로 별도 설정이 필요 없습니다.

플랫폼별 설정 가이드

Android 웹뷰는 기본적으로 target="_blank"를 무시합니다. 아래 두 단계를 모두 적용해야 합니다.

1단계: 웹뷰 멀티 윈도우 지원 활성화

웹뷰가 새 창 열기 요청을 처리할 수 있도록 설정합니다.
webView.settings.setSupportMultipleWindows(true)
webView.settings.javaScriptCanOpenWindowsAutomatically = true

2단계: 새 창 열기 요청을 외부 브라우저로 전달

1단계에서 멀티 윈도우를 활성화하면, target="_blank" 클릭 시 WebChromeClientonCreateWindow()가 호출됩니다. 이 메서드에서 URL을 추출하여 기기의 기본 브라우저로 전달합니다.
import android.content.Intent
import android.os.Message
import android.webkit.WebChromeClient
import android.webkit.WebResourceRequest
import android.webkit.WebView
import android.webkit.WebViewClient

webView.webChromeClient = object : WebChromeClient() {
    override fun onCreateWindow(
        view: WebView, isDialog: Boolean,
        isUserGesture: Boolean, resultMsg: Message?
    ): Boolean {
        // 임시 웹뷰를 생성하여 URL을 가로챕니다
        val tempWebView = WebView(view.context)
        tempWebView.webViewClient = object : WebViewClient() {
            override fun shouldOverrideUrlLoading(
                view: WebView, request: WebResourceRequest
            ): Boolean {
                // 가로챈 URL을 기기의 기본 브라우저에서 엽니다
                val intent = Intent(Intent.ACTION_VIEW, request.url)
                view.context.startActivity(intent)
                return true
            }
        }
        // 웹뷰 전송 객체를 통해 임시 웹뷰에 연결합니다
        val transport = resultMsg?.obj as? WebView.WebViewTransport
        transport?.webView = tempWebView
        resultMsg?.sendToTarget()
        return true
    }
}
이미 WebChromeClient를 사용하고 있다면, 기존 클래스에 onCreateWindow() 메서드만 추가하면 됩니다.

동작 원리

위 설정을 적용하면 다음과 같은 흐름으로 외부 브라우저가 열립니다:
  1. 유저가 노티플라이 팝업 버튼을 클릭하면, JS SDK가 target="_blank"로 링크를 엽니다.
  2. 웹뷰가 새 창 열기 요청을 네이티브 레이어로 위임합니다 (Android: onCreateWindow, iOS: createWebViewWith).
  3. 네이티브 코드에서 해당 URL을 추출하여 기기의 기본 브라우저(Chrome, Safari 등)에서 엽니다.

주의사항

  • 노티플라이 콘솔에서 팝업의 링크 열기 방식을 외부 브라우저에서 열기로 설정한 경우에만 적용됩니다. 기본값(현재 창에서 열기)인 경우 이 설정과 무관하게 웹뷰 내부에서 링크가 열립니다.