하이브리드 앱 설정하기 - 안드로이드 SDK (v4)

알립니다

하이브리드 앱 설정을 하기 전에 앱과 웹사이트에 각각 안드로이드 SDK웹 SDK를 설치해 주세요.

하이브리드 앱에서 웹 사이트 코드를 변경하지 않아도 인앱 웹 사이트에서 발생하는 에어브릿지 관련 작업을 안드로이드 SDK가 처리하도록 설정할 수 있습니다.

안드로이드 SDK가 웹 SDK 동작 처리하기

안드로이드 SDK는 웹 SDK에서 진행되는 이벤트 전송, 디바이스 설정, 유저 설정에 관한 명령을 대신 처리할 수 있습니다. 웹뷰에 웹 사이트를 표시하기 전에 Airbridge.setWebInterface 함수를 설정해 주세요.

YOUR_WEB_TOKEN웹 SDK 토큰입니다. 웹 SDK 토큰은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.

12345678910111213141516171819
class MainActivity : Activity() {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initWebView()
    }
    
    fun initWebView() {
        webView.settings.javaScriptEnabled = true
        webView.settings.domStorageEnabled = true
        
        Airbridge.setWebInterface(webView, "YOUR_WEB_TOKEN")

        webView.webChromeClient = WebChromeClient()
        webView.webViewClient =  WebViewClient()
        webView.loadUrl("http://my_company.com/main")
    }
}

웹뷰에서 딥링크 동작하기

Airbridge.click 함수를 추가하여 웹뷰에서 딥링크를 정상적으로 실행할 수 있습니다. 웹뷰는 기본적으로 딥링크를 지원하지 않습니다. 따라서 Airbridge.click 함수로 SDK가 대신 트래킹 링크의 딥링크를 실행하도록 설정해야 합니다.

Airbridge.click 함수는 입력된 주소가 트래킹 링크면 true를 반환합니다. 그리고 주소로 앱을 실행하면 onSuccess 함수를 호출합니다. 인터넷이 없거나 다른 앱이 실행되면 onFailure 함수가 호출됩니다.

Airbridge.click 함수는 입력된 주소가 트래킹 링크가 아니면 false를 반환하고 어떠한 동작을 하지 않습니다.

12345
fun click(
    trackingLink: String,
    onSuccess: OnSuccess<Unit>? = null,
    onFailure: OnFailure? = null
): Boolean

WebViewClient에서 WebViewClient#shouldOverrideUrlLoading를 구현하면 특정 URL이 로딩되는 것을 확인한 후에 계속 로딩할지 또는 로딩하지 않을지 결정할 수 있습니다. WebViewClient에 대한 자세한 내용은 안드로이드 개발자 가이드를 참고해 주세요.

123456789101112131415161718
private val webViewClient = object : WebViewClient() {

    override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
        return super.shouldOverrideUrlLoading(view, url)
    }

    @RequiresApi(Build.VERSION_CODES.N)
    override fun shouldOverrideUrlLoading(
        view: WebView?,
        request: WebResourceRequest?
    ): Boolean {
        return super.shouldOverrideUrlLoading(view, request)
    }
}

private fun initWebview() {
    webView.webViewClient = webViewClient
}

로딩 중에 특정 URL이 에어브릿지의 트래킹 링크이면 Airbirdge.click 함수를 사용해 webView#shouldOverrideUrlLoading의 결과를 true로 전송할 수 있습니다. 이를 통해 Webview 대신 에어브릿지 안드로이드 SDK가 트래킹 링크를 열도록 할 수 있습니다.

에어브릿지 트래킹링크는 URL 의 host 가 abr.ge 이거나 YOUR_APP_NAME.airbridge.io 또는 커스텀 도메인입니다.

12345678910111213141516171819202122232425262728293031323334
private val webViewClient = object : WebViewClient() {

    private fun handleDomain(view: WebView, uri: Uri): Boolean =
        // return true when uri is tracking link
        // return false when uri is not tracking link
        Airbridge.click(uri.toString(), {
            // on success
            // do nothing
        }, {
            // on failure
            // when uri is another app's tracking link or sdk fails to open uri
            view.loadUrl(uri.toString())
        })

    override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
        if (view === null) return false
        if (url == null) return false

        val uri = Uri.parse(url) ?: return false
        return handleDomain(view, uri)
    }

    @RequiresApi(Build.VERSION_CODES.N)
    override fun shouldOverrideUrlLoading(
        view: WebView?,
        request: WebResourceRequest?
    ): Boolean {
        if (view === null) return false

        val uri = request?.url ?: return false
        return handleDomain(view, uri)
    }
}

주의사항

아래 사항을 주의해 주세요.

도움이 되었나요?

더 필요한 내용이 있나요?