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 WordPress/Classes/Services/LoginFacade.m
Original file line number Diff line number Diff line change
Expand Up @@ -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];
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,33 @@ + (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 WPAnalyticsStatLoginSocialErrorUnknownUser:
eventName = @"login_social_error_unknown_user";
break;
case WPAnalyticsStatLogout:
eventName = @"account_logout";
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}


Expand Down
25 changes: 16 additions & 9 deletions WordPress/Classes/ViewRelated/NUX/LoginEmailViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ class LoginEmailViewController: LoginViewController, SigninKeyboardResponder {
GIDSignIn.sharedInstance().serverClientID = ApiCredentials.googleLoginServerClientId()

GIDSignIn.sharedInstance().signIn()

WPAppAnalytics.track(.loginSocialButtonClick)
}


Expand Down Expand Up @@ -338,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
Expand Down Expand Up @@ -441,6 +444,7 @@ extension LoginEmailViewController {
syncWPCom(username, authToken: authToken, requiredMultifactor: false)
// Disconnect now that we're done with Google.
GIDSignIn.sharedInstance().disconnect()
WPAppAnalytics.track(.loginSocialSuccess)
}


Expand All @@ -452,6 +456,7 @@ extension LoginEmailViewController {
loginFields.emailAddress = email

performSegue(withIdentifier: NUXAbstractViewController.SegueIdentifier.showWPComLogin, sender: self)
WPAppAnalytics.track(.loginSocialAccountsNeedConnecting)
}


Expand All @@ -460,19 +465,23 @@ 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
configureViewLoading(false)
return
let token = user.authentication.idToken,
let email = user.profile.email else {
// The Google SignIn for may have been canceled.
if let err = error {
WPAppAnalytics.track(.loginSocialButtonFailure, error: err)
} else {
WPAppAnalytics.track(.loginSocialButtonFailure)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will track a failure by dismissing either the permission alert or Google login screens. Is that intentional?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is. The documentation of the corresponding event on the web mentions that it tracks just dismissing the popup modal. I wired it this way for consistency.

}
configureViewLoading(false)
return
}

// Store the email address and token.
Expand All @@ -481,8 +490,6 @@ extension LoginEmailViewController: GIDSignInDelegate {
loginFields.meta.socialServiceIDToken = token

loginFacade.loginToWordPressDotCom(withGoogleIDToken: token)

//TODO: Add analytis
}
}

Expand Down
4 changes: 3 additions & 1 deletion WordPress/Classes/ViewRelated/NUX/LoginViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 9 additions & 0 deletions WordPressShared/WordPressShared/Core/Analytics/WPAnalytics.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,15 @@ typedef NS_ENUM(NSUInteger, WPAnalyticsStat) {
WPAnalyticsStatLoginURLFormViewed,
WPAnalyticsStatLoginURLHelpScreenViewed,
WPAnalyticsStatLoginUsernamePasswordFormViewed,
WPAnalyticsStatLoginSocialButtonClick,
WPAnalyticsStatLoginSocialButtonFailure,
WPAnalyticsStatLoginSocialConnectSuccess,
WPAnalyticsStatLoginSocialConnectFailure,
WPAnalyticsStatLoginSocialSuccess,
WPAnalyticsStatLoginSocialFailure,
WPAnalyticsStatLoginSocial2faNeeded,
WPAnalyticsStatLoginSocialAccountsNeedConnecting,
WPAnalyticsStatLoginSocialErrorUnknownUser,
WPAnalyticsStatLogout,
WPAnalyticsStatLowMemoryWarning,
WPAnalyticsStatMediaLibraryDeletedItems,
Expand Down