Hybrid App 设置 - Android SDK (v4)

提示

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

通过设置,您无需更改 Hybrid App 中网站的代码,也能让 Airbridge 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 page helpful?

Have any questions or suggestions?