Hybrid App 设置 - Android SDK (v4)

    提示

    在进行 Hybrid App 设置之前,请先分别在 App 和网站上完成 Android SDKWeb SDK 的安装。

    通过设置,您无需更改 Hybrid App 中网站的代码,也能让 Android SDK 处理应用内网站中的 Airbridge 相关操作。

    使 Android SDK 处理 Web SDK 操作

    Android SDK 可以代替 Web SDK 处理事件发送、设备设置和用户设置等命令。在 WebView 中加载网站之前,请设置 Airbridge.setWebInterface 函数。

    YOUR_WEB_TOKENWeb SDK Token,可在 Airbridge 面板的 [设置]>[Token] 获取。

    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")
        }
    }

    在 WebView 中运行深度链接

    您可以通过添加 Airbridge.click 函数,在 WebView 中正常运行深度链接。由于 WebView 默认不支持深度链接,需要通过 Airbridge.click 函数设置,使 SDK 代替启用追踪链接中的深度链接。

    • Airbridge.click 函数在输入的地址为追踪链接时返回 true。当地址启用 App 时,会调用 onSuccess 函数;若无网络或启用了其他 App,则会调用 onFailure 函数。

    • 如果输入的地址不是追踪链接,Airbridge.click 函数将返回 false,并且不会执行任何操作。

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

    如果在 WebViewClient 中实现 WebViewClient#shouldOverrideUrlLoading,即可在确认加载特定 URL 后决定是否继续加载。有关 WebViewClient 的更多信息,请参阅 Android 开发者指南。

    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 为 Airbridge 追踪链接,可以使用 Airbirdge.click 函数将 webView#shouldOverrideUrlLoading 的结果发送为 true,使 Airbridge Android SDK 代替 Webview 打开追踪链接。

    Airbridge 追踪链接的 URL host 为 abr.geYOUR_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)
        }
    }
    

    注意事项

    Was this helpful?

    Any questions or suggestions?