Skip to content

Instantly share code, notes, and snippets.

View quintonpryce's full-sized avatar

Quinton Pryce quintonpryce

  • TextNow
  • Guelph
View GitHub Profile
@quintonpryce
quintonpryce / CoreTracking.swift
Created July 18, 2019 19:18
Tracking in the core
public func track(event: AnalyticsEvent) {
trackAnalytic(event: event, parameters: EmptyParameter())
}
public func track<T>(event: AnalyticsEvent, with parameters: T) where T : AnalyticsParameter {
trackAnalytic(event: event, parameters: parameters)
}
private func trackAnalytic<T: AnalyticsParameter>(event: AnalyticsEvent, parameters: T?) {
for trackerKey in event.supportedTrackers {
@quintonpryce
quintonpryce / AddEventTrackers.swift
Created July 18, 2019 19:14
Adding event trackers
private var eventTrackers: [EventTrackerKey: EventTracker] = [:]
public func addEventTracker(key: EventTrackerKey, tracker: EventTracker) {
DispatchQueue(label: "com.test.mySerialQueue").sync {
eventTrackers[key] = tracker
}
}
public class EventTrackerKey: Hashable {
public func hash(into hasher: inout Hasher) {
hasher.combine(self.name.hashValue)
}
public static func == (lhs: EventTrackerKey, rhs: EventTrackerKey) -> Bool {
return (lhs.name == rhs.name)
}
public let name: String
@quintonpryce
quintonpryce / AnalyticsParametersExample.swift
Last active July 18, 2019 19:12
Analytics Parameters Example
public class ExampleParameter: AnalyticsParameter {
public var parameter: ParameterType
public typealias ParameterType = [AnyHashable: Any]
init(parameters: [AnyHashable: Any]) {
self.parameter = parameters
}
}
@quintonpryce
quintonpryce / AnalyticsParameter.swift
Created July 18, 2019 19:10
Analytics Parameter Protocol
public protocol AnalyticsParameter {
var parameter: ParameterType { get }
associatedtype ParameterType
}
@quintonpryce
quintonpryce / AnalyticsEvent.swift
Created July 18, 2019 19:09
Analytics Event Protocol
public protocol AnalyticsEvent {
var name: String {get}
var supportedTrackers: [EventTrackerKey] {get}
}
@quintonpryce
quintonpryce / AdjustEventTokenValidation.swift
Created July 18, 2019 19:06
Adjust Event Token Validation
func checkEventToken(eventToken: String) {
guard !ADJUtil.isNull(eventToken) else {
logger.error("Missing Event Token")
return false
}
guard eventToken.count == 6 else {
logger.error("Malformed Event Token \(eventToken)")
return false
}
return true
@quintonpryce
quintonpryce / EventTracker.swift
Created July 18, 2019 18:59
EventTracker Protocol
public protocol EventTracker {
func track(event: String)
func track<T: AnalyticsParameter>(event: String, with parameters: T)
func isEventNameSupported(event: String) -> Bool
}