If you experience issues where user attributes or events get confused between users during the login process, especially when setting user attributes or sending an event (which might be an event for a new user right after login), you can follow this guide.
The main cause of this issue is the asynchronous nature of the login method, which leads to a race condition between the user attributes and events set during the login process. As a result, these events or attributes get mixed up between users.
When the login method is triggered and the login process progresses asynchronously, this information gets confused between users if an attribute and event are set.
To solve this problem, you must use the second variant of our login method. In this second variant, you can use the callback/completion block provided as a parameter to the function to understand that the login process has been completed before setting the new user's activities and attributes, and move these operations to the callback/completion block.
Below, you can see the incorrect codes and corrections:
React Native
// Incorrect code
let currentUser = RNInsider.getCurrentUser();
currentUser
.setName("Insider")
.setSurname("Demo")
.setAge(23)
.setGender(InsiderGender.Other)
.setBirthday(new Date())
.setEmailOptin(true)
.setSMSOptin(false)
.setPushOptin(true)
.setLocationOptin(true)
.setFacebookID("Facebook-ID")
.setTwitterID("Twittter-ID")
.setLanguage("EN")
.setLocale("en_US");
RNInsider.tagEvent("login").build();
let identifiers = new RNInsiderIdentifier();
identifiers.addEmail("mobile.test@useinsider.com");
identifiers.addPhoneNumber("+659876543210");
identifiers.addUserID("{crmID}");
currentUser.login(identifiers);
// New corrected code
let currentUser = RNInsider.getCurrentUser();
let identifiers = new RNInsiderIdentifier();
identifiers.addEmail("mobile.test@useinsider.com");
identifiers.addPhoneNumber("+659876543210");
identifiers.addUserID("{crmID}");
currentUser.login(identifiers, (insiderID) => {
RNInsider.getCurrentUser()
.setName("Insider")
.setSurname("Demo")
.setAge(23)
.setGender(InsiderGender.Other)
.setBirthday(new Date())
.setEmailOptin(true)
.setSMSOptin(false)
.setPushOptin(true)
.setLocationOptin(true)
.setFacebookID("Facebook-ID")
.setTwitterID("Twittter-ID")
.setLanguage("EN")
.setLocale("en_US");
RNInsider.tagEvent("login").build();
});Flutter
// Incorrect code
FlutterInsiderUser currentUser = FlutterInsider.Instance.getCurrentUser()!;
currentUser.setName("Insider");
currentUser.setSurname("Demo");
currentUser.setAge(23);
currentUser.setGender(InsiderGender.OTHER);
currentUser.setBirthday(new DateTime.now());
currentUser.setEmailOptin(true);
currentUser.setSMSOptin(false);
currentUser.setPushOptin(true);
currentUser.setLocationOptin(true);
currentUser.setFacebookID("Facebook-ID");
currentUser.setTwitterID("Twittter-ID");
currentUser.setLanguage("EN");
currentUser.setLocale("en_US");
FlutterInsider.Instance.tagEvent("login").build();
FlutterInsiderIdentifiers identifiers = new FlutterInsiderIdentifiers();
identifiers.addEmail("mobile.test@useinsider.com");
identifiers.addPhoneNumber("+659876543210");
identifiers.addUserID("{crmID}");
currentUser.login(identifiers);
// New corrected code
FlutterInsiderUser currentUser = FlutterInsider.Instance.getCurrentUser()!;
FlutterInsiderIdentifiers identifiers = new FlutterInsiderIdentifiers();
identifiers.addEmail("mobile.test@useinsider.com");
identifiers.addPhoneNumber("+659876543210");
identifiers.addUserID("{crmID}");
currentUser.login(identifiers, insiderIDResult: (insiderID) {
FlutterInsiderUser newUser = FlutterInsider.Instance.getCurrentUser()!;
newUser.setName("Insider");
newUser.setSurname("Demo");
newUser.setAge(23);
newUser.setGender(InsiderGender.OTHER);
newUser.setBirthday(new DateTime.now());
newUser.setEmailOptin(true);
newUser.setSMSOptin(false);
newUser.setPushOptin(true);
newUser.setLocationOptin(true);
newUser.setFacebookID("Facebook-ID");
newUser.setTwitterID("Twittter-ID");
newUser.setLanguage("EN");
newUser.setLocale("en_US");
FlutterInsider.Instance.tagEvent("login").build();
});Cordova
// Incorrect code
let currentUser = window.Insider.getCurrentUser();
currentUser.setName("John")
.setSurname("Doe")
.setAge(23)
.setGender(Insider.gender.FEMALE)
.setBirthday(new Date())
.setEmailOptin(true)
.setSMSOptin(true)
.setPushOptin(true)
.setLocationOptin(true)
.setWhatsappOptin(true)
.setFacebookID("Facebook-ID")
.setTwitterID("Twittter-ID")
.setLanguage("EN")
.setLocale("en_US");
window.Insider.tagEvent("login").build();
let identifiers = Insider.identifier();
identifiers.addEmail("mobile.test@useinsider.com");
identifiers.addPhoneNumber("+659876543210");
identifiers.addUserID("{crmID}");
currentUser.login(identifiers.getIdentifiers());
// New corrected code
let currentUser = window.Insider.getCurrentUser();
let identifiers = Insider.identifier();
identifiers.addEmail("mobile.test@useinsider.com");
identifiers.addPhoneNumber("+659876543210");
identifiers.addUserID("{crmID}");
currentUser.login(identifiers.getIdentifiers(), (insiderID) => () => {
window.Insider.getCurrentUser().setName("John")
.setSurname("Doe")
.setAge(23)
.setGender(Insider.gender.FEMALE)
.setBirthday(new Date())
.setEmailOptin(true)
.setSMSOptin(true)
.setPushOptin(true)
.setLocationOptin(true)
.setWhatsappOptin(true)
.setFacebookID("Facebook-ID")
.setTwitterID("Twittter-ID")
.setLanguage("EN")
.setLocale("en_US");
window.Insider.tagEvent("login").build();
});Java
// Incorrect code
InsiderUser currentUser = Insider.Instance.getCurrentUser();
currentUser.setName("Insider")
.setSurname("Demo")
.setAge(23)
.setGender(InsiderGender.OTHER)
.setBirthday((new Date()))
.setEmailOptin(true)
.setSMSOptin(false)
.setPushOptin(true)
.setLocationOptin(true)
.setFacebookID("Facebook-ID")
.setTwitterID("Twitter-ID")
.setLanguage("EN")
.setLocale("en_US");
Insider.Instance.tagEvent("login").build();
InsiderIdentifiers identifiers = new InsiderIdentifiers();
identifiers.addEmail("mobile.test@useinsider.com");
identifiers.addPhoneNumber("+659876543210");
identifiers.addUserID("{crmID}");
currentUser.login(identifiers);
// New corrected code
InsiderUser currentUser = Insider.Instance.getCurrentUser();
InsiderIdentifiers identifiers = new InsiderIdentifiers();
identifiers.addEmail("mobile.test@useinsider.com");
identifiers.addPhoneNumber("+659876543210");
identifiers.addUserID("{crmID}");
currentUser.login(identifiers, insiderID -> {
currentUser.setName("Insider")
.setSurname("Demo")
.setAge(23)
.setGender(InsiderGender.OTHER)
.setBirthday((new Date()))
.setEmailOptin(true)
.setSMSOptin(false)
.setPushOptin(true)
.setLocationOptin(true)
.setFacebookID("Facebook-ID")
.setTwitterID("Twitter-ID")
.setLanguage("EN")
.setLocale("en_US");
Insider.Instance.tagEvent("login").build();
});Objective-C
// Incorrect code
InsiderUser *currentUser = [Insider getCurrentUser];
currentUser.setName(@"Insider")
.setSurname(@"Demo")
.setAge(23)
.setGender(InsiderGenderOther)
.setBirthday([NSDate date])
.setEmailOptin(true)
.setSMSOptin(false)
.setPushOptin(true)
.setLocationOptin(true)
.setFacebookID(@"Facebook-ID")
.setTwitterID(@"Twittter-ID")
.setLanguage(@"EN")
.setLocale(@"en_US");
[[Insider tagEvent:@"login"] build];
InsiderIdentifiers *identifiers = [[InsiderIdentifiers alloc] init];
identifiers.addEmail(@"mobile.test@useinsider.com")
.addPhoneNumber(@"+659876543210")
.addUserID(@"{crmID}");
[currentUser login:identifiers];
// New corrected code
InsiderUser *currentUser = [Insider getCurrentUser];
InsiderIdentifiers *identifiers = [[InsiderIdentifiers alloc] init];
identifiers.addEmail(@"mobile.test@useinsider.com")
.addPhoneNumber(@"+659876543210")
.addUserID(@"{crmID}");
[currentUser login:identifiers
insiderIDResult:^(NSString *insiderID) {
currentUser.setName(@"Insider")
.setSurname(@"Demo")
.setAge(23)
.setGender(InsiderGenderOther)
.setBirthday([NSDate date])
.setEmailOptin(true)
.setSMSOptin(false)
.setPushOptin(true)
.setLocationOptin(true)
.setFacebookID(@"Facebook-ID")
.setTwitterID(@"Twittter-ID")
.setLanguage(@"EN")
.setLocale(@"en_US");
[[Insider tagEvent:@"login"] build];
}];Swift
// Incorrect code
let currentUser = Insider.getCurrentUser()
currentUser?.setName()("Insider")?
.setSurname()("Demo")?
.setAge()(23)?
.setGender()(InsiderGender.other)?
.setBirthday()(Date())?
.setEmailOptin()(true)?
.setSMSOptin()(false)?
.setPushOptin()(true)?
.setLocationOptin()(true)?
.setFacebookID()("Facebook-ID")?
.setTwitterID()("Twittter-ID")?
.setLanguage()("EN")?
.setLocale()("en_US")
Insider.tagEvent("login").build()
let identifiers = InsiderIdentifiers()
.addEmail()("mobile@useinsider.com")?
.addPhoneNumber()("+659876543210")?
.addUserID()("{crmID}")
currentUser?.login(identifiers)
// New corrected code
let currentUser = Insider.getCurrentUser()
let identifiers = InsiderIdentifiers()
.addEmail()("mobile@useinsider.com")?
.addPhoneNumber()("+651234567")?
.addUserID()("CRM-ID")
currentUser?.login(
identifiers,
insiderIDResult: { insiderID in
currentUser?.setName()("Insider")?
.setSurname()("Demo")?
.setAge()(23)?
.setGender()(InsiderGender.other)?
.setBirthday()(Date())?
.setEmailOptin()(true)?
.setSMSOptin()(false)?
.setPushOptin()(true)?
.setLocationOptin()(true)?
.setFacebookID()("Facebook-ID")?
.setTwitterID()("Twittter-ID")?
.setLanguage()("EN")?
.setLocale()("en_US")
Insider.tagEvent("login").build()
})