Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🗑️ Removed onCompletion handlers #854

Open
wants to merge 4 commits into
base: feature/itbl_track_anon_user
Choose a base branch
from
Open
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
6 changes: 4 additions & 2 deletions swift-sdk/Internal/AuthManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,12 @@ class AuthManager: IterableAuthManagerProtocol {
return isLastAuthTokenValid && !shouldIgnoreRetryPolicy
}

func setNewToken(_ newToken: String) {
func setNewToken(_ newToken: String, onCompletion: @escaping (String?) -> Void) {
ITBInfo()

onAuthTokenReceived(retrievedAuthToken: newToken)
onAuthTokenReceived(retrievedAuthToken: newToken) { token in
onCompletion(token)
}
}

func logoutUser() {
Expand Down
108 changes: 49 additions & 59 deletions swift-sdk/Internal/InternalIterableAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,10 @@ final class InternalIterableAPI: NSObject, PushTrackerProtocol, AuthProvider {
func setEmail(_ email: String?, authToken: String? = nil, successHandler: OnSuccessHandler? = nil, failureHandler: OnFailureHandler? = nil, identityResolution: IterableIdentityResolution? = nil) {

ITBInfo()
self.identityResolution = identityResolution
self._successCallback = successHandler
self._failureCallback = failureHandler

if self._email == email && email != nil {
self.checkAndUpdateAuthToken(authToken)
return
Expand All @@ -146,34 +150,20 @@ final class InternalIterableAPI: NSObject, PushTrackerProtocol, AuthProvider {

self._email = email
self._userId = nil

self.onLogin(authToken) { [weak self] in
guard let config = self?.config else {
return
}
let merge = identityResolution?.mergeOnAnonymousToKnown ?? config.identityResolution.mergeOnAnonymousToKnown
let replay = identityResolution?.replayOnVisitorToKnown ?? config.identityResolution.replayOnVisitorToKnown
if config.enableAnonActivation, let email = email {
self?.attemptAndProcessMerge(
merge: merge ?? true,
replay: replay ?? true,
destinationUser: email,
isEmail: true,
failureHandler: failureHandler
)
self?.localStorage.userIdAnnon = nil
}
}


self._successCallback = successHandler
self._failureCallback = failureHandler
self.localStorage.userIdAnnon = nil

self.storeIdentifierData()
self.onLogin(authToken)
}

func setUserId(_ userId: String?, authToken: String? = nil, successHandler: OnSuccessHandler? = nil, failureHandler: OnFailureHandler? = nil, isAnon: Bool = false, identityResolution: IterableIdentityResolution? = nil) {
ITBInfo()

self.identityResolution = identityResolution
self._successCallback = successHandler
self._failureCallback = failureHandler

if self._userId == userId && userId != nil {
self.checkAndUpdateAuthToken(authToken)
return
Expand All @@ -188,32 +178,12 @@ final class InternalIterableAPI: NSObject, PushTrackerProtocol, AuthProvider {
self._email = nil
self._userId = userId

self.onLogin(authToken) { [weak self] in
guard let config = self?.config else {
return
}
if config.enableAnonActivation {
if let userId = userId, userId != (self?.localStorage.userIdAnnon ?? "") {
let merge = identityResolution?.mergeOnAnonymousToKnown ?? config.identityResolution.mergeOnAnonymousToKnown
let replay = identityResolution?.replayOnVisitorToKnown ?? config.identityResolution.replayOnVisitorToKnown
self?.attemptAndProcessMerge(
merge: merge ?? true,
replay: replay ?? true,
destinationUser: userId,
isEmail: false,
failureHandler: failureHandler
)
}

if !isAnon {
self?.localStorage.userIdAnnon = nil
}
}
if !isAnon {
self.localStorage.userIdAnnon = nil
}

self._successCallback = successHandler
self._failureCallback = failureHandler
self.storeIdentifierData()
self.onLogin(authToken)

}

Expand Down Expand Up @@ -652,6 +622,7 @@ final class InternalIterableAPI: NSObject, PushTrackerProtocol, AuthProvider {
private var _email: String?
private var _payloadData: [AnyHashable: Any]?
private var _userId: String?
private var identityResolution: IterableIdentityResolution?
private var _successCallback: OnSuccessHandler? = nil
private var _failureCallback: OnFailureHandler? = nil

Expand Down Expand Up @@ -746,34 +717,35 @@ final class InternalIterableAPI: NSObject, PushTrackerProtocol, AuthProvider {
localStorage.userId = _userId
}

private func onLogin(_ authToken: String? = nil, onloginSuccess onloginSuccessCallBack: (()->())? = nil) {
guard isSDKInitialized() else { return }

private func onLogin(_ authToken: String? = nil) {
guard isSDKInitialized() else { return }
ITBInfo()

self.authManager.pauseAuthRetries(false)

if let authToken {
self.authManager.setNewToken(authToken)
completeUserLogin(onloginSuccessCallBack: onloginSuccessCallBack)
self.authManager.setNewToken(authToken) { [weak self] token in
guard let self else { return }

self.completeUserLogin(with: token)
}
} else if isEitherUserIdOrEmailSet() && config.authDelegate != nil {
requestNewAuthToken(onloginSuccessCallBack: onloginSuccessCallBack)
requestNewAuthToken()
} else {
completeUserLogin(onloginSuccessCallBack: onloginSuccessCallBack)
completeUserLogin()
}
}

private func requestNewAuthToken(onloginSuccessCallBack: (()->())? = nil) {
private func requestNewAuthToken() {
ITBInfo()

authManager.requestNewAuthToken(hasFailedPriorAuth: false, onSuccess: { [weak self] token in
if token != nil {
self?.completeUserLogin(onloginSuccessCallBack: onloginSuccessCallBack)
}
self?.completeUserLogin(with: token)
}, shouldIgnoreRetryPolicy: true)
}

private func completeUserLogin(onloginSuccessCallBack: (()->())? = nil) {
ITBInfo()
private func completeUserLogin(with token: String? = nil) {
ITBInfo()
guard isSDKInitialized() else { return }

if config.autoPushRegistration {
Expand All @@ -783,8 +755,26 @@ final class InternalIterableAPI: NSObject, PushTrackerProtocol, AuthProvider {
}

_ = inAppManager.scheduleSync()
if onloginSuccessCallBack != nil {
onloginSuccessCallBack!()

if config.authDelegate == nil || token != nil {
attemptMergeAndEventReplay()
}
}

private func attemptMergeAndEventReplay() {
let merge = identityResolution?.mergeOnAnonymousToKnown ?? config.identityResolution.mergeOnAnonymousToKnown
let replay = identityResolution?.replayOnVisitorToKnown ?? config.identityResolution.replayOnVisitorToKnown

let destinationUser = email ?? userId ?? nil

if config.enableAnonActivation {
self.attemptAndProcessMerge(
merge: merge ?? true,
replay: replay ?? true,
destinationUser: destinationUser,
isEmail: email != nil,
failureHandler: self._failureCallback
)
}
}

Expand Down
2 changes: 1 addition & 1 deletion swift-sdk/IterableAuthManagerProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import Foundation
func resetFailedAuthCount()
func requestNewAuthToken(hasFailedPriorAuth: Bool, onSuccess: ((String?) -> Void)?, shouldIgnoreRetryPolicy: Bool)
func scheduleAuthTokenRefreshTimer(interval: TimeInterval, isScheduledRefresh: Bool, successCallback: AuthTokenRetrievalHandler?)
func setNewToken(_ newToken: String)
func setNewToken(_ newToken: String, onCompletion: @escaping (String?) -> Void)
func logoutUser()
func handleAuthFailure(failedAuthToken: String?, reason: AuthFailureReason)
func pauseAuthRetries(_ pauseAuthRetry: Bool)
Expand Down
2 changes: 1 addition & 1 deletion tests/common/MockAuthManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class MockAuthManager: IterableAuthManagerProtocol {

}

func setNewToken(_ newToken: String) {
func setNewToken(_ newToken: String, onCompletion: @escaping (String?) -> Void) {

}

Expand Down
Loading