🎉 UserExperior is now part of DevRev  |  Learn more

UserExperior’s 3rd party integration enables you to integrate UserExperior with industry-leading quantitative analytics tools. This integration enables you to look at both quantitative and qualitative data inside your analytics tool.

NOTE: We currently support only Native Android and iOS.

Amplitude

Integration

1. Switch On the Amplitude in UserExperior Settings

Go to UserExperior Dashboard > Go to your app folder > Go to Settings > Select Integrations > Switch On Amplitude

Note: Make sure to switch on the integration for the respective platform i.e. for the Android and the iOS.

2. Add UserExperior Listener/ Delegate immediately after startRecording:

Note: In case of more than one 3rd party integrations, reuse the Listener/ Delegate mentioned below.

Android

Add following code in onCreate method of every launcher activity.

UserExperior.startRecording(getApplicationContext(), "your-version-key-here");

// UserExperior Listener: Third Party Integration
UserExperior.setUserExperiorListener(new UserExperiorListener() {
 @Override
 public void onUserExperiorStarted() {
     // Sending UserExperior Session URL to Amplitude
     String ueSessionUrl = UserExperior.getSessionUrl("Amplitude");

     JSONObject eventProperties = new JSONObject();
     try{
       eventProperties.put("UE_Session_URL", ueSessionUrl);
     } catch (JSONException exception) {
     }
     Amplitude.getInstance().logEvent("UE_Session_URL", eventProperties);
 }
});
iOS
Swift
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.swift`
    class AppDelegate: UIResponder, UIApplicationDelegate, UserExperiorDelegate {
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UserExperior.initialize("USER_KEY")

    // Step 2: Setting delegate after UserExperior initialize
        UserExperior.setDelegate(self)
        return true
    }

  // Step 3: Implement UserExperiorDelegate protocol
    func userExperiorSessionDidStart() {
        let sessionURL = UserExperior.getSessionUrl("Amplitude") // "Amplitude" is the key used to identify Amplitude
        Amplitude.instance()?.logEvent("UE_Session_URL", withEventProperties: ["UE_Session_URL": sessionURL])
    }
Objective-C
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.m`
    @interface AppDelegate () <UserExperiorDelegate>
    @end

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        [UserExperior initialize:@"USER_KEY"];

    // Step 2: Setting delegate after UserExperior initialize
        [UserExperior setDelegate:self];
        return YES;
    }

   // Step 3: Implement UserExperiorDelegate protocol
    - (void)userExperiorSessionDidStart {
        NSString *sessionURL = [UserExperior getSessionUrl:@"Amplitude"]; // "Amplitude" is the key used to identify Amplitude
        [[Amplitude instance] logEvent:@"UE_Session_URL" withEventProperties:@{@"UE_Session_URL": sessionURL}];
    }
React-Native
// Import the following(App.js)
import UserExperior from 'react-native-userexperior';
import { NativeModules, NativeEventEmitter } from 'react-native';

// UserExperior Initialization
UserExperior.startRecording('your-version-key-here');
// Add listener
const emitter = new NativeEventEmitter(NativeModules.UserExperior);
this.userExperiorListener = emitter.addListener('ON_USER_EXPERIOR_STARTED', async (status) => {
 if (status) {
   let sessionUrl = await UserExperior.getSessionUrl('Amplitude');
   // Send session URL to Amplitude
 }
});

UserExperior URL in Amplitude

After completing the integration, every Amplitude session will contain an event called "UE_Session_URL". You can just copy and paste the URL in your browser's window that will open the session in the UserExperior Dashboard. If the session was recorded you will be able to replay it in the UserExperior Dashboard.

AppsFlyer

Integration

1. Switch On the AppsFlyer in UserExperior Settings

Go to UserExperior Dashboard > Go to your app folder > Go to Settings > Select Integrations > Switch On AppsFlyer

Note: Make sure to switch on the integration for the respective platform i.e. for the Android and the iOS.

2. Add UserExperior Listener/ Delegate immediately after startRecording:

Note: In case of more than one 3rd party integrations, reuse the Listener/ Delegate mentioned below.

Android

Add the following code in the onCreate method of every launcher activity.

UserExperior.startRecording(getApplicationContext(), "your-version-key-here");

// UserExperior Listener: Third Party Integration
UserExperior.setUserExperiorListener(new UserExperiorListener() {
 @Override
 public void onUserExperiorStarted() {
     // Sending UserExperior Session URL to Mixpanel
     String ueSessionUrl = UserExperior.getSessionUrl("AppsFlyer");

     HashMap<String, Object> map = new HashMap<String, Object>();
     map.put("UE_Session_URL", ueSessionUrl);
     AppsFlyerLib.getInstance().trackEvent(getApplicationContext(), "UE_Session_URL", map);
 }
});
iOS
Swift
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.swift`
    class AppDelegate: UIResponder, UIApplicationDelegate, UserExperiorDelegate {
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UserExperior.initialize("USER_KEY")

    // Step 2: Setting delegate after UserExperior initialize
        UserExperior.setDelegate(self)
        return true
    }

  // Step 3: Implement UserExperiorDelegate protocol
    func userExperiorSessionDidStart() {
        let sessionURL = UserExperior.getSessionUrl("AppsFlyer") // "AppsFlyer" is the key used to identify Apps Flyer
        AppsFlyerLib.shared().logEvent("UE_Session_URL", withValues: ["UE_Session_URL": af_sessionURL])
    }
Objective-C
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.m`
    @interface AppDelegate () <UserExperiorDelegate>
    @end

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        [UserExperior initialize:@"USER_KEY"];

    // Step 2: Setting delegate after UserExperior initialize
        [UserExperior setDelegate:self];
        return YES;
    }

   // Step 3: Implement UserExperiorDelegate protocol
    - (void)userExperiorSessionDidStart {
        NSString *sessionURL = [UserExperior getSessionUrl:@"AppsFlyer"]; // "AppsFlyer" is the key used to identify Apps Flyer
        [[AppsFlyerLib shared] logEvent: @"UE_Session_URL" withValues:@{@"UE_Session_URL": sessionURL}];
    }
React-Native
// Import the following(App.js)
import UserExperior from 'react-native-userexperior';
import { NativeModules, NativeEventEmitter } from 'react-native';

// UserExperior Initialization
UserExperior.startRecording('your-version-key-here');
// Add listener
const emitter = new NativeEventEmitter(NativeModules.UserExperior);
this.userExperiorListener = emitter.addListener('ON_USER_EXPERIOR_STARTED', async (status) => {
 if (status) {
   let sessionUrl = await UserExperior.getSessionUrl('AppsFlyer');
   // Send session URL to AppsFlyer
 }
});

UserExperior URL in AppsFlyer

After completing the integration, every AppsFlyer session will contain an event called "UE_Session_URL". You can just copy and paste the URL in your browser's window that will open the session in the UserExperior Dashboard. If the session was recorded you will be able to replay it in the UserExperior Dashboard.

Apptimize

Integration

1. Switch On the Apptimize in UserExperior Settings

Go to UserExperior Dashboard > Go to your app folder > Go to Settings > Select Integrations > Switch On Apptimize

Note: Make sure to switch on the integration for the respective platform i.e. for the Android and the iOS.

2. Add UserExperior Listener/ Delegate immediately after startRecording:

Note: In case of more than one 3rd party integrations, reuse the Listener/ Delegate mentioned below.

Android

Add the following code in the onCreate method of every launcher activity.

UserExperior.startRecording(getApplicationContext(), "your-version-key-here");

// UserExperior Listener: Third Party Integration
UserExperior.setUserExperiorListener(new UserExperiorListener() {
 @Override
 public void onUserExperiorStarted() {
     // Sending UserExperior Session URL to Apptimize
     String ueSessionUrl = UserExperior.getSessionUrl("Apptimize");        
     Apptimize.track("UE_Session_URL :" + ueSessionUrl);
 }
});
iOS
Swift
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.swift`
    class AppDelegate: UIResponder, UIApplicationDelegate, UserExperiorDelegate {
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UserExperior.initialize("USER_KEY")

    // Step 2: Setting delegate after UserExperior initialize
        UserExperior.setDelegate(self)
        return true
    }

  // Step 3: Implement UserExperiorDelegate protocol
    func userExperiorSessionDidStart() {
        let sessionURL = UserExperior.getSessionUrl("Apptimize") // "Apptimize" is the key used to identify Apptimize
        Apptimize.track("UE_Session_URL", value: sessionURL)
    }
Objective-C
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.m`
    @interface AppDelegate () <UserExperiorDelegate>
    @end

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        [UserExperior initialize:@"USER_KEY"];

    // Step 2: Setting delegate after UserExperior initialize
        [UserExperior setDelegate:self];
        return YES;
    }

   // Step 3: Implement UserExperiorDelegate protocol
    - (void)userExperiorSessionDidStart {
        NSString *sessionURL = [UserExperior getSessionUrl:@"Apptimize"]; // "Apptimize" is the key used to identify Apptimize
        [Apptimize track:@"UE_Session_URL" value:sessionURL];
    }
React-Native
// Import the following(App.js)
import UserExperior from 'react-native-userexperior';
import { NativeModules, NativeEventEmitter } from 'react-native';

// UserExperior Initialization
UserExperior.startRecording('your-version-key-here');
// Add listener
const emitter = new NativeEventEmitter(NativeModules.UserExperior);
this.userExperiorListener = emitter.addListener('ON_USER_EXPERIOR_STARTED', async (status) => {
 if (status) {
   let sessionUrl = await UserExperior.getSessionUrl('Apptimize');
   // Send session URL to Apptimize
 }
});

UserExperior URL in Apptimize

After completing the integration, every Apptimize session will contain an event called "UE_Session_URL". You can just copy and paste the URL in your browser's window that will open the session in the UserExperior Dashboard. If the session was recorded you will be able to replay it in the UserExperior Dashboard.

CleverTap

Integration

1. Switch On theCleverTap in UserExperior Settings

Go to UserExperior Dashboard > Go to your app folder > Go to Settings > Select Integrations > Switch On CleverTap

Note: Make sure to switch on the integration for the respective platform i.e. for the Android and the iOS.

2. Add UserExperior Listener/ Delegate immediately after startRecording:

Note: In case of more than one 3rd party integrations, reuse the Listener/ Delegate mentioned below.

Android

Add the following code in the onCreate method of every launcher activity.

UserExperior.startRecording(getApplicationContext(), "your-version-key-here");

// UserExperior Listener: Third Party Integration
UserExperior.setUserExperiorListener(new UserExperiorListener() {
 @Override
 public void onUserExperiorStarted() {
     // Sending UserExperior Session URL to CleverTap
     String ueSessionUrl = UserExperior.getSessionUrl("CleverTap");
     HashMap<String, Object> cleverTapUeMap = new HashMap<String, Object>();
     cleverTapUeMap.put("UE_Session_URL", ueSessionUrl);
     private CleverTapAPI cleverTapDefaultInstance = CleverTapAPI.getDefaultInstance(this);
     if (cleverTapDefaultInstance != null) {
         clevertapDefaultInstance.pushEvent("UE_Session_URL", cleverTapUeMap);
     }
 }
});
iOS
Swift
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.swift`
    class AppDelegate: UIResponder, UIApplicationDelegate, UserExperiorDelegate {
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UserExperior.initialize("USER_KEY")

    // Step 2: Setting delegate after UserExperior initialize
        UserExperior.setDelegate(self)
        return true
    }

  // Step 3: Implement UserExperiorDelegate protocol
    func userExperiorSessionDidStart() {
        let sessionURL = UserExperior.getSessionUrl("CleverTap") // "CleverTap" is the key used to identify Cleaver tap
        CleverTap.sharedInstance()?.recordEvent("UE_Session_URL", withProps: ["UE_Session_URL": sessionURL])
    }
Objective-C
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.m`
    @interface AppDelegate () <UserExperiorDelegate>
    @end

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        [UserExperior initialize:@"USER_KEY"];

    // Step 2: Setting delegate after UserExperior initialize
        [UserExperior setDelegate:self];
        return YES;
    }

   // Step 3: Implement UserExperiorDelegate protocol
    - (void)userExperiorSessionDidStart {
        NSString *sessionURL = [UserExperior getSessionUrl:@"CleverTap"]; // "CleverTap" is the key used to identify Cleaver tap
        [[CleverTap sharedInstance] recordEvent:@"UE_Session_URL" withProps:@{@"UE_Session_URL": sessionURL}];
    }
React-Native
// Import the following(App.js)
import UserExperior from 'react-native-userexperior';
import { NativeModules, NativeEventEmitter } from 'react-native';

// UserExperior Initialization
UserExperior.startRecording('your-version-key-here');
// Add listener
const emitter = new NativeEventEmitter(NativeModules.UserExperior);
this.userExperiorListener = emitter.addListener('ON_USER_EXPERIOR_STARTED', async (status) => {
 if (status) {
   let sessionUrl = await UserExperior.getSessionUrl('CleverTap');
   // Send session URL to CleverTap
 }
});

UserExperior URL in CleverTap

After completing the integration, every CleverTap session will contain an event called "UE_Session_URL". You can just copy and paste the URL in your browser's window that will open the session in the UserExperior Dashboard. If the session was recorded you will be able to replay it in the UserExperior Dashboard.

Go to Analytics > Events > Select Events. Enter UE_Session_URL and click on View details

Select Trends and properties

Under Event Property select UE_Session URL and click on list view

Firebase Crashlytics

Integration

1. Switch On the Firebase Crashlytics in UserExperior Settings

Go to UserExperior Dashboard > Go to your app folder > Go to Settings > Select Integrations > Switch On Firebase Crashlytics

Note: Make sure to switch on the integration for the respective platform i.e. for the Android and the iOS.

2. Add UserExperior Listener/ Delegate immediately after startRecording:

Note: In case of more than one 3rd party integrations, reuse the Listener/ Delegate mentioned below.

Android

Add the following code in the onCreate method of every launcher activity.

 UserExperior.startRecording(getApplicationContext(), "your-version-key-here");

// UserExperior Listener: Third Party Integration
UserExperior.setUserExperiorListener(new UserExperiorListener() {
 @Override
 public void onUserExperiorStarted() {
     // Sending UserExperior Session URL to Firebase Crashlytics
     String ueSessionUrlFC = UserExperior.getSessionUrl("FirebaseCrashlytics");
     if(ueSessionUrlFC != null) {
         FirebaseCrashlytics.getInstance().setCustomKey("UE_Session_URL", ueSessionUrlFC);
     }
 }
});
iOS
Swift
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.swift`
    class AppDelegate: UIResponder, UIApplicationDelegate, UserExperiorDelegate {
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UserExperior.initialize("USER_KEY")

    // Step 2: Setting delegate after UserExperior initialize
        UserExperior.setDelegate(self)
        return true
    }

  // Step 3: Implement UserExperiorDelegate protocol
    func userExperiorSessionDidStart() {
        let sessionURL = UserExperior.getSessionUrl("FirebaseCrashlytics") // "FirebaseCrashlytics" is the key used for firebase craslytics
        Crashlytics.crashlytics().setCustomValue(sessionURL, forKey: "UE_Session_URL")
    }
Objective-C
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.m`
    @interface AppDelegate () <UserExperiorDelegate>
    @end

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        [UserExperior initialize:@"USER_KEY"];

    // Step 2: Setting delegate after UserExperior initialize
        [UserExperior setDelegate:self];
        return YES;
    }

   // Step 3: Implement UserExperiorDelegate protocol
    - (void)userExperiorSessionDidStart {
        NSString *sessionURL = [UserExperior getSessionUrl:@"FirebaseCrashlytics"]; // "FirebaseCrashlytics" is the key used for firebase craslytics
        [[FIRCrashlytics crashlytics] setCustomValue:sessionURL forKey:@"UE_Session_URL"];
    }
React-Native

//Import the following(App.js)
import UserExperior from 'react-native-userexperior';
import crashlytics from '@react-native-firebase/crashlytics';
import { NativeModules, NativeEventEmitter } from 'react-native';

// UserExperior Initialization
UserExperior.startRecording('your-version-key-here');

// Add listener
const emitter = new NativeEventEmitter(NativeModules.UserExperior);
this.userExperiorListener = emitter.addListener('ON_USER_EXPERIOR_STARTED', async (status) => {
 if (status) {
   let sessionUrl = await UserExperior.getSessionUrl('FirebaseCrashlytics');
   if (sessionUrl != '') {
     crashlytics().setAttribute('UE_SESSION_URL', sessionUrl);
   } else {
     console.log('SessionUrl empty');
   }
 }
});

UserExperior URL in Firebase Crashlytics

After completing the integration, every Crashlytics crash log will contain a key called "UE Session URL". You can just copy and paste the URL in your browser's window that will open the session in the UserExperior Dashboard. If the session was recorded you will be able to replay it in the UserExperior Dashboard.

Go to Firebase Console > Go to your app folder > Crashlytics > Click on the crash you want to debug > Click on the Keys

Firebase Google Analytics

Integration

1. Switch On the Firebase Google Analytics in UserExperior Settings

Go to UserExperior Dashboard > Go to your app folder > Go to Settings > Select Integrations > Switch On Firebase Google Analytics

Note: Make sure to switch on the integration for the respective platform i.e. for the Android and the iOS.

2. Add UserExperior Listener/ Delegate immediately after startRecording:

Note: In case of more than one 3rd party integrations, reuse the Listener/ Delegate mentioned below.

Android

Add the following code in the onCreate method of every launcher activity.

UserExperior.startRecording(getApplicationContext(), "your-version-key-here");

// UserExperior Listener: Third Party Integration
UserExperior.setUserExperiorListener(new UserExperiorListener() {
 @Override
 public void onUserExperiorStarted() {
     // Sending UserExperior Session URL to Firebase Google Analytics
     String ueSessionUrl = UserExperior.getSessionUrl("FirebaseGoogleAnalytics");

     Bundle params = new Bundle();
     params.putString("UE_Session_URL", ueSessionUrl);
     FirebaseAnalytics.getInstance(getApplicationContext()).logEvent("UE_Session_URL", params);
 }
});
iOS
Swift
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.swift`
    class AppDelegate: UIResponder, UIApplicationDelegate, UserExperiorDelegate {
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UserExperior.initialize("USER_KEY")

    // Step 2: Setting delegate after UserExperior initialize
        UserExperior.setDelegate(self)
        return true
    }

  // Step 3: Implement UserExperiorDelegate protocol
    func userExperiorSessionDidStart() {
        let sessionURL = UserExperior.getSessionUrl("FirebaseGoogleAnalytics") // "FirebaseGoogleAnalytics" is the key used to identify Firebase Google Analytics
        Analytics.logEvent("UE_Session_URL", parameters: ["UE_Session_URL": ga_sessionURL])
    }
Objective-C
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.m`
    @interface AppDelegate () <UserExperiorDelegate>
    @end

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        [UserExperior initialize:@"USER_KEY"];

    // Step 2: Setting delegate after UserExperior initialize
        [UserExperior setDelegate:self];
        return YES;
    }

   // Step 3: Implement UserExperiorDelegate protocol
    - (void)userExperiorSessionDidStart {
        NSString *sessionURL = [UserExperior getSessionUrl:@"FirebaseGoogleAnalytics"]; // "FirebaseGoogleAnalytics" is the key used to identify Firebase Google Analytics
        [FIRAnalytics logEventWithName:@"UE_Session_URL" parameters:@{@"UE_Session_URL":sessionURL}];
    }
React-Native
// Import the following(App.js)
import UserExperior from 'react-native-userexperior';
import { NativeModules, NativeEventEmitter } from 'react-native';

// UserExperior Initialization
UserExperior.startRecording('your-version-key-here');
// Add listener
const emitter = new NativeEventEmitter(NativeModules.UserExperior);
this.userExperiorListener = emitter.addListener('ON_USER_EXPERIOR_STARTED', async (status) => {
 if (status) {
   let sessionUrl = await UserExperior.getSessionUrl('FirebaseGoogleAnalytics');
   // Send session URL to FirebaseGoogleAnalytics
 }
});

UserExperior URL in Firebase Google Analytics

After completing the integration, every Firebase Google Analytics event will contain an event called "UE_Session_URL". You can just copy and paste the URL in your browser's window that will open the session in the UserExperior Dashboard. If the session was recorded you will be able to replay it in the UserExperior Dashboard.

Go to Firebase Console > Go to your app folder > Events > Under Existing events click on the UE_Session_URL. Now under parameter name UE_Session_URL find parameter value of UserExperior session URL.

Mixpanel

Integration

1. Switch On the Mixpanel in UserExperior Settings

Go to UserExperior Dashboard > Go to your app folder > Go to Settings > Select Integrations > Switch On Mixpanel

Note: Make sure to switch on the integration for the respective platform i.e. for the Androidthe and the iOS.

2. Add UserExperior Listener immediately after startRecording:

Note: In case of more than one 3rd party integrations, reuse the Listener/ Delegate mentioned below.

Android

Add following code in the the onCreate method of every launcher activity.

UserExperior.startRecording(getApplicationContext(), "your-version-key-here");

// UserExperior Listener: Third Party Integration
UserExperior.setUserExperiorListener(new UserExperiorListener() {
 @Override
 public void onUserExperiorStarted() {
     // Sending UserExperior Session URL to Mixpanel
     String ueSessionUrl = UserExperior.getSessionUrl("Mixpanel");

     JSONObject props = new JSONObject();
     props.put("UE_Session_URL", ueSessionUrl);

     public static final String MIXPANEL_TOKEN = "put-your-mixpanel-project-token-here";

     // Initialize the library with your Mixpanel project token, MIXPANEL_TOKEN, and a reference to your application context.
     MixpanelAPI mixpanel = MixpanelAPI.getInstance(context, MIXPANEL_TOKEN);
     mixpanel.track("UE_Session_URL", props);
 }
});
iOS
Swift
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.swift`
    class AppDelegate: UIResponder, UIApplicationDelegate, UserExperiorDelegate {
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UserExperior.initialize("USER_KEY")

    // Step 2: Setting delegate after UserExperior initialize
        UserExperior.setDelegate(self)
        return true
    }

  // Step 3: Implement UserExperiorDelegate protocol
    func userExperiorSessionDidStart() {
        let sessionURL = UserExperior.getSessionUrl("Mixpanel") // "Mixpanel" is the key used to identify Mixpanel
        Mixpanel.mainInstance().track(event: "UE_Session_URL", properties: ["UE_Session_URL": mp_sessionURL])
    }
Objective-C
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.m`
    @interface AppDelegate () <UserExperiorDelegate>
    @end

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        [UserExperior initialize:@"USER_KEY"];

    // Step 2: Setting delegate after UserExperior initialize
        [UserExperior setDelegate:self];
        return YES;
    }

   // Step 3: Implement UserExperiorDelegate protocol
    - (void)userExperiorSessionDidStart {
        NSString *sessionURL = [UserExperior getSessionUrl:@"Mixpanel"]; // "Mixpanel" is the key used to identify Amplitude
        [[Mixpanel sharedInstance] track:@"UE_Session_URL:" properties:@{ @"UE_Session_URL": sessionURL}];
    }
React-Native
// Import the following(App.js)
import UserExperior from 'react-native-userexperior';
import { NativeModules, NativeEventEmitter } from 'react-native';

// UserExperior Initialization
UserExperior.startRecording('your-version-key-here');
// Add listener
const emitter = new NativeEventEmitter(NativeModules.UserExperior);
this.userExperiorListener = emitter.addListener('ON_USER_EXPERIOR_STARTED', async (status) => {
 if (status) {
   let sessionUrl = await UserExperior.getSessionUrl('Mixpanel');
   // Send session URL to Mixpanel
 }
});

UserExperior URL in Mixpanel

After completing the integration, every Mixpanel session will contain an event called "UE_Session_URL". You can just copy and paste the URL in your browser's window that will open the session in the UserExperior Dashboard. If the session was recorded you will be able to replay it in the UserExperior Dashboard.

In the app Dashboard, go to Data Management > Live View > Under list of events click on distinct ID of event name UE_Session_URL

Expand UE_Session_URL and under All event properties find session URL of UserExperior

MoEngage

Integration

1. Switch On the MoEngage in UserExperior Settings

Go to UserExperior Dashboard > Go to your app folder > Go to Settings > Select Integrations > Switch On MoEngage

Note: Make sure to switch on the integration for respective platform i.e. for the Android and the iOS.

2. Add UserExperior Listener/ Delegate immediately after startRecording:

Note: In case of more than one 3rd party integrations, reuse the Listener/ Delegate mentioned below.

Android

Add the the following code in onCreate method of every launcher activity.

UserExperior.startRecording(getApplicationContext(), "your-version-key-here");

// UserExperior Listener: Third Party Integration
UserExperior.setUserExperiorListener(new UserExperiorListener() {
 @Override
 public void onUserExperiorStarted() {
     // Sending UserExperior Session URL to MoEngage
     String ueSessionUrl = UserExperior.getSessionUrl("MoEngage");

     Properties properties = new Properties();
     properties.addAttribute("UE_Session_URL", ueSessionUrl);
     MoEHelper.getInstance(getApplicationContext()).trackEvent("UE_Session_URL", properties);
 }
});
iOS
Swift
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.swift`
    class AppDelegate: UIResponder, UIApplicationDelegate, UserExperiorDelegate {
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UserExperior.initialize("USER_KEY")

    // Step 2: Setting delegate after UserExperior initialize
        UserExperior.setDelegate(self)
        return true
    }

  // Step 3: Implement UserExperiorDelegate protocol
    func userExperiorSessionDidStart() {
        let sessionURL = UserExperior.getSessionUrl("MoEngage") // "MoEngage" is the key used to identify MoEngage
        let eventProperties = MOProperties.init(attributes: ["UE_Session_URL": me_sessionURL])
        MoEngage.sharedInstance().trackEvent("UE_Session_URL", with: eventProperties)
    }
Objective-C
   // Step 1: Add the UserExperiorDelegate protocol in your `AppDelegate.m`
    @interface AppDelegate () <UserExperiorDelegate>
    @end

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        [UserExperior initialize:@"USER_KEY"];

    // Step 2: Setting delegate after UserExperior initialize
        [UserExperior setDelegate:self];
        return YES;
    }

   // Step 3: Implement UserExperiorDelegate protocol
    - (void)userExperiorSessionDidStart {
        NSString *sessionURL = [UserExperior getSessionUrl:@"MoEngage"]; // "MoEngage" is the key used to identify MoEngage
        MOProperties *eventProperties = [[MOProperties alloc] initWithAttributes:@{ @"UE_Session_URL": sessionURL}];
        [[MoEngage sharedInstance] trackEvent:@"UE_Session_URL" withProperties:eventProperties];

}
React-Native
// Import the following(App.js)
import UserExperior from 'react-native-userexperior';
import { NativeModules, NativeEventEmitter } from 'react-native';

// UserExperior Initialization
UserExperior.startRecording('your-version-key-here');
// Add listener
const emitter = new NativeEventEmitter(NativeModules.UserExperior);
this.userExperiorListener = emitter.addListener('ON_USER_EXPERIOR_STARTED', async (status) => {
 if (status) {
   let sessionUrl = await UserExperior.getSessionUrl('MoEngage');
   // Send session URL to MoEngage
 }
});

UserExperior URL in MoEngage

After completing the integration, every MoEngage session will contain an event called "UE_Session_URL". You can just copy and paste the URL in your browser's window that will open the session in the UserExperior Dashboard. If the session was recorded you will be able to replay it in the UserExperior Dashboard.

Segment

Integration

UserExperior provides integration with Segment SDK. With UserExperior and Segment Integration, you can automatically track events, screens, user id and user properties in segment and send these to UserExperior. This will eliminate the need to send events to UserExperior separately. UserExperior’s integration with Segment is provided via a middleware that you have to write in the launcher screen just after initializing UserExperior.

If you haven’t integrated UserExperior, first do a basic integration of UserExperior till startRecording to initialize our SDK using the integration guide: https://www.userexperior.com/integration-guide

Follow the below instructions to write the middleware required for UserExperior and Segment integration:

Supported Segment Calls and their equivalent UserExperior APIs

Here you can view a list of Segment's available calls and the UserExperior supported methods you can map it to:

Segment API UserExperior API Usability
Alias UserExperior.setUserIdentifier("pass-your-user-id-here") Setting up user identifier
Identify UserExperior.setUserProperties(["key1:"value1", "key2:"value2", ...]) Setting up user properties
Track UserExperior.logEvent("YOUR_EVENT", properties) Setting up custom events
Screen UserExperior.startScreen("SCREEN_NAME") Setting up screen name

Native Android

After initializing the UserExperior SDK, you have to write the following middleware while initializing Segment SDK. Inside middleware, there are three cases: track, identify, and screen that you can add as per your need.

// Create an analytics client with the given context and Segment write key.
Analytics analytics = new Analytics.Builder(getApplicationContext(), "SEGMENT_WRITE_KEY_HERE")
      .trackApplicationLifecycleEvents() // Enable this to record certain application events automatically!
      .recordScreenViews() // Enable this to record screen views automatically!
      .useSourceMiddleware(new Middleware() {
          @Override
          public void intercept(Chain chain) {
              BasePayload payload = chain.payload();
              switch (payload.type()) {

                  // Add your cases here
              }
              chain.proceed(payload);
          }
      })
      .build();

Add case track to send Events to UserExperior

case track:
    HashMap<String, Object> params = new HashMap<>();
    String key = payload.getString("event");
    ValueMap map = payload.getValueMap("properties");
    if (map != null) {
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            params.put(entry.getKey(), entry.getValue());
        }
    }

    try {
        UserExperior.logEvent(key, params);
    } catch (Exception e) {
        e.printStackTrace();
    }
    break;

Add case identify to track User Identity:

case identify:
    String userId = payload.userId();
    if (userId != null) {
        try {
            UserExperior.setUserIdentifier(userId);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    Object payloadTraits = payload.get("traits");
    if (payloadTraits instanceof Map) {
        Map<Object, Object> traits = (Map<Object, Object>) payloadTraits;
        HashMap<String, Object> ueMap = new HashMap<>();
        for (Map.Entry<Object, Object> entry : traits.entrySet()) {
            ueMap.put(entry.getKey().toString(), entry.getValue().toString());
        }

        try {
            UserExperior.setUserProperties(ueMap);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    break;

Add case screen to tag Screen Names

case screen:
    String screenName = payload.getString("name");
    try {
        UserExperior.startScreen(screenName);
    } catch (Exception e) {
        e.printStackTrace();
    }
    break;

Native iOS

After initializing the UserExperior SDK, you can create Segment middleware and initialize Segment, inside the middleware code you can add the cases you need to send to UserExperior:

let segmentConfiguration = AnalyticsConfiguration(writeKey: SEGMENT_API_KEY)
// Make other configuration changes
let ueMiddleware = BlockMiddleware(block: { (context, next) in

switch (context.eventType) {
// Add the cases here

default: break

}
next(context)

})

segmentConfiguration.sourceMiddleware = [ueMiddleware]
Analytics.setup(with: segmentConfiguration)

To set the User Identity

case .identify:

        if let user = context.payload as? IdentifyPayload {

          var userProperties = [String: String]()
          // Stringify track properties
          user.traits?.forEach({ (key: AnyHashable, value: Any) in

          userProperties["\(key)"] = "\(value)"

        })

          UserExperior.setUserIdentifier(user.userId)

        }

To send Custom Event

Add a case .track to your middleware:

case .track:

  if let track = context.payload as? TrackPayload {

      var properties = [String: String]()
      // Stringify track properties
      track.properties?.forEach({ (key: AnyHashable, value: Any) in

      properties["\(key)"] = "\(value)"

      })

    let check = track.event
    if check != "button to ignore" {
    UserExperior.logEvent(track.event, withProperties: properties)

    }}

To identify the Screen

Add a case .screen to your middleware:

case .screen:

        if let screen = context.payload as? ScreenPayload {

          var properties = [String: String]()
          // Stringify track properties
          screen.properties?.forEach({ (key: AnyHashable, value: Any) in

          properties["\(key)"] = "\(value)"

        })

          UserExperior.startScreen(screen.name)

        }

React Native

If you haven’t integrated the UserExperior ReactNative Plugin, first do a basic integration of UserExperior till startRecording to initialize our plugin using our ReactNative integration guide: https://www.userexperior.com/developer-docs/react-native

Follow the instructions below to Integrate UserExperior with Segment for React Native framework mobile apps.

Steps

  1. Download UserExperiorSegmentPlugin.ts file and put it in the project’s /src folder: https://drive.google.com/file/d/1-9WK3AiIrBvHiaQOr_eTb7w6dJx6ArLM/view?usp=sharing
  1. Add the UserExperiorSegmentPlugin as segment plugin in “App.js”
import { UserExperiorSegmentPlugin } from './src/UserExperiorSegmentPlugin'; // PATH TO THE FILE
export const segmentClient = createClient({
  writeKey: "SEGMENT_WRITE_KEY_HERE",
  trackAppLifecycleEvents: true,
  //additional config options
});
segmentClient.add({ plugin: new UserExperiorSegmentPlugin() });
  1. Now start using the following segment methods as normal and those calls will automatically call respective UserExperior methods
// Following code is equivalent to `logEvent` method in UserExperior
segmentClient.track('View Product', {
 productId: 123,
 productName: 'Striped trouser'
});
segmentClient.track("Awesome Event");
// Following code is equivalent to `startScreen` method in UserExperior
segmentClient.screen("Home Screen")
// Following code is equivalent to `setUserIdentifier` method in UserExperior
segmentClient.alias('user-123');
// Following code is equivalent to `setUserProperties` method in UserExperior
segmentClient.identify('user-123', {
 username: 'User XYZ',
 email: 'xyz@example.com',
 plan: 'premium',
});

UserExperior Technologies LLC
2033 Gateway Place, 5th Floor
San Jose, CA 95110
Compliances
UserExperior has successfully completed a System and Organization Controls (SOC) 2 Type 2 audit, performed by Sensiba San Filippo, LLP (SSF).
Information Security Management System of UserExperior Pvt Ltd has been assessed and found to conform to the requirements of ISO/IEC 27001:2013.

Privacy & Security | Terms & Conditions | GDPR