Hybrid App 设置 - iOS SDK (v4)

提示

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

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

使 iOS SDK 处理 Web SDK 操作

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

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

123456789101112131415161718192021222324252627
import UIKit
import WebKit
import Airbridge

class ViewController: UIViewController, WKNavigationDelegate {
    let webView = {
        let configuration = WKWebViewConfiguration()
        let controller = WKUserContentController()
        Airbridge.setWebInterface(
            controller: controller,
            webToken: "YOUR_WEB_SDK_TOKEN"
        )
        
        configuration.userContentController = controller
        
        return WKWebView(frame: .null, configuration: configuration)
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        webView.navigationDelegate = self
        self.view = webView

        webView.load(URLRequest(url: URL(string: "YOUR_WEBSITE_URL")!))
    }
}

在 WebView 中运行深度链接

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

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

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

  • 如果在 WKWebView 中实现 webView(_,decidePolicyFor:,decisionHandler:),即可在确认加载特定 URL 后决定是否继续加载。

123456789101112131415161718192021222324
func webView(
    _ webView: WKWebView,
    decidePolicyFor navigationAction: WKNavigationAction,
    decisionHandler: @escaping (WKNavigationActionPolicy
) -> Void) {
    if let url = navigationAction.request.url {
        let isHandled = Airbridge.click(trackingLink: url) {
            // when url is tracking link and succeed
            // do nothing
        } onFailure: { error in
            // when url is tracking link and failed
            // example: url is another app's tracking link, internet is not connected
            webView.load(URLRequest(url: url))
        }
        if isHandled {
            // when url is tracking link
            decisionHandler(.cancel)
            return
        }
    }
    
    // when url is not tracking link
    decisionHandler(.allow)
}

注意事项

Was this page helpful?

Have any questions or suggestions?