EventAnalytics 0.1.0

EventAnalytics 0.1.0

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最新发布2017年6月
SwiftSwift 版本3.1
SPM支持 SPM

Suyeol Jeon 维护。



  • Suyeol Jeon

Swift 的分析抽象层。受 Moya 启发。

为什么?

有许多移动应用分析工具,如 Firebase、Google Analytics、Fabric Answers、Flurry、Mixpanel 等。您可能已在应用程序中使用了一个或多个这些工具。但大多数这些 SDK 存在一些问题:如果使用多个分析工具,您的代码将变得混乱。并且 SDKs 将事件名称视为一个字符串,将参数视为一个字典,Swift 编译器无法保证。这意味着如果您更改事件定义,您应该手动找到所有相关代码。这有可能导致人为错误。 EventAnalytics 使用 Swift 枚举和相关值来解决这些问题。

特性

  • 💪通过使用枚举和相关值,利用 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文件获取更多信息。