From add4dd06d2d4301b937db26612740e31213604fe Mon Sep 17 00:00:00 2001 From: aerych Date: Sat, 21 Oct 2017 10:13:55 -0500 Subject: [PATCH 1/4] Login: Adds new analytics keys for social login. --- .../WPAnalyticsTrackerAutomatticTracks.m | 30 +++++++++++++++++++ .../Core/Analytics/WPAnalytics.h | 10 +++++++ 2 files changed, 40 insertions(+) diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m b/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m index c5839aeeacc7..979dc30ff53d 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m +++ b/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m @@ -514,6 +514,36 @@ + (TracksEventPair *)eventPairForStat:(WPAnalyticsStat)stat case WPAnalyticsStatLoginForgotPasswordClicked: eventName = @"login_forgot_password_clicked"; break; + case WPAnalyticsStatLoginSocialButtonClick: + eventName = @"login_social_button_click"; + break; + case WPAnalyticsStatLoginSocialButtonFailure: + eventName = @"login_social_button_failure"; + break; + case WPAnalyticsStatLoginSocialConnectSuccess: + eventName = @"login_social_connect_success"; + break; + case WPAnalyticsStatLoginSocialConnectFailure: + eventName = @"login_social_connect_failure"; + break; + case WPAnalyticsStatLoginSocialSuccess: + eventName = @"login_social_login_success"; + break; + case WPAnalyticsStatLoginSocialFailure: + eventName = @"login_social_login_failure"; + break; + case WPAnalyticsStatLoginSocial2faNeeded: + eventName = @"login_social_2fa_needed"; + break; + case WPAnalyticsStatLoginSocialAccountsNeedConnecting: + eventName = @"login_social_accounts_need_connecting"; + break; + case WPAnalyticsStatLoginSocialErrorAccountAlreadyConnected: + eventName = @"login_social_error_account_already_connected"; + break; + case WPAnalyticsStatLoginSocialErrorUnknownUser: + eventName = @"login_social_error_unknown_user"; + break; case WPAnalyticsStatLogout: eventName = @"account_logout"; break; diff --git a/WordPressShared/WordPressShared/Core/Analytics/WPAnalytics.h b/WordPressShared/WordPressShared/Core/Analytics/WPAnalytics.h index df23e4426228..123efe4ed661 100644 --- a/WordPressShared/WordPressShared/Core/Analytics/WPAnalytics.h +++ b/WordPressShared/WordPressShared/Core/Analytics/WPAnalytics.h @@ -101,6 +101,16 @@ typedef NS_ENUM(NSUInteger, WPAnalyticsStat) { WPAnalyticsStatLoginURLFormViewed, WPAnalyticsStatLoginURLHelpScreenViewed, WPAnalyticsStatLoginUsernamePasswordFormViewed, + WPAnalyticsStatLoginSocialButtonClick, + WPAnalyticsStatLoginSocialButtonFailure, + WPAnalyticsStatLoginSocialConnectSuccess, + WPAnalyticsStatLoginSocialConnectFailure, + WPAnalyticsStatLoginSocialSuccess, + WPAnalyticsStatLoginSocialFailure, + WPAnalyticsStatLoginSocial2faNeeded, + WPAnalyticsStatLoginSocialAccountsNeedConnecting, + WPAnalyticsStatLoginSocialErrorAccountAlreadyConnected, + WPAnalyticsStatLoginSocialErrorUnknownUser, WPAnalyticsStatLogout, WPAnalyticsStatLowMemoryWarning, WPAnalyticsStatMediaLibraryDeletedItems, From fc2660861e7a413a995235463085510d74a20409 Mon Sep 17 00:00:00 2001 From: aerych Date: Sat, 21 Oct 2017 11:26:53 -0500 Subject: [PATCH 2/4] Login: Wires up analytic calls. --- WordPress/Classes/Services/LoginFacade.m | 1 + .../ViewRelated/NUX/Login2FAViewController.swift | 1 + .../NUX/LoginEmailViewController.swift | 16 +++++++++++----- .../ViewRelated/NUX/LoginViewController.swift | 4 +++- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/WordPress/Classes/Services/LoginFacade.m b/WordPress/Classes/Services/LoginFacade.m index 42ac8f5221de..dbd127f97c36 100644 --- a/WordPress/Classes/Services/LoginFacade.m +++ b/WordPress/Classes/Services/LoginFacade.m @@ -81,6 +81,7 @@ - (void)loginToWordPressDotComWithGoogleIDToken:(NSString *)googleIDToken } } failure:^(NSError *error) { [WPAppAnalytics track:WPAnalyticsStatLoginFailed error:error]; + [WPAppAnalytics track:WPAnalyticsStatLoginSocialFailure error:error]; if ([self.delegate respondsToSelector:@selector(displayRemoteError:)]) { [self.delegate displayRemoteError:error]; } diff --git a/WordPress/Classes/ViewRelated/NUX/Login2FAViewController.swift b/WordPress/Classes/ViewRelated/NUX/Login2FAViewController.swift index 92f0b119f819..0d7ca0a1d840 100644 --- a/WordPress/Classes/ViewRelated/NUX/Login2FAViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/Login2FAViewController.swift @@ -168,6 +168,7 @@ class Login2FAViewController: LoginViewController, SigninKeyboardResponder { syncWPCom(username, authToken: authToken, requiredMultifactor: true) // Disconnect now that we're done with Google. GIDSignIn.sharedInstance().disconnect() + WPAppAnalytics.track(.loginSocialSuccess) } diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEmailViewController.swift b/WordPress/Classes/ViewRelated/NUX/LoginEmailViewController.swift index aaf35781a9b4..322b4abdcbe6 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEmailViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEmailViewController.swift @@ -170,6 +170,8 @@ class LoginEmailViewController: LoginViewController, SigninKeyboardResponder { GIDSignIn.sharedInstance().serverClientID = ApiCredentials.googleLoginServerClientId() GIDSignIn.sharedInstance().signIn() + + WPAppAnalytics.track(.loginSocialButtonClick) } @@ -428,6 +430,7 @@ extension LoginEmailViewController { syncWPCom(username, authToken: authToken, requiredMultifactor: false) // Disconnect now that we're done with Google. GIDSignIn.sharedInstance().disconnect() + WPAppAnalytics.track(.loginSocialSuccess) } @@ -439,6 +442,7 @@ extension LoginEmailViewController { loginFields.emailAddress = email performSegue(withIdentifier: NUXAbstractViewController.SegueIdentifier.showWPComLogin, sender: self) + WPAppAnalytics.track(.loginSocialAccountsNeedConnecting) } @@ -447,17 +451,21 @@ extension LoginEmailViewController { loginFields.nonceUserID = userID performSegue(withIdentifier: NUXAbstractViewController.SegueIdentifier.show2FA, sender: self) + WPAppAnalytics.track(.loginSocial2faNeeded) } } extension LoginEmailViewController: GIDSignInDelegate { func sign(_ signIn: GIDSignIn?, didSignInFor user: GIDGoogleUser?, withError error: Error?) { - // TODO: finish implementing wpcom login via Google code guard let user = user, let token = user.authentication.idToken, let email = user.profile.email else { - // The Google SignIn for may have been canceled. - //TODO: Add analytis + // The Google SignIn for may have been canceled. + if let err = error { + WPAppAnalytics.track(.loginSocialButtonFailure, error: err) + } else { + WPAppAnalytics.track(.loginSocialButtonFailure) + } return } @@ -469,8 +477,6 @@ extension LoginEmailViewController: GIDSignInDelegate { configureViewLoading(true) loginFacade.loginToWordPressDotCom(withGoogleIDToken: token) - - //TODO: Add analytis } } diff --git a/WordPress/Classes/ViewRelated/NUX/LoginViewController.swift b/WordPress/Classes/ViewRelated/NUX/LoginViewController.swift index 19d41e165bb0..6868c99d510e 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginViewController.swift @@ -190,9 +190,11 @@ extension LoginViewController: SigninWPComSyncHandler, LoginFacadeDelegate { let accountService = AccountService(managedObjectContext: ContextManager.sharedInstance().mainContext) accountService.connectToSocialService(service, serviceIDToken: token, success: { - // noop + WPAppAnalytics.track(.loginSocialConnectSuccess) + WPAppAnalytics.track(.loginSocialSuccess) }, failure: { error in DDLogError(error.description) + WPAppAnalytics.track(.loginSocialConnectFailure, error: error) // We're opting to let this call fail silently. // Our user has already successfully authenticated and can use the app -- // connecting the social service isn't critical. There's little to From 941450d7c14b1157f0baeb40a5189827292aca03 Mon Sep 17 00:00:00 2001 From: aerych Date: Sun, 22 Oct 2017 21:17:00 -0500 Subject: [PATCH 3/4] Login: Bump no user stat. --- WordPress/Classes/ViewRelated/NUX/LoginEmailViewController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/WordPress/Classes/ViewRelated/NUX/LoginEmailViewController.swift b/WordPress/Classes/ViewRelated/NUX/LoginEmailViewController.swift index 09921845a147..b069a9ac342a 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginEmailViewController.swift +++ b/WordPress/Classes/ViewRelated/NUX/LoginEmailViewController.swift @@ -340,6 +340,7 @@ class LoginEmailViewController: LoginViewController, SigninKeyboardResponder { if (error as NSError).code == WordPressComOAuthError.unknownUser.rawValue { errorTitle = NSLocalizedString("Connected But…", comment: "Title shown when a user logs in with Google but no matching WordPress.com account is found") errorDescription = NSLocalizedString("The Google account \"\(loginFields.username)\" doesn't match any account on WordPress.com", comment: "Description shown when a user logs in with Google but no matching WordPress.com account is found") + WPAppAnalytics.track(.loginSocialErrorUnknownUser) } else { errorTitle = NSLocalizedString("Unable To Connect", comment: "Shown when a user logs in with Google but it subsequently fails to work as login to WordPress.com") errorDescription = error.localizedDescription From 6eeb081916ee4b20b49b6f5f5d93374c54de9207 Mon Sep 17 00:00:00 2001 From: aerych Date: Sun, 22 Oct 2017 21:20:38 -0500 Subject: [PATCH 4/4] Login: Removes unused analytic. --- .../Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m | 3 --- WordPressShared/WordPressShared/Core/Analytics/WPAnalytics.h | 1 - 2 files changed, 4 deletions(-) diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m b/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m index 979dc30ff53d..1d0b738fa2a4 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m +++ b/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m @@ -538,9 +538,6 @@ + (TracksEventPair *)eventPairForStat:(WPAnalyticsStat)stat case WPAnalyticsStatLoginSocialAccountsNeedConnecting: eventName = @"login_social_accounts_need_connecting"; break; - case WPAnalyticsStatLoginSocialErrorAccountAlreadyConnected: - eventName = @"login_social_error_account_already_connected"; - break; case WPAnalyticsStatLoginSocialErrorUnknownUser: eventName = @"login_social_error_unknown_user"; break; diff --git a/WordPressShared/WordPressShared/Core/Analytics/WPAnalytics.h b/WordPressShared/WordPressShared/Core/Analytics/WPAnalytics.h index 123efe4ed661..0aef7d8538aa 100644 --- a/WordPressShared/WordPressShared/Core/Analytics/WPAnalytics.h +++ b/WordPressShared/WordPressShared/Core/Analytics/WPAnalytics.h @@ -109,7 +109,6 @@ typedef NS_ENUM(NSUInteger, WPAnalyticsStat) { WPAnalyticsStatLoginSocialFailure, WPAnalyticsStatLoginSocial2faNeeded, WPAnalyticsStatLoginSocialAccountsNeedConnecting, - WPAnalyticsStatLoginSocialErrorAccountAlreadyConnected, WPAnalyticsStatLoginSocialErrorUnknownUser, WPAnalyticsStatLogout, WPAnalyticsStatLowMemoryWarning,