Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // Analytics.swift
- // messageus
- //
- // Created by Anna Shirokova on 16/03/16.
- // Copyright © 2016 STRV. All rights reserved.
- //
- import UIKit
- import Mixpanel
- enum PeopleProperty {
- case UserId
- case FirstName
- case LastName
- case Email
- case PhoneNumber
- case OrganizationId // FOR BUSINESS APP
- case LastLogin
- case Registration
- func description() -> String {
- switch self {
- case .UserId:
- return "User Id"
- case .FirstName:
- return "$first_name"
- case .LastName:
- return "$last_name"
- case .Email:
- return "$email"
- case .PhoneNumber:
- return "$phone"
- case .OrganizationId: // FOR BUSINESS APP
- return "Organisation Id"
- case .LastLogin:
- return "$last_login"
- case .Registration:
- return "$created"
- }
- }
- static func allFields() -> [PeopleProperty] {
- return [.UserId, .FirstName, .LastName, .Email, .PhoneNumber]
- }
- }
- class Analytics: NSObject {
- // MARK: - Application Lifecycle
- func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)
- {
- /* Mixpanel */
- Mixpanel.sharedInstanceWithToken(Constants.mixpanelToken(), launchOptions: launchOptions)
- }
- // MARK: - People Properties
- func setCurrentUser(user: User) {
- var newData: [String: AnyObject] = [:]
- for property in PeopleProperty.allFields() {
- var value: AnyObject? = nil
- switch property {
- case .UserId:
- value = user.userId ?? String()
- break;
- case .FirstName:
- value = user.firstName ?? String()
- break;
- case .LastName:
- value = user.lastName ?? String()
- break;
- case .Email:
- value = user.email ?? String()
- break;
- case .PhoneNumber:
- value = user.phone ?? String()
- break;
- case .OrganizationId:
- value = user.organizationId ?? String()
- break;
- default:
- break;
- }
- newData[property.description()] = value
- }
- Mixpanel.sharedInstance().people.set(newData as [NSObject : AnyObject])
- }
- func updatePeopleProperty (property: String!, value: AnyObject!) {
- Mixpanel.sharedInstance().people.set(property, to: value)
- }
- // MARK: - Properties
- // MARK: - Properties
- func incrementProperty (property: String, superOnly: Bool = false, amount: Double = 1) {
- let mixpanel = Mixpanel.sharedInstance()
- if !superOnly {
- mixpanel.people.increment(property, by: amount)
- }
- mixpanel.registerSuperPropertiesOnce([property: 0])
- if let value = mixpanel.currentSuperProperties()[property] as? Double {
- mixpanel.registerSuperProperties([property: value+amount])
- }
- }
- func setDateToPropertyOnce (property: String, superOnly: Bool = false) {
- let prop = [property : NSDate()]
- Mixpanel.sharedInstance().registerSuperPropertiesOnce(prop)
- if !superOnly {
- Mixpanel.sharedInstance().people.setOnce(prop)
- }
- }
- func setDateToProperty (property: String, superOnly: Bool = false) {
- let prop = [property : NSDate()]
- Mixpanel.sharedInstance().registerSuperProperties(prop)
- if !superOnly {
- Mixpanel.sharedInstance().people.set(prop)
- }
- }
- // MARK: - Object Lifecycle
- static let sharedAnalytics = Analytics()
- // MARK: - Push Notifications
- func registerDeviceToken(token: NSData) {
- Mixpanel.sharedInstance().people.addPushDeviceToken(token)
- }
- // MARK: - Actions
- func signIn(membership: Membership) {
- Mixpanel.sharedInstance().identify(membership.userId)
- self.updatePeopleProperty(PeopleProperty.LastLogin.description(), value: NSDate())
- self.trackSignIn()
- }
- func signUp(membership: Membership) {
- let mixpanel = Mixpanel.sharedInstance()
- mixpanel.createAlias(membership.userId, forDistinctID: mixpanel.distinctId)
- mixpanel.identify(mixpanel.distinctId)
- self.updatePeopleProperty(PeopleProperty.LastLogin.description(), value: NSDate())
- self.trackSignUp()
- }
- func trackRegister() {
- Mixpanel.sharedInstance().track("Register")
- }
- func trackSendMessageToCA() {
- }
- func trackSendOfferToCA() {
- }
- func trackSendImageToCA() {
- }
- func trackSendMessageToBA() {
- }
- func trackUserTapGetInTouch() {
- Mixpanel.sharedInstance().track("Tap Get in Touch")
- }
- func trackUserTapAssign() {
- Mixpanel.sharedInstance().track("Tap Assign")
- }
- // METHODS
- func trackSignUp() {
- self.incrementProperty("Number of Sign Ins", superOnly: true)
- self.setDateToPropertyOnce("Date of First Sign In", superOnly: true)
- self.setDateToProperty("Date of Last Sign In", superOnly: true)
- Mixpanel.sharedInstance().track("Sign Up")
- }
- func trackSignIn() {
- self.incrementProperty("Number of Sign Ins")
- self.setDateToPropertyOnce("Date of First Sign In")
- self.setDateToProperty("Date of Last Sign In")
- Mixpanel.sharedInstance().track("Sign In")
- }
- func trackSignOut() {
- self.incrementProperty("Number of Sign Outs")
- self.setDateToPropertyOnce("Date of First Sign Out")
- self.setDateToProperty("Date of Last Sign Out")
- Mixpanel.sharedInstance().track("Sign Out")
- }
- func trackRequestStarted(orgId: String?, factualId: String?) {
- self.incrementProperty("Number of Requests Started")
- self.setDateToPropertyOnce("Date of First Request Started")
- self.setDateToProperty("Date of Last Request Started")
- Mixpanel.sharedInstance().track("Request Started", properties: ["org": orgId ?? "", "factual": factualId ?? ""])
- }
- func trackMessageSent(requestId: String, orgId: String, messageType: String) {
- self.incrementProperty("Number of Business Messages Sent")
- self.setDateToPropertyOnce("Date of First Business Message Sent")
- self.setDateToProperty("Date of Last Business Message Sent")
- Mixpanel.sharedInstance().track("Business Message Sent", properties: ["request": requestId, "org": orgId, "type": messageType])
- }
- func trackClaimBusiness(factualId: String) {
- self.setDateToPropertyOnce("Date of First Business Claim")
- self.setDateToProperty("Date of Last Business Claim")
- self.incrementProperty("Number of Businesses Claim")
- Mixpanel.sharedInstance().track("User Claimed Business", properties: ["factual": factualId])
- }
- // REQUESTS
- func trackUserAssignedRequest(orgId: String, requestId: String, userId: String, byAdmin: Bool) {
- self.setDateToPropertyOnce("Date of First Assigned Request")
- self.setDateToProperty("Date of Last Assigned Request")
- self.incrementProperty("Number of Assigned Requests")
- Mixpanel.sharedInstance().track("User Assigned Requests", properties: ["org": orgId, "request": requestId, "user": userId, "isAdmin": byAdmin])
- }
- func trackRequestAnswered(orgId: String, requestId: String, userId: String) {
- self.setDateToPropertyOnce("Date of First Request Answer")
- self.setDateToProperty("Date of Last Request Answer")
- self.incrementProperty("Number of Request Answers")
- Mixpanel.sharedInstance().track("User Answered Requests", properties: ["org": orgId, "request": requestId, "user": userId])
- }
- // INTERNAL MESSAGES
- func trackUserSentMessageToDepartment(orgId: String, departmentId: String, userId: String) {
- self.setDateToPropertyOnce("Date of First Message to Dept")
- self.setDateToProperty("Date of Last Message to Dept")
- self.incrementProperty("Number of Message to Dept")
- Mixpanel.sharedInstance().track("User Sent Message to Dept", properties: ["orgId": orgId, "departmentId": departmentId, "userId": userId])
- }
- func trackUserSentMessageToChannel(orgId: String, channelId: String, userId: String) {
- self.setDateToPropertyOnce("Date of First Message to Channel")
- self.setDateToProperty("Date of Last Message to Channel")
- self.incrementProperty("Number of Message to Channel")
- Mixpanel.sharedInstance().track("User Sent Message to Channel", properties: ["orgId": orgId, "channelId": channelId, "userId": userId])
- }
- func trackRefund(offerId: String, amount: Double) {
- self.incrementProperty("Total Refund Amount", amount: amount)
- self.incrementProperty("Number of Refunds")
- self.setDateToPropertyOnce("Date of First Refunds")
- self.setDateToProperty("Date of Last Refund")
- Mixpanel.sharedInstance().track("Order Refunded", properties: ["order": offerId, "amount": amount])
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement