测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可 | MIT |
发布最新发布 | 2017年6月 |
SwiftSwift 版本 | 3.1 |
SPM支持 SPM | ✓ |
由 Suyeol Jeon 维护。
Swift 的分析抽象层。受 Moya 启发。
有许多移动应用分析工具,如 Firebase、Google Analytics、Fabric Answers、Flurry、Mixpanel 等。您可能已在应用程序中使用了一个或多个这些工具。但大多数这些 SDK 存在一些问题:如果使用多个分析工具,您的代码将变得混乱。并且 SDKs 将事件名称视为一个字符串,将参数视为一个字典,Swift 编译器无法保证。这意味着如果您更改事件定义,您应该手动找到所有相关代码。这有可能导致人为错误。 EventAnalytics 使用 Swift 枚举和相关值来解决这些问题。
之前
FIRAnalytics.logEvent(withName: kFIREventEcommercePurchase, parameters: [
kFIRParameterCurrency: "USD" as NSObject,
kFIRParameterValue: 9.99 as NSNumber,
kFIRParameterTransactionID: "20170709123456" as NSObject,
])
Flurry.logEvent("purchase", withParameters: [
"Currency": "USD",
"Price": 9.99,
"Transaction ID": "20170709123456"
])
MyCustomAnalytics.logEvent("purchase"withParameters: [
"currency": "USD",
"price": 9.99,
"transaction_id": "20170709123456"
])
之后
let analytics = Analytics<MyAppEvent>()
analytics.register(provider: FirebaseProvider())
analytics.register(provider: FlurryProvider())
analytics.register(provider: MyCustomProvider())
analytics.log(.purchase(currency: "USD", price: 9.99, transactionID: "20170709123456"))
首先,您应该在单个枚举中定义所有事件。假设我们有三个具有关联参数的事件。
enum MyAppEvent {
case signup(username: String)
case viewContent(productID: Int)
case purchase(productID: Int, price: Float)
}
然后将枚举使符合 EventType
协议。这需要两个函数:name(for:)
和 parameters(for:)
。
extension MyAppEvent: EventType {
/// An event name to be logged
func name(for provider: ProviderType) -> String {
switch self {
case .signup: return "signup"
case .viewContent: return "view_content"
case .purchase: return "purchase"
}
}
/// Parameters to be logged
func parameters(for provider: ProviderType) -> [String: Any]? {
switch self {
case let .signup(username):
return ["username": username]
case let .viewContent(productID):
return ["product_id": productID]
case let .purchase(productID, price):
return ["product_id": productID, "price": price]
}
}
}
您甚至可以通过 provider
提供不同的事件名称和参数。
提供者代表实际的分析服务提供商。Firebase、Google Analytics 和其他服务可以成为提供者。创建提供者很简单:只需创建一个类并使其符合 ProviderType
协议。
final class FirebaseProvider: ProviderType {
func log(_ eventName: String, parameters: [String: Any]?) {
FIRAnalytics.logEvent(withName: eventName, parameters: parameters)
}
}
注意:目前 EventAnalytics 不提供默认提供者,但将来将提供流行的提供者类。
最后一步是创建一个Analytics
实例。你可以在任何地方定义它,但我建议将其作为一个全局常量创建,并在application(_:didFinishLaunchingWithOptions:)
中注册提供者。
let analytics = Analytics<MyAppEvent>()
analytics.register(provider: FirebaseProvider())
analytics.register(provider: GoogleAnalyticsProvider())
analytics.register(provider: FlurryProvider())
analytics.register(provider: MyCustomProvider())
有了这个实例,你就可以记录事件了
analytics.log(.signup(username: "devxoul"))
使用CocoaPods:
pod 'EventAnalytics'
使用Carthage:
github "devxoul/EventAnalytics"
EventAnalytics在MIT许可证下。请参考LICENSE文件获取更多信息。