AnalyticsSystem 1.0.0

AnalyticsSystem 1.0.0

Andrew Kochulab维护。



Analytics System

AnalyticsSystem依赖的主要思想是为您的应用提供轻量级API来配置多个提供者。

提供者

AnalyticsSystem可以帮助您通过10行代码轻松添加多个提供者。已经内置了以下提供者

  • Mixpanel
  • Bugsnag
  • Facebook
  • Firebase

使用方法

安装

要将AnalyticsSystem添加到基于Swift Package Manager的项目中,添加以下内容:

.package(url: "https://github.com/AndrewKochulab/AnalyticsSystem.git")

Cocoapods

pod 'AnalyticsSystem/Core'

您也可以导入一些提供者,比如

pod 'AnalyticsSystem/Bugsnag'
pod 'AnalyticsSystem/Facebook'

示例

配置分析系统

import AnalyticsSystem
	
let analyticsSystem = AnalyticsSystem()
    
try analyticsSystem.configureTrackers { cfg in 
  let commonEventsFactory = AnalyticsTrackerEventsFactory()

  try cfg.addTracker(MixpanelTracker(apiToken: "your_api_token", eventsFactory: commonEventsFactory))
  try cfg.addTracker(BugsnagTracker(apiToken: "your_api_token", eventsFactory: commonEventsFactory))

  let fbTracker = FacebookTracker(eventsFactory: FacebookTrackerEventsFactory())
  fbTracker.isEventAvailable = { eventType in
    eventType == .signUp
  }
            
  try cfg.addTracker(fbTracker)
}
	
analyticsSystem.initialize()

创建事件

enum RegistrationEventMethod: String {
  case email = "Email",
  facebook = "Facebook",
  twitter = "Twitter"
}
	
struct SignUpEvent: AnalyticsEvent {
  let userId: String
  let method: RegistrationEventMethod 
  var type: AnalyticsEventType { .signUp }
     
  init(
    userId: String,
    method: RegistrationEventMethod
  ) {
    self.userId = userId
    self.method = method
  }
}
	
final class AnalyticsTrackerEventsFactory {
  func signUpEventBuilder(event: SignUpEvent) -> AnalyticsEventBuilder { 
    .init(
      name: "sign_up",
      attributes: [
        "user_id" : event.userId,
        "method" : event.method.rawValue
      ]
    )
  }
}

跟踪事件

analyticsSystem.track(
  event: SignUpEvent(
    userId: "user_identifier",
    method: .email
  )
)

analyticsSystem.track(event: CrashRecoveryEvent())
analyticsSystem.track(event: OnboardingFinishEvent())

针对特定供应商更新构建器

final class FacebookTrackerEventsFactory: AnalyticsTrackerEventsFactory {   
  override func signUpEventBuilder(event: SignUpEvent) -> AnalyticsEventBuilder {
    .init(
      name: AppEvents.Name.completedRegistration.rawValue,
      attributes: [
        "user_id" : event.userId.rawValue,
        AppEvents.ParameterName.registrationMethod.rawValue : event.method.rawValue
      ]
    )
  }
}

创建自己的分析供应商

import AnalyticsSystem
import FirebaseAnalytics
import FirebaseCrashlytics

final class FirebaseTracker: FactoryAnalyticsTracker<AnalyticsTrackerEventsFactory> {
  private var crashlytics: Crashlytics {
    .crashlytics()
  }
    
  override func initialize(with options: LaunchOptions? = nil) {
    FirebaseApp.configure()
  }
    
  override func setEnabled(_ isEnabled: Bool) {
    Analytics.setAnalyticsCollectionEnabled(isEnabled)
  }
    
  override func logIn(user: AnalyticsUser) {
    Analytics.setUserID(user.id)
    crashlytics.setUserID(user.id)
  }
    
  override func logOut(user: AnalyticsUser) {
    Analytics.setUserID(nil)
    crashlytics.setUserID("")
  }
  
  override func track(eventBuilder: AnalyticsEventBuilder) {
    Analytics.logEvent(
      eventBuilder.name,
      parameters: eventBuilder.attributes
    )
  }
}

许可证

本代码分发适用MIT许可证。有关更多信息,请参阅LICENSE文件。