MatomoTracker (前身 PiwikTracker) iOS SDK

MatomoTracker 是一个 iOS、tvOS 和 macOS SDK,用于将应用程序分析数据发送到 Matomo 服务器。MatomoTracker 可以从 Swift 和 Objective-C 中使用。

想帮忙改进这个 SDK 吗?查看此列表,看看还剩下什么可以改进的。

安装

MatomoTracker 可以通过 CocoaPods、Carthage 和 Swift Package Manager 安装。在要使用 MatomoTracker 的每个文件中,不要忘记使用 import MatomoTracker 导入 framework。

CocoaPods

在你的 Podfile 中使用以下代码。

pod 'MatomoTracker', '~> 7.7'

然后运行 pod install

Carthage

Carthage 是一种非侵入式的方式,可以将 MatomoTracker 安装到你的项目中。它不会对你的 Xcode 项目和工作空间进行任何更改。将以下内容添加到你的 Cartfile 中

github "matomo-org/matomo-sdk-ios"
Swift Package Manager

你可以使用 Swift Package Manager 作为集成方法。 如果你希望使用 Swift Package Manager 作为集成方法,可以使用 Xcode 添加包依赖项,或者将以下依赖项添加到你的 Package.swift 中

.package(url: "https://github.com/matomo-org/matomo-sdk-ios.git", from: "v7.7.0"),

并在你的 dependencies 中添加

.product(name: "MatomoTracker", package: "matomo-sdk-ios")

用法

Matomo 实例

Matomo iOS SDK 不提供 PiwikTracker 的实例。 为了能够跟踪数据,你必须首先创建一个实例。

let matomoTracker = MatomoTracker(siteId: "23", baseURL: URL(string: "https://demo2.matomo.org/piwik.php")!)

siteId 是你可以在 Matomo Web 界面中添加网站后获得的 ID。 baseURL 是指向你的 Matomo Web 实例的 URL,并且必须包含 "piwik.php" 或 "matomo.php" 字符串。

你可以传递此实例,或者向 MatomoTracker 类添加一个扩展,并添加一个共享实例属性。

extension MatomoTracker {
    static let shared: MatomoTracker = MatomoTracker(siteId: "1", baseURL: URL(string: "https://example.com/piwik.php")!)
}

siteId 是你可以在 Matomo Web 界面中添加网站后获得的 ID。 baseURL 是指向你的 Matomo Web 实例的 URL,并且必须包含 "piwik.php" 或 "matomo.php" 字符串。

你可以在一个应用程序中使用多个实例。

选择退出

MatomoTracker SDK 支持选择退出跟踪。 请使用 MatomoTracker 的 isOptedOut 属性来定义用户是否选择退出跟踪。

matomoTracker.isOptedOut = true

跟踪页面浏览量

MatomoTracker 可以跟踪分层屏幕名称,例如 screen/settings/register。 使用此功能可以在 Matomo Web 界面中创建屏幕视图的分层和逻辑分组。

matomoTracker.track(view: ["path","to","your","page"])

你还可以设置页面的 URL。

let url = URL(string: "https://matomo.org/get-involved/")
matomoTracker.track(view: ["community","get-involved"], url: url)

跟踪事件

事件可用于跟踪用户交互,例如点击按钮。 一个事件由四个部分组成

matomoTracker.track(eventWithCategory: "player", action: "slide", name: "volume", value: 35.1)

这将记录用户将播放器上的音量滑块滑动到 35.1%。

跟踪搜索

MatomoTracker 可以跟踪用户如何使用你的应用程序内部搜索。 你可以跟踪搜索了哪些关键字,他们使用的类别,特定搜索的结果数量以及哪些搜索没有结果。

matomoTracker.trackSearch(query: "Best mobile tracking", category: "Technology", resultCount: 15)

自定义维度

Matomo SDK 目前支持访问作用域的自定义维度。 使用自定义维度,你可以将属性添加到整个访问中,例如“用户是否完成了教程?”,“用户是否是付费用户?” 或者“正在使用哪个版本的应用程序?”等。 在发送自定义维度之前,请确保已正确安装和配置自定义维度。 你将需要你配置的维度的 ID

之后,你可以设置一个新的维度,

matomoTracker.set(value: "1.0.0-beta2", forIndex: 1)

或删除已设置的维度。

matomoTracker.remove(dimensionAtIndex: 1)

访问作用域中的维度将与每个页面浏览量或事件一起发送。 自定义维度不会由 SDK 持久保存,必须在应用程序启动时重新配置。

自定义用户 ID

要添加自定义用户 ID,只需在跟踪器的 userId 字段上设置你想要使用的值

matomoTracker.userId = "coolUsername123"

SDK 跟踪的所有未来事件都将与此 userID 关联,而不是为每个访问者创建的默认 UUID。

应用程序启动时持久保存的自定义访问者 ID

MatomoTracker 将在首次使用时生成一个 _id,并将使用此值来识别当前访问者。 此 _id 会在应用程序启动时持久保存。

如果你想设置你自己的访问者 ID,你可以使用 forcedVisitorId 字段设置你自己的访问者 ID。 确保你使用一个 16 个字符长的十六进制字符串。 forcedVisitorId 会在应用程序启动时持久保存。

matomoTracker.forcedVisitorId = "0123456789abcdef"

由于 SDK 会在应用程序启动时持久保存此访问者 ID,因此我们建议在跟踪你的应用程序用户之前征得用户的同意。

营销活动跟踪

Matomo iOS SDK 支持营销活动跟踪

matomoTracker.trackCampaign(name: "campaign_name", keyword: "campaign_keyword")

内容跟踪

Matomo iOS SDK 支持内容跟踪

matomoTracker.trackContentImpression(name: "preview-liveaboard", piece: "Malaysia", target: "https://dummy.matomo.org/liveaboard/malaysia")
matomoTracker.trackContentInteraction(name: "preview-liveaboard", interaction: "tap", piece: "Malaysia", target: "https://dummy.matomo.org/liveaboard/malaysia")

目标跟踪

Matomo iOS SDK 支持目标跟踪

matomoTracker.trackGoal(id: 1, revenue: 99.99)

订单跟踪

Matomo iOS SDK 支持订单跟踪

let items = [
  OrderItem(sku: "product_sku_1", name: "iPhone Xs", category: "phone", price: 999.99, quantity: 1),
  OrderItem(sku: "product_sku_2", name: "iPhone Xs Max", category: "phone", price: 1199.99, quantity: 1)
]

matomoTracker.trackOrder(id: "order_id_1234", items: items, revenue: 2199.98, subTotal: 2000, tax: 190.98, shippingCost: 9)

高级用法

手动分发

MatomoTracker 将自动每 30 秒分发一次事件。 如果你想手动分发事件,你可以使用 dispatch() 函数。

会话管理

每当应用程序启动时,MatomoTracker 都会启动一个新会话。 如果你想手动启动一个新会话,你可以使用 startNewSession() 函数。 例如,你可以在用户进入应用程序时启动一个新会话。

func applicationWillEnterForeground(_ application: UIApplication) {
  matomoTracker.startNewSession()
}

日志记录

MatomoTracker 默认将 warningerror 消息记录到控制台。 你可以更改 LogLevel

matomoTracker.logger = DefaultLogger(minLevel: .verbose)
matomoTracker.logger = DefaultLogger(minLevel: .debug)
matomoTracker.logger = DefaultLogger(minLevel: .info)
matomoTracker.logger = DefaultLogger(minLevel: .warning)
matomoTracker.logger = DefaultLogger(minLevel: .error)

你还可以编写自己的 Logger 并将日志发送到你想要的任何地方。 只需编写一个新的类/结构,并使其符合 Logger 协议。

自定义用户代理

MatomoTracker 将创建一个从 WKWebView 用户代理派生的默认用户代理。 你可以使用你自己的用户代理来实例化 MatomoTracker

let matomoTracker = MatomoTracker(siteId: "5", baseURL: URL(string: "http://your.server.org/path-to-matomo/piwik.php")!, userAgent: "Your custom user agent")

发送自定义事件

你可以创建你的事件,甚至发送自定义跟踪参数,而不是使用用于事件和屏幕视图的便捷函数。 此功能在 Objective-C 中不可用。

func sendCustomEvent() {
  guard let matomoTracker = MatomoTracker.shared else { return }
  let downloadURL = URL(string: "https://builds.matomo.org/piwik.zip")!
  let event = Event(tracker: matomoTracker, action: ["menu", "custom tracking parameters"], url: downloadURL, customTrackingParameters: ["download": downloadURL.absoluteString])
  matomoTracker.track(event)
}

所有自定义事件都将被 URL 编码,并与默认的 Event 参数一起分发。 有关可以使用哪些参数的更多信息,请阅读跟踪 API 文档

此外:你不能覆盖事件本身已定义的自定义参数键。 如果你在 customTrackingParameters 中设置了这些键,它们将被丢弃。

自动 URL 生成

你可以在每个 Event 上定义 url 属性。 如果未定义,SDK 将尝试基于 MatomoTrackercontentBase 生成 URL。 如果 contentBase 为 nil,则不会生成 URL。 如果设置了 contentBase,它将把事件的操作附加到它,并将其用作 URL。 默认情况下,contentBase 是使用应用程序包标识符生成的。 例如 http://org.matomo.skd。 这不会导致可解析的 URL,但使后端能够分析和构建它们。

事件分发

每当你跟踪一个事件或页面浏览量时,它首先存储在内存中。 在每次分发运行时,都会将一批事件发送到服务器。 如果设备脱机或服务器未响应,这些事件将被保留并在稍后重新发送。 事件目前没有存储在磁盘上,如果应用程序终止,这些事件将丢失。 #137。 你可以使用一个实验性的队列实现,该队列将所有事件存储在 UserDefaults 中。

let queue = UserDefaultsQueue(userDefaults: UserDefaults.standard)
let dispatcher = URLSessionDispatcher(baseURL: URL(string: "https://example.com/matomo.php")!)
let matomoTracker = MatomoTracker(siteId: "1", queue: queue, dispatcher: dispatcher)

贡献

请阅读 CONTRIBUTING.md 了解详情。

许可证

MatomoTracker 在 MIT 许可证下可用。