BlueTriangleSDK-Swift 3.9.2

BlueTriangleSDK-Swift 3.9.2

Eric Darling 维护。



Blue Triangle SDK for iOS

Blue Triangle 分析 SDK for iOS。

安装

Xcode 13:转到 文件 > 添加包…,输入包仓库 URL https://github.com/blue-triangle-tech/btt-swift-sdk.git,然后单击 添加包

Xcode 11 - 12:转到 文件 > Swift 包 > 添加包依赖…并输入包仓库 URL https://github.com/blue-triangle-tech/btt-swift-sdk.git,然后按指示操作。

使用

配置

在发送计时器之前,您必须首先配置 BlueTriangle。建议在 AppDelegate.application(_:didFinishLaunchingWithOptions:) 方法中执行此操作。

BlueTriangle.configure { config in
    config.siteID = "MY_SITE_ID"
    config.isReturningVisitor = true
    config.abTestID = "MY_AB_TEST_ID"
    config.campaignMedium = "MY_CAMPAIGN_MEDIUM"
    config.campaignName = "MY_CAMPAIGN_NAME"
    config.campaignSource = "MY_CAMPAIGN_SOURCE"
    config.dataCenter = "MY_DATA_CENTER"
    config.trafficSegmentName = "MY_SEGMENT_NAME"
    config.crashTracking = .nsException
    config.performanceMonitorSampleRate = 1.0
}

计时器

要测量用户交互的持续时间,初始化一个描述该交互的 Page 对象,并将其传递给 BlueTriangle.startTimer(page:timerType) 以接收运行计时器的实例。

let page = Page(pageName: "MY_PAGE")
let timer = BlueTriangle.startTimer(page: page)

如果您需要延迟计时器的开始,将 Page 实例传递给 BlueTriangle.makeTimer(page:timerType),并在准备好计时之前调用计时器的 start() 方法。

let page = Page(pageName: "MY_PAGE")
let timer = BlueTriangle.makeTimer(page: page)
...
timer.start()

在这两种情况下,将计时器传递给 BlueTriangle.endTimer(_:purchaseConfirmation:) 以将其发送到 Blue Triangle 服务器。

BlueTriangle.endTimer(timer)

当将运行的计时器传递给 BlueTriangle.endTimer(_:purchaseConfirmation:) 时,它们将自动停止,尽管您可以调用计时器的 end() 方法来提前结束计时。

timer.end()
...
// You must still pass the timer to `BlueTriangle.endTimer(_:)` to send it to the Blue Triangle server
BlueTriangle.endTimer(timer)

对于与结账相关的计时器,创建一个 PurchaseConfirmation 对象并将其与计时器一起传递给 BlueTriangle.endTimer(_:purchaseConfirmation:)

timer.end()
let purchaseConfirmation = PurchaseConfirmation(cartValue: 99.00)
BlueTriangle.endTimer(timer, purchaseConfirmation: purchaseConfirmation)

计时器类型

具有 timerType 参数的 BlueTriangle.makeTimer(page:timerType:)BlueTriangle.startTimer(page:timerType:) 可以指定它们返回的计时器类型。默认情况下,这两种方法都返回类型为 BTTimer.TimerType.main 的主计时器。当启用网络捕获时,使用带 bt-前缀的 URLSession 方法发出的请求将与在请求完成时开始的最最后一个主计时器相关联。建议在任何时候只运行一个主计时器。如果需要重叠计时器,请通过指定 BTTimer.TimerType.custom 计时器类型创建额外的自定义计时器

let mainTimer = BlueTriangle.startTimer(page: Page(pageName: "MY_PAGE"))
let customTimer = BlueTriangle.startTimer(page: Page(pageName: "MY_OTHER_TIMER"), timerType: .custom)
// ...
BlueTriangle.endTimer(mainTimer)
// ...
BlueTriangle.endTimer(customTimer)

网络捕获

Blue Triangle SDK 支持使用 NetworkCaptureSessionDelegate 或带 bt-前缀的 URLSession 方法捕获网络请求。

要启用网络捕获,首先使用非零网络采样率配置 SDK

BlueTriangle.configure { config in
    ...
    config.networkSampleRate = 0.05
}

例如,0.05 的值意味着网络捕获将以 5% 的比例随机启用用户会话。使用带 NetworkCaptureSessionDelegateURLSession 或使用带 bt-前缀的 URLSession 方法发出的网络请求将与在请求完成时开始的最最后一个主计时器相关联。请注意,只有在开始至少一个主计时器之后才会捕获请求,并且在请求结束之前它们才与计时器相关联。

NetworkCaptureSessionDelegate

您可以使用 NetworkCaptureSessionDelegate 或其子类作为您的 URLSession 代理来收集网络请求的信息,当启用网络捕获时。

let sesssion = URLSession(
    configuration: .default,
    delegate: NetworkCaptureSessionDelegate(),
    delegateQueue: nil)

let timer = BlueTriangle.startTimer(page: Page(pageName: "MY_PAGE"))
...
let (data, response) = try await session.data(from: URL(string: "https://example.com")!)

URLSession 方法

或者,使用以 bt 前缀的 URLSession 方法来捕获网络请求

标准 网络捕获
URLSession.dataTask(with:completionHandler:) URLSession.btDataTask(with:completionHandler:)
URLSession.data(for:delegate:) URLSession.btData(for:delegate:)
URLSession.dataTaskPublisher(for:) URLSession.btDataTaskPublisher(for:)

使用这些方法与它们的标准版本完全相同

let timer = BlueTriangle.startTimer(page: Page(pageName: "MY_PAGE"))
...
URLSession.shared.btDataTask(with: URL(string: "https://example.com")!) { data, response, error in
    // ...
}.resume()

屏幕视图跟踪

可以跟踪所有 UIViewControllers 的视图计数。将 "enableScreenTracking" 配置属性设置为 true,将捕获您应用中每个 UIViewController 的视图计数。您可以在我们的仪表板上查看每个视图控制器名称及其计数。

 BlueTriangle.configure { config in
         ...
         config.enableScreenTracking = true
     }

SwiftUI 视图不会自动捕获。您需要在每个想要跟踪的视图上调用 bttTrackScreen() 修饰符。以下示例显示了如何使用 "bttTrackScreen(_ screenName: String)" 来跟踪 "关于我们" 屏幕。

struct ContentView: View {
    var body: some View {
        VStack{
            Text("Hello, world!")
        }
        .bttTrackScreen("Demo_Screen")
    }
}

ANR 识别

ANR(应用程序无响应)检测到主线程,在该线程上应用程序变得无响应或长时间不响应用户输入。可以通过将 "ANRMonitoring" 配置属性设置为 "true" 来启用。并且可以设置间隔,通过将 "ANRWarningTimeInterval" 配置属性设为以下显示,来考虑它为 ANR 情境。

 BlueTriangle.configure { config in
         ...
         config.ANRMonitoring = true
         config.ANRWarningTimeInterval = 3
     }

默认情况下,ANR 间隔设置为 5 秒。