GroupByTracker 1.4.0

GroupByTracker 1.4.0

Jonathan MikkilaSerhii ChashchukhinHenry Tang 维护。



  • GroupBy Inc.

GroupBy Tracker 客户端用于 iOS

这是用于向 GroupBy 发送信标的 iOS SDK。

与其他 GroupBy 信标 SDK 一样,它允许您在事件发生时向 GroupBy 发送表示购物事件的信标。这将在 GroupBy 系统中保存有关购物者及其交互的搜索结果和产品的匿名信息,以支持 GroupBy 平台。

信标增强的平台组件示例

  • 搜索结果更加个性化
  • 推荐更出色
  • 洞察力可在分析仪表板中查看

安装

使用 Swift Package Manager 添加包

  1. 从 Xcode 菜单中点击文件 > Swift Packages > 添加包依赖。

  2. 在出现的对话框中,输入仓库 URL:https://github.com/groupby/gb-ios-tracker-client

  3. 在版本中,选择“直到下一个主要版本”,并选择默认选项。

使用 CocoaPods 添加包

  1. 如果尚未设置,请根据以下说明设置 CocoaPods: https://guides.cocoapods.org.cn/using/using-cocoapods.html

  2. 将依赖项添加到您的 Podfile 中

  pod 'GroupByTracker', '~> 1.2.0'
  1. 运行 pod install

创建跟踪器实例

您必须编程应用程序,以便在应用程序启动时执行此操作,并保留对相同的跟踪器客户端对象的引用,以在中重用整个应用程序生命周期。

示例

import GroupByTracker

// login status for a shopper who is not logged in
let login = Login(loggedIn: false, username: nil)
let instance = GbTracker(customerId: "my-customer-id", area: "my-area", login: login)

有关更多详细信息,请参阅 创建跟踪器实例

发送事件

您必须编程应用程序,以便在购物者 iOS 设备上应用程序的生命周期中适当的时刻调用 `sendXEvent` 方法(其中 "X" 是要发送的事件名称),反映购物行为。应该重用上一步中描述的跟踪器单例进行此操作。

您可以调用以发送事件的示例方法是 `sendViewProductEvent` 方法。

有关更多详细信息,请参阅 发送事件

设置登录状态

登录状态描述了购物者在事件发生时是否已登录。使用此信息,GroupBy 可以在购物者的设备上匿名跟踪购物者,而不仅仅是匿名跟踪 iOS 应用程序中的购物者。

您可以在创建跟踪器实例时设置登录状态,并且可以在应用程序的生命周期中通过修改现有的跟踪器实例来设置登录状态。

有关更多详细信息,请参阅 设置登录状态

验证

您可以使用回调测试您的信标实现以验证错误。例如,在返回的 400 Bad Request 响应中记录验证错误

{ error in
    guard error == nil else {
        guard let gbError = error as? GbError else {
            // unknown error
            let errorText = "unknown error: " + (error?.localizedDescription ?? "")
            print(errorText)
            return
        }
        
        // If there are data validation errors, a list of string with the error details will be returned.
        // If there is a network or any other error, the code variable will contain the HTTP status code returned.
        switch gbError {
            case .error(let code, let errorDetails, let innerError):
                guard let errorDetails = errorDetails else {
                    // network or other error
                    let errorText = "network or other error: " +
                    String(code) + " " + (innerError?.localizedDescription ?? "")
                    print(errorText)
                    return
                }
                
                if (errorDetails.jsonSchemaValidationErrors.count > 0)
                {
                    let errorText = "data validation error: " + errorDetails.jsonSchemaValidationErrors[0]
                    print(errorText)
                }
                
                break
        }
        
        return
    }
}

您可以在调试应用程序时在 Xcode 中查看这些日志

image

有关更多详细信息,请参阅 验证

事件类型

客户端支持以下事件类型。GroupBy 将“四大基本”事件类型视为 iOS 应用程序中信标实现的最小要求

事件类型 在“四大基本”中? 描述 详细信息
autoSearch 在使用GroupBy搜索API执行搜索后,这一项用于向GroupBy的海岸线API发送搜索详情。这些详情是通过这种事件而不是通过GroupBy内部检索发送的,以确保客户跟踪正确进行并且与其他必须从客户端发送的事件类型保持一致。 autoSearch
viewProduct 用于发送买家正在查看的哪个产品(或产品内的SKU)的详情。 viewProduct
addToCart 用于发送买家正在添加到其购物车中的哪些产品(或产品内的SKU)的详情。 addToCart
removeFromCart 用于发送买家正在从其购物车中删除的哪些产品(或产品内的SKU)的详情。 removeFromCart
order 用于发送买家正在订购的哪些产品(或产品内的SKU)的详情。 order
recImpression 用于发送买家在显示GroupBy推荐API推荐内容的页面上查看的哪些产品(或产品内的SKU)的详情。 recImpression

当至少实现了前四种事件类型时,将提供会话级别洞察而不是仅提供事件级别洞察。例如,您可以通过GroupBy的分析从哪些搜索词导致买家购买的产品中获取细分。

在事件中包括元数据和实验

元数据

元数据是您可以在发送的每个海岸线中包含的不属于事件模式杂项键值对数据。

当您在发送的海岸线中包含元数据时,您将通过启用新维度来扩展GroupBy的分析。

有关详细信息,请参阅元数据

实验

实验是您可以在发送的每个海岸线中包含的不属于事件模式杂项键值对数据。

当您正在进行A/B测试时,在您的A/B测试中包含实验的详细信息可以让您通过将实验用作分析中的新维度来扩展GroupBy的分析。例如,您可以测量实验中每个桶的收入。

有关详细信息,请参阅实验

买家跟踪

买家被匿名跟踪。GroupBy将知道买家何时返回,但不知道买家是谁。

VisitorId是一个用于匿名跟踪用户的UUID。此ID与任何外部系统无关,只能用于跟踪同一应用安装中的活动。VisitorId在买家上次访问后的1年有效。之后,将生成新的ID。

此ID存储在UserDefaults.standard中。

内部GroupBy测试

默认情况下,海岸线将被发送到生产环境。这可以通过在跟踪器构造函数中指定发送海岸线的URL来覆盖。这适用于将海岸线发送到测试环境或到GroupBy的开发环境。

import GroupByTracker

// Optional, overrides the URL the beacon is sent to. Useful for testing.
let login = Login(loggedIn: false, username: nil)
let instance = GbTracker(customerId: "customer_id", area: "area", login: login, urlPrefixOverride: "<some_url>")