Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ target 'WooCommerce' do
pod 'Automattic-Tracks-iOS', :git => 'https://github.com/Automattic/Automattic-Tracks-iOS.git', :tag => '0.2.3'
pod 'Gridicons', '0.15'
pod 'WordPressAuthenticator', '1.0.4'
pod 'WordPressShared', '1.0.8'


# External Libraries
Expand Down
3 changes: 2 additions & 1 deletion Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ DEPENDENCIES:
- Gridicons (= 0.15)
- KeychainAccess (~> 3.1)
- WordPressAuthenticator (= 1.0.4)
- WordPressShared (= 1.0.8)

SPEC REPOS:
https://github.com/cocoapods/specs.git:
Expand Down Expand Up @@ -132,6 +133,6 @@ SPEC CHECKSUMS:
WordPressUI: af141587ec444f9af753a00605bd0d3f14d8d8a3
wpxmlrpc: bfc572f62ce7ee897f6f38b098d2ba08732ecef4

PODFILE CHECKSUM: bca741aeec025b018771a1e5d22cbc71dfd15f55
PODFILE CHECKSUM: c627b723e165dabc83c6716871f3199190464f2c

COCOAPODS: 1.5.3
6 changes: 0 additions & 6 deletions WooCommerce/Classes/Analytics/WooAnalytics.swift
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import Foundation


public enum WooAnalyticsStat: String {
case applicationOpened = "application_opened"
case applicationClosed = "application_closed"
}


public class WooAnalytics {

// MARK: - Properties
Expand Down
149 changes: 149 additions & 0 deletions WooCommerce/Classes/Analytics/WooAnalyticsStat.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
import WordPressShared


/// This enum contains all of the events we track in the app.
///
public enum WooAnalyticsStat: String {

// Application Events
//
case applicationOpened = "application_opened"
case applicationClosed = "application_closed"

// Authentication Events
//
case signedIn = "signed_in"
case logout = "account_logout"
case openedLogin = "login_accessed"
case loginFailed = "login_failed_to_login"
case loginAutoFillCredentialsFilled = "login_autofill_credentials_filled"
case loginAutoFillCredentialsUpdated = "login_autofill_credentials_updated"
case loginProloguePaged = "login_prologue_paged"
case loginPrologueViewed = "login_prologue_viewed"
case loginEmailFormViewed = "login_email_form_viewed"
case loginMagicLinkOpenEmailClientViewed = "login_magic_link_open_email_client_viewed"
case loginMagicLinkRequestFormViewed = "login_magic_link_request_form_viewed"
case loginMagicLinkExited = "login_magic_link_exited"
case loginMagicLinkFailed = "login_magic_link_failed"
case loginMagicLinkOpened = "login_magic_link_opened"
case loginMagicLinkRequested = "login_magic_link_requested"
case loginMagicLinkSucceeded = "login_magic_link_succeeded"
case loginPasswordFormViewed = "login_password_form_viewed"
case loginURLFormViewed = "login_url_form_viewed"
case loginURLHelpScreenViewed = "login_url_help_screen_viewed"
case loginUsernamePasswordFormViewed = "login_username_password_form_viewed"
case loginTwoFactorFormViewed = "login_two_factor_form_viewed"
case loginEpilogueViewed = "login_epilogue_viewed"
case loginForgotPasswordClicked = "login_forgot_password_clicked"
case loginSocialButtonClick = "login_social_button_click"
case loginSocialButtonFailure = "login_social_button_failure"
case loginSocialConnectSuccess = "login_social_connect_success"
case loginSocialConnectFailure = "login_social_connect_failure"
case loginSocialSuccess = "login_social_login_success"
case loginSocialFailure = "login_social_login_failure"
case loginSocial2faNeeded = "login_social_2fa_needed"
case loginSocialAccountsNeedConnecting = "login_social_accounts_need_connecting"
case loginSocialErrorUnknownUser = "login_social_error_unknown_user"
case onePasswordFailed = "one_password_failed"
case onePasswordLogin = "one_password_login"
case onePasswordSignup = "one_password_signup"
case twoFactorCodeRequested = "two_factor_code_requested"
case twoFactorSentSMS = "two_factor_sent_sms"
}

public extension WooAnalyticsStat {

/// Converts the provided WPAnalyticsStat into a WooAnalyticsStat.
/// This whole process kinda stinks, but we need this for the `WordPressAuthenticatorDelegate`
/// implementation. ☹️ Feel free to refactor later on!
///
/// - Parameter stat: The WPAnalyticsStat to convert
/// - Returns: The corresponding WooAnalyticsStat or nil if it cannot be converted
///
static func valueOf(stat: WPAnalyticsStat) -> WooAnalyticsStat? {
var wooEvent: WooAnalyticsStat? = nil

switch stat {
case .signedIn:
wooEvent = WooAnalyticsStat.signedIn
case .signedInToJetpack:
wooEvent = WooAnalyticsStat.signedIn
case .logout:
wooEvent = WooAnalyticsStat.logout
case .openedLogin:
wooEvent = WooAnalyticsStat.openedLogin
case .loginFailed:
wooEvent = WooAnalyticsStat.loginFailed
case .loginAutoFillCredentialsFilled:
wooEvent = WooAnalyticsStat.loginAutoFillCredentialsFilled
case .loginAutoFillCredentialsUpdated:
wooEvent = WooAnalyticsStat.loginAutoFillCredentialsUpdated
case .loginProloguePaged:
wooEvent = WooAnalyticsStat.loginProloguePaged
case .loginPrologueViewed:
wooEvent = WooAnalyticsStat.loginPrologueViewed
case .loginEmailFormViewed:
wooEvent = WooAnalyticsStat.loginEmailFormViewed
case .loginMagicLinkOpenEmailClientViewed:
wooEvent = WooAnalyticsStat.loginMagicLinkOpenEmailClientViewed
case .loginMagicLinkRequestFormViewed:
wooEvent = WooAnalyticsStat.loginMagicLinkRequestFormViewed
case .loginMagicLinkExited:
wooEvent = WooAnalyticsStat.loginMagicLinkExited
case .loginMagicLinkFailed:
wooEvent = WooAnalyticsStat.loginMagicLinkFailed
case .loginMagicLinkOpened:
wooEvent = WooAnalyticsStat.loginMagicLinkOpened
case .loginMagicLinkRequested:
wooEvent = WooAnalyticsStat.loginMagicLinkRequested
case .loginMagicLinkSucceeded:
wooEvent = WooAnalyticsStat.loginMagicLinkSucceeded
case .loginPasswordFormViewed:
wooEvent = WooAnalyticsStat.loginPasswordFormViewed
case .loginURLFormViewed:
wooEvent = WooAnalyticsStat.loginURLFormViewed
case .loginURLHelpScreenViewed:
wooEvent = WooAnalyticsStat.loginURLHelpScreenViewed
case .loginUsernamePasswordFormViewed:
wooEvent = WooAnalyticsStat.loginUsernamePasswordFormViewed
case .loginTwoFactorFormViewed:
wooEvent = WooAnalyticsStat.loginTwoFactorFormViewed
case .loginEpilogueViewed:
wooEvent = WooAnalyticsStat.loginEpilogueViewed
case .loginForgotPasswordClicked:
wooEvent = WooAnalyticsStat.loginForgotPasswordClicked
case .loginSocialButtonClick:
wooEvent = WooAnalyticsStat.loginSocialButtonClick
case .loginSocialButtonFailure:
wooEvent = WooAnalyticsStat.loginSocialButtonFailure
case .loginSocialConnectSuccess:
wooEvent = WooAnalyticsStat.loginSocialConnectSuccess
case .loginSocialConnectFailure:
wooEvent = WooAnalyticsStat.loginSocialConnectFailure
case .loginSocialSuccess:
wooEvent = WooAnalyticsStat.loginSocialSuccess
case .loginSocialFailure:
wooEvent = WooAnalyticsStat.loginSocialFailure
case .loginSocial2faNeeded:
wooEvent = WooAnalyticsStat.loginSocial2faNeeded
case .loginSocialAccountsNeedConnecting:
wooEvent = WooAnalyticsStat.loginSocialAccountsNeedConnecting
case .loginSocialErrorUnknownUser:
wooEvent = WooAnalyticsStat.loginSocialErrorUnknownUser
case .onePasswordFailed:
wooEvent = WooAnalyticsStat.onePasswordFailed
case .onePasswordLogin:
wooEvent = WooAnalyticsStat.onePasswordLogin
case .onePasswordSignup:
wooEvent = WooAnalyticsStat.onePasswordSignup
case .twoFactorCodeRequested:
wooEvent = WooAnalyticsStat.twoFactorCodeRequested
case .twoFactorSentSMS:
wooEvent = WooAnalyticsStat.twoFactorSentSMS
default:
wooEvent = nil
}

return wooEvent
}
}
18 changes: 15 additions & 3 deletions WooCommerce/Classes/Authentication/AuthenticationManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -190,18 +190,30 @@ extension AuthenticationManager: WordPressAuthenticatorDelegate {
/// Tracks a given Analytics Event.
///
func track(event: WPAnalyticsStat) {
// TODO: Integrate Tracks
guard let wooEvent = WooAnalyticsStat.valueOf(stat: event) else {
DDLogWarn("⚠️ Could not convert WPAnalyticsStat with value: \(event.rawValue)")
return
}
WooAnalytics.shared.track(wooEvent)
}

/// Tracks a given Analytics Event, with the specified properties.
///
func track(event: WPAnalyticsStat, properties: [AnyHashable: Any]) {
// TODO: Integrate Tracks
guard let wooEvent = WooAnalyticsStat.valueOf(stat: event) else {
DDLogWarn("⚠️ Could not convert WPAnalyticsStat with value: \(event.rawValue)")
return
}
WooAnalytics.shared.track(wooEvent, withProperties: properties)
}

/// Tracks a given Analytics Event, with the specified error.
///
func track(event: WPAnalyticsStat, error: Error) {
// TODO: Integrate Tracks
guard let wooEvent = WooAnalyticsStat.valueOf(stat: event) else {
DDLogWarn("⚠️ Could not convert WPAnalyticsStat with value: \(event.rawValue)")
return
}
WooAnalytics.shared.track(wooEvent, withError: error)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ extension SettingsViewController: UITableViewDataSource {
if cell is LogOutTableViewCell {
let logoutCell = cell as! LogOutTableViewCell
logoutCell.didSelectLogout = { [weak self] in
WooAnalytics.shared.track(.logout)
StoresManager.shared.deauthenticate()
self?.navigationController?.popToRootViewController(animated: true)
}
Expand Down
4 changes: 4 additions & 0 deletions WooCommerce/WooCommerce.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

/* Begin PBXBuildFile section */
7403F7E220EC04070097198F /* OrderStatusViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7403F7E120EC04070097198F /* OrderStatusViewModel.swift */; };
7421344A210A323C00C13890 /* WooAnalyticsStat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74213449210A323C00C13890 /* WooAnalyticsStat.swift */; };
746791632108D7C0007CF1DC /* WooAnalyticsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746791622108D7C0007CF1DC /* WooAnalyticsTests.swift */; };
746791662108D87B007CF1DC /* MockupAnalyticsProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746791652108D87B007CF1DC /* MockupAnalyticsProvider.swift */; };
747AA0892107CEC60047A89B /* AnalyticsProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 747AA0882107CEC60047A89B /* AnalyticsProvider.swift */; };
Expand Down Expand Up @@ -179,6 +180,7 @@
/* Begin PBXFileReference section */
33035144757869DE5E4DC88A /* Pods-WooCommerce.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WooCommerce.release.xcconfig"; path = "../Pods/Target Support Files/Pods-WooCommerce/Pods-WooCommerce.release.xcconfig"; sourceTree = "<group>"; };
7403F7E120EC04070097198F /* OrderStatusViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderStatusViewModel.swift; sourceTree = "<group>"; };
74213449210A323C00C13890 /* WooAnalyticsStat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WooAnalyticsStat.swift; sourceTree = "<group>"; };
746791622108D7C0007CF1DC /* WooAnalyticsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WooAnalyticsTests.swift; sourceTree = "<group>"; };
746791652108D87B007CF1DC /* MockupAnalyticsProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockupAnalyticsProvider.swift; sourceTree = "<group>"; };
747AA0882107CEC60047A89B /* AnalyticsProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsProvider.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -342,6 +344,7 @@
isa = PBXGroup;
children = (
CEA16F3920FD0C8C0061B4E1 /* WooAnalytics.swift */,
74213449210A323C00C13890 /* WooAnalyticsStat.swift */,
747AA0882107CEC60047A89B /* AnalyticsProvider.swift */,
747AA08A2107CF8D0047A89B /* TracksProvider.swift */,
);
Expand Down Expand Up @@ -1022,6 +1025,7 @@
B56DB3CA2049BFAA00D4AA8E /* AppDelegate.swift in Sources */,
B5A82EE7210263460053ADC8 /* UIViewController+Helpers.swift in Sources */,
CE1F512B206985DF00C6C810 /* PaddedLabel.swift in Sources */,
7421344A210A323C00C13890 /* WooAnalyticsStat.swift in Sources */,
CE1EC8D120B6FE39009762BF /* FootnoteView.swift in Sources */,
B58B4AB82108F14700076FDD /* NoticeNotificationInfo.swift in Sources */,
B557DA1520979904005962F4 /* CustomerNoteTableViewCell.swift in Sources */,
Expand Down