Advertisement
Guest User

Untitled

a guest
May 26th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 10.12 KB | None | 0 0
  1. //
  2. //  Analytics.swift
  3. //  messageus
  4. //
  5. //  Created by Anna Shirokova on 16/03/16.
  6. //  Copyright © 2016 STRV. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10. import Mixpanel
  11.  
  12. enum PeopleProperty {
  13.    
  14.     case UserId
  15.     case FirstName
  16.     case LastName
  17.     case Email
  18.     case PhoneNumber
  19.     case OrganizationId  // FOR BUSINESS APP
  20.     case LastLogin
  21.     case Registration
  22.    
  23.     func description() -> String {
  24.        
  25.         switch self {
  26.            
  27.         case .UserId:
  28.             return "User Id"
  29.         case .FirstName:
  30.             return "$first_name"
  31.         case .LastName:
  32.             return "$last_name"
  33.         case .Email:
  34.             return "$email"
  35.         case .PhoneNumber:
  36.             return "$phone"
  37.         case .OrganizationId: // FOR BUSINESS APP
  38.             return "Organisation Id"
  39.         case .LastLogin:
  40.             return "$last_login"
  41.         case .Registration:
  42.             return "$created"
  43.         }
  44.     }
  45.    
  46.     static func allFields() -> [PeopleProperty] {
  47.        
  48.         return [.UserId, .FirstName, .LastName, .Email, .PhoneNumber]
  49.     }
  50. }
  51.  
  52. class Analytics: NSObject {
  53.    
  54.     // MARK: - Application Lifecycle
  55.    
  56.     func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)
  57.     {
  58.        
  59.         /* Mixpanel */
  60.        
  61.         Mixpanel.sharedInstanceWithToken(Constants.mixpanelToken(), launchOptions: launchOptions)
  62.        
  63.     }
  64.    
  65.     // MARK: - People Properties
  66.    
  67.     func setCurrentUser(user: User) {
  68.        
  69.         var newData: [String: AnyObject] = [:]
  70.        
  71.         for property in PeopleProperty.allFields() {
  72.            
  73.             var value: AnyObject? = nil
  74.            
  75.             switch property {
  76.                
  77.             case .UserId:
  78.                 value = user.userId ?? String()
  79.                 break;
  80.                
  81.             case .FirstName:
  82.                 value = user.firstName ?? String()
  83.                 break;
  84.                
  85.             case .LastName:
  86.                 value = user.lastName ?? String()
  87.                 break;
  88.                
  89.             case .Email:
  90.                 value = user.email ?? String()
  91.                 break;
  92.                
  93.             case .PhoneNumber:
  94.                 value = user.phone ?? String()
  95.                 break;
  96.                
  97.             case .OrganizationId:
  98.                 value = user.organizationId ?? String()
  99.                 break;
  100.                
  101.             default:
  102.                 break;
  103.             }
  104.            
  105.             newData[property.description()] = value
  106.         }
  107.        
  108.         Mixpanel.sharedInstance().people.set(newData as [NSObject : AnyObject])
  109.     }
  110.    
  111.     func updatePeopleProperty (property: String!, value: AnyObject!) {
  112.        
  113.         Mixpanel.sharedInstance().people.set(property, to: value)
  114.     }
  115.    
  116.     // MARK: - Properties
  117.     // MARK: - Properties
  118.    
  119.     func incrementProperty (property: String, superOnly: Bool = false, amount: Double = 1) {
  120.        
  121.         let mixpanel = Mixpanel.sharedInstance()
  122.        
  123.         if !superOnly {
  124.            
  125.             mixpanel.people.increment(property, by: amount)
  126.         }
  127.        
  128.         mixpanel.registerSuperPropertiesOnce([property: 0])
  129.        
  130.         if let value = mixpanel.currentSuperProperties()[property] as? Double {
  131.            
  132.             mixpanel.registerSuperProperties([property: value+amount])
  133.         }
  134.     }
  135.    
  136.     func setDateToPropertyOnce (property: String, superOnly: Bool = false) {
  137.        
  138.         let prop = [property : NSDate()]
  139.        
  140.         Mixpanel.sharedInstance().registerSuperPropertiesOnce(prop)
  141.        
  142.         if !superOnly {
  143.            
  144.             Mixpanel.sharedInstance().people.setOnce(prop)
  145.         }
  146.     }
  147.    
  148.     func setDateToProperty (property: String, superOnly: Bool = false) {
  149.        
  150.         let prop = [property : NSDate()]
  151.        
  152.         Mixpanel.sharedInstance().registerSuperProperties(prop)
  153.        
  154.         if !superOnly {
  155.            
  156.             Mixpanel.sharedInstance().people.set(prop)
  157.         }
  158.     }
  159.    
  160.     // MARK: - Object Lifecycle
  161.    
  162.     static let sharedAnalytics = Analytics()
  163.    
  164.    
  165.     // MARK: - Push Notifications
  166.    
  167.     func registerDeviceToken(token: NSData) {
  168.        
  169.         Mixpanel.sharedInstance().people.addPushDeviceToken(token)
  170.     }
  171.    
  172.    
  173.     // MARK: - Actions
  174.    
  175.     func signIn(membership: Membership) {
  176.        
  177.         Mixpanel.sharedInstance().identify(membership.userId)
  178.         self.updatePeopleProperty(PeopleProperty.LastLogin.description(), value: NSDate())
  179.        
  180.         self.trackSignIn()
  181.     }
  182.    
  183.     func signUp(membership: Membership) {
  184.        
  185.         let mixpanel = Mixpanel.sharedInstance()
  186.        
  187.         mixpanel.createAlias(membership.userId, forDistinctID: mixpanel.distinctId)
  188.        
  189.         mixpanel.identify(mixpanel.distinctId)
  190.        
  191.         self.updatePeopleProperty(PeopleProperty.LastLogin.description(), value: NSDate())
  192.        
  193.         self.trackSignUp()
  194.        
  195.     }
  196.    
  197.    
  198.    
  199.     func trackRegister() {
  200.        
  201.         Mixpanel.sharedInstance().track("Register")
  202.     }
  203.    
  204.     func trackSendMessageToCA() {
  205.     }
  206.    
  207.     func trackSendOfferToCA() {
  208.     }
  209.    
  210.     func trackSendImageToCA() {
  211.     }
  212.    
  213.     func trackSendMessageToBA() {
  214.     }
  215.    
  216.     func trackUserTapGetInTouch() {
  217.        
  218.         Mixpanel.sharedInstance().track("Tap Get in Touch")
  219.     }
  220.    
  221.     func trackUserTapAssign() {
  222.        
  223.         Mixpanel.sharedInstance().track("Tap Assign")
  224.     }
  225.    
  226.    
  227.    
  228.     // METHODS
  229.    
  230.    
  231.     func trackSignUp() {
  232.        
  233.         self.incrementProperty("Number of Sign Ins", superOnly: true)
  234.         self.setDateToPropertyOnce("Date of First Sign In", superOnly: true)
  235.         self.setDateToProperty("Date of Last Sign In", superOnly: true)
  236.        
  237.         Mixpanel.sharedInstance().track("Sign Up")
  238.        
  239.     }
  240.    
  241.     func trackSignIn() {
  242.        
  243.         self.incrementProperty("Number of Sign Ins")
  244.         self.setDateToPropertyOnce("Date of First Sign In")
  245.         self.setDateToProperty("Date of Last Sign In")
  246.        
  247.         Mixpanel.sharedInstance().track("Sign In")
  248.     }
  249.    
  250.     func trackSignOut() {
  251.        
  252.         self.incrementProperty("Number of Sign Outs")
  253.         self.setDateToPropertyOnce("Date of First Sign Out")
  254.         self.setDateToProperty("Date of Last Sign Out")
  255.        
  256.         Mixpanel.sharedInstance().track("Sign Out")
  257.     }
  258.    
  259.     func trackRequestStarted(orgId: String?, factualId: String?) {
  260.        
  261.         self.incrementProperty("Number of Requests Started")
  262.         self.setDateToPropertyOnce("Date of First Request Started")
  263.         self.setDateToProperty("Date of Last Request Started")
  264.        
  265.         Mixpanel.sharedInstance().track("Request Started", properties: ["org": orgId ?? "", "factual": factualId ?? ""])
  266.     }
  267.    
  268.     func trackMessageSent(requestId: String, orgId: String, messageType: String) {
  269.        
  270.         self.incrementProperty("Number of Business Messages Sent")
  271.         self.setDateToPropertyOnce("Date of First Business Message Sent")
  272.         self.setDateToProperty("Date of Last Business Message Sent")
  273.        
  274.         Mixpanel.sharedInstance().track("Business Message Sent", properties: ["request": requestId, "org": orgId, "type": messageType])
  275.     }
  276.    
  277.    
  278.     func trackClaimBusiness(factualId: String) {
  279.        
  280.         self.setDateToPropertyOnce("Date of First Business Claim")
  281.         self.setDateToProperty("Date of Last Business Claim")
  282.         self.incrementProperty("Number of Businesses Claim")
  283.        
  284.         Mixpanel.sharedInstance().track("User Claimed Business", properties: ["factual": factualId])
  285.     }
  286.    
  287.     // REQUESTS
  288.    
  289.    
  290.     func trackUserAssignedRequest(orgId: String, requestId: String, userId: String, byAdmin: Bool) {
  291.        
  292.         self.setDateToPropertyOnce("Date of First Assigned Request")
  293.         self.setDateToProperty("Date of Last Assigned Request")
  294.         self.incrementProperty("Number of Assigned Requests")
  295.        
  296.         Mixpanel.sharedInstance().track("User Assigned Requests", properties: ["org": orgId, "request": requestId, "user": userId, "isAdmin": byAdmin])
  297.     }
  298.    
  299.     func trackRequestAnswered(orgId: String, requestId: String, userId: String) {
  300.        
  301.         self.setDateToPropertyOnce("Date of First Request Answer")
  302.         self.setDateToProperty("Date of Last Request Answer")
  303.         self.incrementProperty("Number of Request Answers")
  304.        
  305.         Mixpanel.sharedInstance().track("User Answered Requests", properties: ["org": orgId, "request": requestId, "user": userId])
  306.     }
  307.    
  308.    
  309.     // INTERNAL MESSAGES
  310.    
  311.    
  312.     func trackUserSentMessageToDepartment(orgId: String, departmentId: String, userId: String) {
  313.        
  314.         self.setDateToPropertyOnce("Date of First Message to Dept")
  315.         self.setDateToProperty("Date of Last Message to Dept")
  316.         self.incrementProperty("Number of Message to Dept")
  317.        
  318.         Mixpanel.sharedInstance().track("User Sent Message to Dept", properties: ["orgId": orgId, "departmentId": departmentId, "userId": userId])
  319.     }
  320.    
  321.     func trackUserSentMessageToChannel(orgId: String, channelId: String, userId: String) {
  322.        
  323.         self.setDateToPropertyOnce("Date of First Message to Channel")
  324.         self.setDateToProperty("Date of Last Message to Channel")
  325.         self.incrementProperty("Number of Message to Channel")
  326.        
  327.         Mixpanel.sharedInstance().track("User Sent Message to Channel", properties: ["orgId": orgId, "channelId": channelId, "userId": userId])
  328.     }
  329.    
  330.     func trackRefund(offerId: String, amount: Double) {
  331.    
  332.         self.incrementProperty("Total Refund Amount", amount: amount)
  333.         self.incrementProperty("Number of Refunds")
  334.         self.setDateToPropertyOnce("Date of First Refunds")
  335.         self.setDateToProperty("Date of Last Refund")
  336.        
  337.         Mixpanel.sharedInstance().track("Order Refunded", properties: ["order": offerId, "amount": amount])
  338.     }
  339. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement