UXCam's Frequently Asked Questions page is a central hub where its customers can always go to with their most common questions. These are the 97 most popular questions UXCam receives.
By default, UXCam generates a schematic representation of the app on iOS. This is done in orderto visualize in-app behavior, without recording the app’s screen. Learn more.
Follow the instructions below for Integration
Cocoapods (Objective C)
Cocoapods (Swift)
Manual Integration (Objective C)
Manual Integration (Swift)
You’ll need to have CocoaPods installed. If you haven’t already, see this page for installation details.If this is your first pod, run pod init.
Add to the Podfile
pod 'UXCam'
Then from your Terminal, type
pod install
Import UXCam header at the top of your AppDelegate.m:
#import <UXCam/UXCam.h>
Add this call as the first line of your application:didFinishLaunchingWithOptions: method. Your App-key is available from the UXCam dashboard.
[UXCam optIntoSchematicRecordings];
[UXCam startWithKey:@"App-key from UXCam"];
You’ll need to have CocoaPods installed. If you haven’t already, see this page for installation details.If this is your first pod, run pod init.
Add to the Podfile
pod 'UXCam'
Then from your Terminal, type
pod install
Import UXCam header at the top of your AppDelegate.swift:
import UXCam
Add this call as the first line of your application:didFinishLaunchingWithOptions: method. YourApp-key is available from UXCam dashboard.
UXCam.optIntoSchematicRecordings()
UXCam.start(withKey:"App-key from UXCam")
Please download the latest iOS SDK here
Follow the instructions below for Integration
Unzip the downloaded file and drag the "UXCam.framework" from the downloaded UXCam folder into your Xcode project (dropping it onto your Project in the Project Navigator window). When prompted, select "Copy items into destination..." and "Create folder references...".
Then, add these following libraries to your Linker settings. Click on your Project in the Project Navigator window, under Targets select your app, and click the Build Phases tab. Open the "Link Binary with Libraries" list. Click the plus sign (+) and add
AVFoundation
Security
CoreGraphics
CoreMedia
CoreVideo
CoreTelephony
MobileCoreServices
QuartzCore
SystemConfiguration
Add $(OTHER_LDFLAGS) -ObjC to your linker flag: Select your project under the PROJECT heading in the Project Navigator, then select the Build Settings tab. Scroll to Other Linker Flags and Set the value of the Other Linker Flags build setting to $(OTHER_LDFLAGS) -ObjC
Import UXCam header at the top of your AppDelegate.m:
#import <UXCam/UXCam.h>
Add this call as the first line of your application:didFinishLaunchingWithOptions: method.YourApp-key is available from UXCam dashboard.
[UXCam optIntoSchematicRecording];
[UXCam startWithKey:@"App-key from UXCam"];
Please download the latest iOS SDK here
Follow the instructions below for Integration
Unzip the downloaded file and drag the "UXCam.framework" from the downloaded UXCam folder into your Xcode project (dropping it onto your Project in the Project Navigator window). When prompted, select "Copy items into destination..." and "Create folder references...".
Then, add the following libraries to your Linker settings. Click on your Project in the Project Navigator window, under Targets select your app, and click the Build Phases tab. Open the "Link Binary with Libraries" list. Click on the plus sign (+) and add
AVFoundation
Security
CoreGraphics
CoreMedia
CoreVideo
CoreTelephony
MobileCoreServices
QuartzCore
SystemConfiguration
Add $(OTHER_LDFLAGS) -ObjC to your linker flag: Select your project under the PROJECT heading in the Project Navigator, then select the Build Settings tab. Scroll to Other Linker Flags and Set the value of the Other Linker Flags build setting to $(OTHER_LDFLAGS) -ObjC
Import UXCam header at the top of your AppDelegate.swift:
#import UXCam
Add this call as the first line of your application:didFinishLaunchingWithOptions: method. Your app-key is available on the dashboard
UXCam.optIntoSchematicRecordings()
UXCam.start(withKey:"App-key from UXCam")
This will complete the integration process. Your session will be shown on the dashboard within a few seconds after the app goes in the background.
You can optionally use the API'es for customization such as identifying users from your database with UXCam, tag sessions or hiding sensitive views.
View ArticleFollow the instructions below for Integration
Gradle
AAR
JAR
In the module's build.gradle file add UXCam:
repositories {
maven{
url 'https://sdk.uxcam.com/android/'
}
}
dependencies {
implementation 'com.uxcam:uxcam:3.1.12@aar'
}
In every activity that is an entry point to your app, add
import com.uxcam.UXCam;
* Entry activities are usually those who have a custom <intent-filter> element in the AndroidManifest.xml file.
Start UXCam insideonCreatemethod.Your App-key is available from UXCam dashboard.
UXCam.startWithKey("App-key from UXCam");
If you are using ProGuard, add the following line to the Proguard rules for compilation:
-keep class com.uxcam.** { *; }
-dontwarn com.uxcam.**
If you are using Android Studio, Verify that HttpPost service is included in your merged manifest. To view your merged manifest, open your manifest file and click on merged manifest tab.
This will complete the integration process.
Your session will be shown on the dashboard within a few seconds after the app goes in the background. You can optionally use the API'es for customization such as identifying users from your database with UXCam, tag sessions or hiding sensitive views.
Please download the latest Android SDK here
Add the uxcam-3.1.12.aar file in the "libs" folder of your Android project.
In the module's build.gradle file add:
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation(name: 'uxcam-3.1.12', ext: 'aar')
}
For every activity that is an entry point to your app, add
import com.uxcam.UXCam;
* Entry activities are usually those who have a custom <intent-filter> element in the AndroidManifest.xml file.
Start UXCam insideonCreatemethod. Your App-key is available from UXCam dashboard.
UXCam.startWithKey("App-key from UXCam");
If you are using ProGuard, add the following line to the Proguard rules for compilation:
-keep class com.uxcam.** { *; }
-dontwarn com.uxcam.**
This will complete the integration process.
Your session will be shown on the dashboard within a few seconds after the app goes in the background. You can optionally use the API'es for customization such as identifying users from your database with UXCam, tag sessions or hiding sensitive views.
Please download the latest Android SDK here
Add the uxcam-3.1.12.jar file to the "libs" folder of your Android project.
In the module's build.gradle file add:
dependencies {
implementation files('libs/uxcam-3.1.12.jar')
}
Edit AndroidManifest.xml to make sure the following permissions are present:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
* Entry activities are usually those who have a custom <intent-filter> element in the AndroidManifest.xml file.
Edit AndroidManifest.xml to add the following services inside your application tag
<service android:name="com.uxcam.service.HttpPostService"/>
For every activity that is an entry point to your app, add
import com.uxcam.UXCam;
* Entry activities are usually those who have a custom <intent-filter> element in the AndroidManifest.xml file.
Start UXCam insideonCreatemethod. Your App-key is available from UXCam dashboard.
UXCam.startWithKey("App-key from UXCam");
This will complete the integration process. Your session will be shown on the dashboard within a few seconds after the app goes in the background.
You can optionally use the API'es for customization such as identifying users from your database with UXCam, tag sessions or hiding sensitive views.
How do you record certain screens only on Android?
First of all:
Call UXCam.startWithKey() with UXCam.setMultiSessionRecord(false) on onCreate() of your launching Activity
Once you have done this:
Call UXCam.startNewSession on Main Activity
Call UXCam.stopApplicationAndUploadData to stop the session
View ArticleFollow the instructions below for the iOS Integration
Installation
Open the pubspec.yaml file located inside your app folder and add flutter_uxcam:^1.0.0under dependencies.
Usage
Inside your dart file import flutter_uxcam like this
import 'package:flutter_uxcam/flutter_uxcam.dart';
Then inside the first method that gets called add the following code snippets; most likely inside the class of lib/main.dart file that's getting called by this void main() => runApp(MyApp()); where MyApp is the name of your class. FlutterUxcam.startWithKey("UXCAM_APP_KEY");
Example
import 'package:flutter_uxcam/flutter_uxcam.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
FlutterUxcam.startWithKey("UXCAM_APP_KEY");
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
If you get this error while running in iOS
Error output from CocoaPods:
[!] Automatically assigning platform ios with version 8.0 on target Runner because no platform was specified. Please specify a platform for this target in your > > Podfile. See https://guides.cocoapods.org/syntax/podfile.html#platform.
Then inside ios folder in pod file uncomment this line # platform :ios, '9.0' that means removing #.
The Android Flutter SDK is in Beta now. If you want to test it out, contact our support team under [email protected] - we'll be happy to help you test it out!
View ArticlePersonally Identifiable Information (PII) is any information that can identify and track the individual entity or any other information that is linked to this individual.
According to GDPR, PII is defined as:
“Any information relating to an identified or identifiable natural person ('data subject'); an identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person.”
Examples of the PII data:
Name
Email Address
Phone number
Home Address
ID number
Date of birth
Credit card number
Gender
Job position
Make sure you identify all the PII data in your app and before sending sessions to UXCam, hide it with the Hide Sensitive Views API.
View ArticleUXCam captures the view controller name automatically but in case where it doesn’t (such as in OpenGL and having multiple fragments) or you would like to set a different unique name, use this function.
Tag Screen Name
This initializes the UXCam library, requests the server for configurations and starts to capture the session as per the configuration.
iOS
Android
Xamarin
React-native/Cordova
+(void) tagScreenName:(NSString*)screenName;
UXCam.tagScreenName("screenName");
UXCam.TagScreenName("screenName");
UXCam.tagScreenName("screenName");
The API, the parametersare:
screenName: A String object of the name of the screen as required.
Control Automatic tagging
Enable / Disable the automatic tagging of screen names
iOS
Android
Xamarin
React-native/Cordova
+(void) setAutomaticScreenNameTagging:(BOOL)enable;
UXCam.setAutomaticScreenNameTagging(boolean enable);
UXCam.SetAutomaticScreenNameTagging(boolean enable);
UXCam.setAutomaticScreenNameTagging(boolean enable);
The API, the parametersare:
enable:Set to TRUE to enable automatic screen name tagging (the default) or FALSE to disable it
View ArticlePlease download the latest Xamarin UXCam component from here
For reference on including a component into your project visit here.
iOS
Android
Import the UXCam agent header at the top of your AppDelegate.m:
using Com.UXCam;
Add this call as the first line of your application: didFinishLaunchingWithOptions: method
UXCam.OptIntoSchematicRecordings();
UXCam.StartWithKey("App-key from UXCam");
Edit AndroidManifest.xml to make sure the following permissions are present:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Edit AndroidManifest.xml toAdd following services inside your application tag:
<service android:name="com.uxcam.service.HttpPostService"/>
In every activity that is an entry point to your app add
Using Com.UXCam;
Add UXCam.startApplicationWithKey("App-key") inside onCreate method.
UXCam.startWithKey("App-key from UXCam");
// Entry activities are usually those who have a custom <intent-filter> element in the AndroidManifest.xml file.
That completes the integration process.
Your session will be shown on the dashboard within few seconds after the app goes in the background.
You can optionally use the API'es for customization such as identify users from your database with UXCam, tag sessions or hide sensitive views.
View ArticleScreen flow is a great tool that lets you understand your users’ paths in your app. It gives you an overview of the navigation of your users starting from launching the app and ending when they quit.
If you want to see where your users go after launching the app, click on the particular paths. In the example below, you can see that about 20\% of all the users go to BFBannersViewController.
To see how the path looks further, click on the next steps:
You can also check the reverse flow to understand from which screens users usually quit your app:
To make your view a bit cleaner, you can always limit the maximum length of your flow and the maximum number of screens:
If you want to share the screen flow with someone from your company or include it in any materials such as presentation, you can also download the image or pdf including it:
View ArticleThe following API allows you to control when the session gets recorded.
Start recording
Start the UXCam application to ping the server, get the settings configurations and start capturing the data according to the configuration.
Use startWithKey with appVariantIdentifier parameter to separate Debug and Release builds.
iOS
Android
Xamarin
React-native/Cordova
(void) startWithKey:(NSString*)UXCamKey
UXCam.startWithKey (String UXCamKey)
UXCam.StartWithKey(UXCamKey);
UXCam.startWithKey(UXCamKey);
The API parametersare:
UXCamKey: App-key (found on UXCam dashboard)
Stop recording
Stop the UXCam application and send the captured data to the server. You can use this code to start sending the data on UXCam server without the app going in the background.
iOS
Android
Xamarin
React-native/Cordova
(void) stopSessionAndUploadData;
UXCam.stopApplicationAndUploadSession();
UXCam.StopSessionAndUploadData();
UXCam.stopSessionAndUploadData();
Allow a short break for another app
Prevent a short trip to another app from causing a break in a session.
iOS
Android
Xamarin
React-native/Cordova
+(void) allowShortBreakForAnotherApp:(BOOL)continueSession;
UXCam.allowShortBreakForAnotherApp()
** call UXCam.resumeShortBreakForAnotherApp() to resume from short break
**By default the method will wait 180000ms (3min) to end the session, if you want to specify the time call UXCam.allowShortBreakForAnotherApp(int timeInMillis)
UXCam.AllowShortBreakForAnotherApp(continueSession)
** Android only: call UXCam.ResumeShortBreakForAnotherApp() to resume from short break
UXCam.allowShortBreakForAnotherApp(continueSession)
** call UXCam.resumeShortBreakForAnotherApp() to resume from short break
The API parametersare:
continueSession: Set to TRUE to continue the current session after a short trip out to another app. Default is FALSE - stops the session as soon as the app enters the background.
Cancel recording
Cancel the recording of the current session and discard the data.
iOS
Android
Xamarin
React-native/Cordova
+ (void) cancelCurrentSession;
UXCam.cancelCurrentSession()
UXCam.CancelCurrentSession()
UXCam.cancelCurrentSession()
Add verification listener
iOS
Android
Xamarin
React-native/Cordova
Doesn't exist on iOS - pass it in to startWithKey
UXCam.addVerificationListener(OnVerificationListener listener)
Example:
UXCam.addVerificationListener(new OnVerificationListener() {
@Override
public void onVerificationSuccess() {
//Do Something here
}
@Override
public void onVerificationFailed(String errorMessage) {
//Do Something here
}
});
UXCam.AddVerificationListener(OnVerificationListener listener)
Example:
UXCam.AddVerificationListener(new IOnVerificationListener());
class IOnVerificationListener : Java.Lang.Object, Com.UXCam.IOnVerificationListener
{
public void OnVerificationFailed(string p0)
{
//Do Something here
}
public void OnVerificationSuccess()
{
//Do Something here
}
}
UXCam.addVerificationListener(OnVerificationListener listener)
Example:
UXCam.addVerificationListener(verificationSuccess);
function verificationSuccess() {
UXCam.urlForCurrentUser(function(link){
//Do Something here
});
UXCam.urlForCurrentSession(function(link){
//Do something here
});
}
Remove verification listener
iOS
Android
Xamarin
React-native/Cordova
Doesn't exist on iOS
UXCam.removeVerificationListener(OnVerificationListener listener)
UXCam.RemoveVerificationListener(OnVerificationListener listener)
UXCam.removeVerificationListener(OnVerificationListener listener)
Configure Multisession Recordings
Configure whether UXCam is set to automatically record a new session when the app resumes from the background.
iOS
Android
Xamarin
React-native/Cordova
+ (BOOL) getMultiSessionRecord;
boolean getMultiSessionRecord()
boolean GetMultiSessionRecord()
boolean getMultiSessionRecord()
Set Multisession Recording
Set whether to automatically record multiple sessions or not.
iOS
Android
Xamarin
React-native/Cordova
+ (void) setMultiSessionRecord:(BOOL)recordMultipleSessions;
void setMultiSessionRecord(boolean multiSessionRecord)
void SetMultiSessionRecord()
void setMultiSessionRecord()
Delete pending records
Delete sessions that are awaiting to upload
iOS
Android
Xamarin
React-native/Cordova
+ (void) deletePendingUploads;
+ (NSUInteger) pendingUploads;
void deletePendingUploads()
int pendingSessionCount();
void DeletePendingUploads()
int PendingSessionCount()
void deletePendingUploads()
int pendingSessionCount()
Upload pending session
Begin uploading pending sessions.
iOS
Android
Xamarin
React-native/Cordova
void uploadPendingSession()
void uploadPendingSession(Callback callback)
NO
IOS Only:
void UploadPendingSession()
void UploadPendingSession(Callback callback)
IOS only:
void uploadPendingSession()
void uploadPendingSession(Callback callback)
View ArticleSession starts the user opens the app and ends when the app goes to the background.
If you open any of your sessions, you will be able to see the following information:
List of all the recorded sessions
Information about the user, e.g. alias name, number of the session, location, date etc.
Video (if recorded) with the full timeline consisting of two parts: one letting you go to the particular timestamp and the second one letting you go to the beginning of the particular screen
List of all the user’s events with their timestamps.
To make the process of watching videos smoother, click on the settings icon and:
Turn on Skip inactivity
Choose Play all if you want to watch all the videos one by one
Increase speed
You can also always go to a particular timestamp or beginning of any of the screens:
If you find a session that you want to share with someone, click on the sharing icon and generate a public link or determine who should receive an invitation to watch it.
View ArticleIf you want to watch specific sessions, you can always filter them by all the available properties. For example, you can filter sessions by the country and session number = 1 to see how the first sessions of users in a particular country look like.
If you want to come back to this view more often, you can save it by clicking Save as segment.
You can find all the segments when you click Search for users & filter sessions.
View ArticleDeleting sessions
If you need to delete some sessions, you can always do it in bulk. We let you delete 20 sessions at once. Just mark all of the sessions and choose the Delete option.
Sharing sessions
In case you need to share particular sessions with the rest of the team, mark all of them and click Share. Please, keep in mind that you can share max 20 sessions at once.
View ArticleUnder the Sessions section, you’re able to find all the sessions and videos recorded by UXCam. Watching sessions and recordings will help you deeply understand your users’ behavior in your app.
The play icon means that this session includes a video recording. Please, keep in mind that on iOS we only offer a schematic replay, unless you can ensure that you've hidden all of the PII data. You can read more about it here.
If the icon shows three dots, it means that we collected only the session data, without the video recording. To determine which sessions we should record the video for, go to the recording settings.
To find only the sessions with recordings, click on this switcher:
On the default view of all the sessions, you can find properties such as: when and where it was recorded, the device type, app version or session length. However, you can always adjust what you see here:
View ArticleSummary
We don’t overcomplicate things. It’s already complicated when you are running an online business. At UXCam we respect your privacy. We adopted Privacy by Design, it is a way of thinking about and acting in favor of your privacy in advance and building privacy into our services.
We have written this privacy statement to help you understand your rights, our obligations and outline how data is treated when you interact with our website and/or use our services.
We’d like to summarize our approach to privacy in a few commitments to you:
Clearly express our privacy statement and keep it up to date last updated September 12th 2019.
Only collect information with your consent that is necessary to perform the functions and activities you have agreed to.
Make sure to implement practices, procedures and systems to comply with the Data Protection Actand carry out all processing operations in strict compliance with the EU General Data Protection Regulation (“GDPR”) (specifically but not limited to Article 6(1)(b) to (f) and Article 28).
Explain in plain language the type and mechanism of information collected.
Advise you of the purpose for which your information is collected, stored, used and disclosed.
Advise you on your rights to information access, rectification and deletion
Do our best not to let you down. But you can always remind us at [email protected]
Make sure our third parties are as diligent as we are
Make sure UXCam is in check as a third party itself
Information collected
Through the website
Once you sign up for UXCam, we will collect the information you provide that is your:
Email address
First and Last Names
Company name
Phone number
When you login via Google we collect the following information
Email address
First and Last Names
Company name
Phone number
As a third party
When UXCam is integrated as a service we collect the following information:
Consistent random pseudo ID for every end user
Device details (Type, Version, Model, Operating System (OS)
Geographic location (Country only)
Screens visited by the end user in an app using UXCam only
Interaction patterns by the end user on your app (screen actions, gestures: taps, scrolls)
Information provided by the customer (except information customer chooses to block from being sent to UXCam)
We strictly adhere to a non-recording policy of any PII (Personally Identifiable Information) and contractually prohibits recording of sensitive information including ePHI, PCI or PII information. We provide API methods to hide PII and sensitive information.
We require you, as a customer, to hide PII information and only process anonymized data and to mention the usage of UXCam on your privacy policy.
As such the data UXCam processes on behalf of its customers are anonymous.
Storage and Duration
We’re not hoarders. We only store information on you for as long as you’re using our service. As soon as you delete your account or send us a request to stop processing your information, we delete it completely. We will also delete the data of your users. We have taken the necessary precautions to ensure that data deletion is conducted securely.
We will retain documents containing personal data:
to the extent that we are required to do so by law;
if we believe that the documents may be relevant to any ongoing or prospective legal proceedings; and
in order to establish, exercise or defend our legal rights (including providing information to others for the purposes of fraud prevention and reducing credit risk)
Storage and International Data Transfers
The Company’s Website and Services are hosted in the United States of America.
If you are accessing the Website and/or Services from the European Union, with laws or regulations governing personal data collection, use and disclosure that differ from United States laws, please note neither EU law nor GDPR requires hosting data in the EU. Instead, what is required is that UXCam must provide “appropriate safeguards” for data that it hosts and processes on its US servers (see Art 46 of the GDPR). UXCam offers a Data Processing Addendum (DPA) to provide such adequate safeguards, which includes provisions for GDPR.
EU-US Privacy Shield
UXCam complies with the EU-US Privacy Shield Framework and the Swiss-US Privacy Shield Framework as set forth by the US Department of Commerce regarding the collection, use, and retention of personal information from European Union member countries to the United States.
UXCam has certified that it adheres to the Privacy Shield Principles. If there is any conflict between the policies in this Privacy Policy and the Privacy Shield Principles, the Privacy Shield Principles will govern. To learn more about the Privacy Shield program and to view our certification page, please visit www.privacyshield.gov.
UXCam remains responsible for any of your personal information that is shared under the Onwards Transfer Principle with third parties for external processing on our behalf, as described below. With respect to personal data received or transferred pursuant to the Privacy Shield Framework, UXCam is subject to the regulatory enforcement powers of the U.S. Federal Trade Commission. In certain situations, UXCam may be required to disclose personal data in response to lawful requests by public authorities, including to meet national security or law enforcement requirements.
In compliance with the Privacy Shield Principles, UXCam commits to responding to complaints from the EU and Swiss individuals about our collection and/or processing of their personal information within 45 days. EU and Swiss individuals with inquiries or complaints regarding our Privacy Shield policy should first contact UXCam at [email protected].
UXCam is further committed to cooperating with the panel established by the EU data protection authorities (DPAs) and the Swiss Federal Data Protection and Information Commissioner (FDPIC) with regard to unresolved Privacy Shield complaints concerning data transferred from the EU and Switzerland. You may also refer a complaint to your local data protection authority and we will work with them to resolve your concern. In certain circumstances, the Privacy Shield Framework provides the right to invoke binding arbitration to resolve complaints not resolved by other means, as described in Annex I to the Privacy Shield Principles.
Purpose
The main purpose of information collection is to provide you with our service. We don’t have ulterior motives and your information is not passed on to any unaccepted third parties. See below for the full list. We will only use your information for the following:
Sending you updates about UXCam (don’t worry: no spam)
Keep our website and services secure and prevent fraud
Sending you updates about your privacy
Customizing and optimizing your experience
Askhow you’re doing from time to time and send service updates
Supply services purchased through the website
Provide entities using UXCam with statistical information about their users
Third Parties
We engage with selected third party companies and individuals to perform services complementary to our own, namely cloud storage, data analytics, payment processing, support, consulting, development, marketing, advertising, e-mail distribution and data security; as well as our business, legal and financial advisors (collectively, “third parties”).
To give you the most privacy guarantees and data protection assurance we have carefully reviewed and vetted our third parties.
Our third-party service providers do not have any right to use the information we share with them beyond what is necessary to assist us.
Cookies
Cookies are small pieces of text sent by your web browser by a website you visit. A cookie file is stored in your web browser and allows the Service or a third-party to recognize you and make your next visit personalized and easier and the Service more useful to you. Cookies can be "persistent" or "session" cookies.
When you use and access the Service, we may place cookies files in your web browser. We use cookies for the following purposes: to store your preferences, to provide analytics, to enable advertisements delivery, including behavioral advertising. We use both session and persistent cookies on the Service and we use different types of cookies to run the Service:
Essential cookies. We may use essential cookies to authenticate users and prevent fraudulent use of user accounts
Third party cookies: In addition to our own cookies, we may also use various third-parties cookies to report usage statistics of the Service, deliver advertisements on and through the Service, and so on.
You may refuse to accept cookies or delete cookies. To do so, please visit the help pages of your web browser.
You can learn more about cookies and the following third-party websites:
AllAboutCookies: http://www.allaboutcookies.org/
Network Advertising Initiative: http://www.networkadvertising.org/
Security
We run a tight ship on data protection at UXCam. UXCam uses SSL encryption to protect sensitive information online and do everything in our power to protect user-information off-line. We perform staff training on the value of personal information and we also have internal data protection documents that everyone abides by. Rest assured, not all staff get access to data only selected personnel with the highest admin privileges. When they do - it is to continue assisting you in making the most out of UXCam. On a day to day basis we use 256-bit SSL encryption to add extra levels of security.
Purchases and Financial Information
We are PCI compliant and respect and protect your financial information. When you subscribe, you will be redirected to Braintree where you can independently complete your purchase. Braintree’s privacy policy can be found here.
Your Rights
Everything starts and ends with your consent. If you do not agree to some of the purposes listed above, you can opt out at any moment. You have to know what you’re signing up to and we’re being very open about it. If you require additional and personalized help understanding UXCam’s privacy statement or the services we are very happy to hear from you via email. Please email us at [email protected]
You have the right to
Access,
Modify and/or
Delete
your data. If you have any queries, requests or questions please email us on [email protected] We are required to get back to you within 20-40 days. We believe that’s too long to wait for our users and will, accordingly, get back to you sooner than that.
In the event of a data breach, and if there is risk to your personal information and online privacy, we will notify you. If you have questions about UXCam or the use of your personal data - we will be very happy to hear from you on [email protected].
Children Rights
This service is intended for users over 18. If you suspect that your account or this service is being used by minors, then write to us immediately on [email protected].
Legal Matters
We may disclose any information in response to a legal request, such as a subpoena, court order, or government demand; to investigate or report illegal activity; or to enforce our rights or defend claims. We may also transfer your information to another company in connection with a corporate restructuring, such as a sale or merger.
Who we are
Name:UXCam Inc.
Company Registration Number:471651508
Address: 6250 Cypress Avenue, El Cerrito, CA, 94530
Email: [email protected]
Changes
We are committed to keeping you informed of how data is being handled. If we make material changes to this document, we will notify you by sending an email to you. We will also update the “last updated” date at the top; in the commitments section. If we let you know of any changes through an email communication, then the date on which we send the email will be deemed to be the date of your receipt of that email.
View ArticleAdd UXCam to your project
ionic cordova plugin add cordova-uxcam
On your file,AppComponent.ts, add the following line under imports
declarevarUXCam:any;
Call this method on platform.ready(). Your App-key is available from UXCam dashboard.
UXCam.optIntoSchematicRecordings() /* To enable session video recording on iOS */
UXCam.startWithKey("App-key from UXCam")
That completes the integration process.
Your session will be shown on the dashboard within few seconds after the app goes in the background.
You can optionally use the API'es for customization such as identify users from your database with UXCam, tag sessions or hide sensitive views.
View ArticleBy default, UXCam bygenerates a schematic representation on iOS appsto visualize in-app behavior,without recording the app’s screen. The UXCam Schematic Replay technology reconstructs the session by drawing rectangular shapes and texts in a way that reflects the app’s actual screen layout.
Please see the example below for Schematic Replay and the corresponding Screen recording Replay.
Schematic Replay is supported by Native iOS and cross platforms.
If you would like to use the Screen Recording Replay or have any questions, please reach out to your Account Representative.
View ArticleTo see individual release notes, please select the date on the left-hand menu and choose the platform tab.
Jan 24, 2020
Dashboard
- Added session statistics page where user can now see statistics related to sessions only.
- Added conditional session recording settings where user can now add rules for recording of the sessions.
- Improved the UX of event filtering options
Dec 20, 2019
iOS
3.1.10
- Fix alignment of text in schematic keyboard view
- Improve schematic rendering for clipToBounds views and attributed text
- Fix a problem with rendering system fonts in schematic views on iOS13
- Performance improvements for schematic rendering
- Implemented 'upload data only' for mobile networks - ready for backend support
3.1.9
- Improved react-native schematic rendering
- Improved handling of very short sessions and rapid restart of session
- Restore screen name when a UIAlertController is dismissed
- Improved uploading of large batches of sessions
- Right to left text alignment handling
Dec 18, 2019
Android
3.1.12
- Fixed issue of Webview flickering and copy/paste overlay changing position
- Option to upload data file only on mobile data implemented
- Warning due to Webview method being called from another thread solved
Dec 10, 2019
Dashboard
- We added a Screen Flow feature. It gives you an overview of customer journeys in your app. You can open it and get a lot of insights without any hypotheses and effort.
here
Dec 02, 2019
Android
3.1.11
- Fixed wrongly drawing Virtual keyboard placeholder on screen video.
- Fixed issue were tagged event without params was not tracked
- Solved issue were password field and edit text were not occluded on Dialog
- SDK side session filter implemented
Nov 08, 2019
Android
iOS
3.1.10
- Screen action performance improvement
- Solved issue were gestures on Dialog were not being tracked
- Event limit made consistent with iOS SDK. Ignores all params if beyond limit, added internal param to notify backend of ignored params
- Handled multiple exceptions based on stack trace provided by customers
3.1.8
- Extra precautions when generating JSON to handle bad values
3.1.7
- Added 'application not responding' (ANR) monitoring
- Fix a problem where some recording settings were ignored for offline sessions
- Limits on number and size of events that can be added
Oct 21, 2019
Android
3.1.9
- optIntoVideoRecording, optOutOfVideoRecording and optInVideoRecordingStatus APIs added
- optInOverall, optOutOverall and optInOverallStatus APIs added deprecating optIn, optOut and optInStatus
- Fixed issue which let’s user add event more than the limit
- SDK now correctly reports the stack trace of uncaught exception. This bug was on SDK 3.1.8
Oct 02, 2019
Android
3.1.8
- Occlude view support for Webview
- Screen name tagged before verification are not ignored
- Bug Fix: Session will not end when permission dialog appears
- Include stack trace of all threads on ANR and uncaught exception event
- Removed Java 1.8 dependency
Sept 20, 2019
Dashboard
- Added network status on session detail page
- Security enhancement
- Added the button to copy the shared session on clipboard
Sept 06, 2019
Dashboard
- Added a brand new feature called funnel on the dashboard. Funnel allows to see where users are dropping off.
You can also watch how user interact in these critical moments enabling you to surface the biggest opportunities.
Sept 02, 2019
Android
- UXCam.optInStatus now returns correct boolean
- Integration error message will not be shown on calling optIn()
- Screens to occlude will not be remembered in next session
Aug 30, 2019
Dashboard
- UI enhancement on app setting page
- UI enhancement on screen detail page
Aug 22, 2019
iOS
Android
3.1.5
- Additional symbols from 3rd party libraries changed.
3.1.4
- Added API to create a list of screen names to not add to the timeline in automatic screen tagging mode
3.1.3
- Added marker of keyboard location to the schematic recording
- Added an 'ultra low' video quality setting
3.1.2
- Fix to mobile data upload limits
- Fix for symbol conflict in internal copy of 3rd party library
3.1.1
- Internal changes for performance and stability
3.1.0
- Change screen capture to schematic capture process
- Opt In changes to split out screen recording as specific option - **screen recording off by default**
- Fix session video when starting up with occluded screen
- Add reasons why screen video hasn't been recorded
3.0.6
- Add `occludeSensitiveViewWithoutGesture` and `occludeSensitiveScreen:hideGestures:` API methods
- Adjust work queues for event capture
- Add nullable decoration to session and user url methods
- Adjust some internal timers to handle external time changes
- Fix an orientation regression with sessions that start in landscape orientation
3.1.6
- SDK now receives activities to occlude on verification response.
- Bug Fix: sometime occludeAllTextFields() was not working correctly on the first frame of the Activity
- Bug Fix: calling occludeAllTextFields(false) continued occluding already occluded views.
- Bug Fix: Occluding Rectangle from the previous fragment was visible on the new one too.
- Bug Fix: ANR being reported multiple times.
3.1.5
- APIs to ignore screen added.
- Fixed conflict with NewRelic.
3.1.4
- Fixed conflict with Firebase performance library.
- Monthly mobile data limit implemented.
- Draw Keyboard text on-screen video.
- Support Ultra-low setting.
- occludeAllTextFields support occluding dynamic views.
3.1.3
- occludeSensitiveView() issue on DialogFragment fixed.
- SDK now sends app log.
3.1.1
- Gesture coordinate is accurate on the device where it was off by few pixels previously.
- Bug Fix: Empty zip will not be created when session video is ignored.
3.1.0
- onDraw will not be called for an invisible window.
- videosRecordedOnDevice count is now correct.
- Issue when swipe starts from scroll view and ends outside of it fixed.
- Updated unresponsive gesture detection logic, the new solution is based on onTouchEvent listener.
- Hybrid encryption and compression on session data implemented.
3.0.9
- Screen action / unresponsive gesture improvements and additional properties sent (isEnabled, class hierarchy, hierarchy count ..).
- Bug Fix: SDK now reports orientation change while video recording is off.
- Removed touch coordinate manipulations from SDK.
3.0.8
- Detect swipe on scrollView as responsive.
- Added screen action details for unresponsive gestures as well.
- Bug Fix: Screen action now doesn't depend on screen video recording.
- Screen action improvements
3.0.7
- Bug Fix: SDK now tracks screen action and unresponsive gestures.
- Sends record status and reason for discarding the video on SDK.
- Bug Fix: -ve viewed time on last activity
- Shows warning message when logEvent() or addSessionProperty() API is called before verification response is received.
Aug 02, 2019
Dashboard
- Added the feature to filter the sessions by event properties
- Added public API features. Public API allows the customers to directly access data stored on their's servers.
July 11, 2019
Dashboard
- Added app setting to turn on or off the video recording of input field
- Added button to download crash log for crashed session
- Added button to download session video
June 18, 2019
Dashboard
- Improved the user experience of user filter
- Bug fixes on login screen reported by some customer
- Updated the user experience of plan subscription
June 03, 2019
Dashboard
- Improved the user experience of session filter
May 24, 2019
Dashboard
- Added dashboard overview features
May 10, 2019
Dashboard
- Added options to export app data in CSV format
April 08, 2019
Dashboard
- Implemented light theme on the dashboard
- Added options on subscription page to set recipient email address and company address for invoice
Mar 12, 2019
Dashboard
- Added new feature to display rage clicks on session detail action bar
Feb 15, 2019
Dashboard
- Added screen entry and exit transitions graph on screen detail
- Added navigation feature to navigate between the different screenshots of a screen activity
Feb 08, 2019
React
5.0.1
- SDK released to use Android v3.0.6 and iOS v3.0.6
Feb 06, 2019
Xamarin
Dashboard
3.0.5
- SDK released to use Android v3.0.6 and iOS v3.0.6 and published on Xamarin Nugget library.
- The actual reason for not recording session video will be displayed
Feb 05, 2019
Cordova
Dashboard
3.0.2
- Cordova v3.0.2 with Android SDK v3.0.6 and iOS SDK v3.0.6 has been published to npm repository.
- Added filter option for screen page
- Improved the design of session detail, user detail and screen detail. Now the user is able to view better insights of session, user and screen details
Jan 25, 2019
Flutter
1.0.0
- flutter_uxcam v1.0.0 with Android SDK v3.0.6 and iOS SDK v3.0.6 has been published to flutter package repository.
Jan 22, 2019
Android
Dashboard
3.0.6
- Bug Fixes: No gesture was recorded when video recording was turned off.
- Uploaded Javadoc to maven repo, users will be able to see API doc from the IDE.
- allowShortBreakForAnotherApp(boolean) added to make this consistent with iOS.
- Added the option to create and save segments for filtering of user list
Jan 21, 2019
iOS
3.0.6
- Added "occludeSensitiveViewWithoutGesture" and "occludeSensitiveScreen:hideGestures:" API methods which hides gestures in occluded view and screen.
- Added nullable decoration to session and user url methods.
- Fixed an orientation regression with sessions that start in landscape orientation.
- Adjusted some internal timers to handle external time changes.
Jan 09, 2019
Xamarin
3.0.4
- SDK released to use iOS v3.0.6 Beta 9 and published on Xamarin Nugget library.
- Added "occludeSensitiveViewWithoutGesture" API method which hides gestures in occluded view and screen.
Jan 07, 2019
Dashboard
- Improved the experience of subscription.
- Added option to close the chat button at the bottom of dashboard which will re-appear when page is re-loaded.
Dec 31, 2018
Dashboard
- Added the option to create and save segments of user sessions, and improved design of Session Table.
- Improved design of user table for better overview of user information.
- Total time of session were coming in negative value if time get changes to past while app is on foreground which has now been fixed.
- Displayed sent events and their respective properties in the timeline and the action bar during session replay, and generally improved design of Session Replay page.
Dec 12, 2018
Android
Xamarin
3.0.5
- “occludeSensitiveViewWithoutGesture(View)” implemented which hides gestures on the occluded view.
- New API added “occludeSensitiveScreen(boolean hideScreen, boolean withoutGesture)” which will hide the gestures on the occluded screen view if set as “true” and vice versa.
- Exception handled while calling the API “optIn” or “optOut” before “startWithKey”.
- App icon was not sent from app that uses adaptive icon which has now been fixed.
- The session and user URL now never returns null.
- The issue with session and user URL which were coming from cache while the session were recorded in offline has been fixed.
- Total time of session were coming in negative value if time get changes to past while app is on foreground which has now been fixed.
3.0.3
- SDK released to use Android v3.0.5 and published on Xamarin Nugget library.
Dec 6, 2018
Xamarin
3.0.2
- SDK released to use Android v3.0.4 and iOS v3.0.5 and published on Xamarin Nugget library.
Nov 30, 2018
Cordova
3.0.1
Cordova v3.0.1 with Android SDK v3.0.4 and iOS SDK v3.0.5 has been published to npm repository
Nov 21, 2018
Android
3.0.4
- Removed restriction of setting user identity before setting user property.
- Exception when using API allowShortBreakForAnotherApp() and background wait limit of 3 min is reached has been fixed.
- UnoccludeSensitiveView(View) now works as expected. Exception due to MotionEvents being null on UXGestureListener handled.
Nov 20, 2018
Apple has made some internal changes in iOS 12 where during recording a session, a group of device (iPhone X, iPhone 8, iPhone 8 Plus, iPhone 7, iPhone 7 Plus) would see lagginess issue. We are in touch with Apple about this issue.
We have released a new SDK 3.0.5 with changes on how we do the recording and this would resolve the problem that you are facing.
iOS
3.0.5
- Stop recording gestures when screen recording is paused or full screen is occluded.
- Fix an issue on initial setup of data capture.
Nov 2, 2018
The new dashboard ( https://app.uxcam.com ) along with compatibleSDK were released to production. Learn more about the new product release here.
iOS
Android
React
Xamarin
Cordova
Dashboard
3.0.4
- Improvements to filter handling when the account is low on sessions left to record.
3.0.3
- Fix a session management issue.
3.0.2
- Workaround the iOS bug that causes excessive screen capture time on wide color devices.
3.0.1
- Fixing some header file deprecations to avoid ambiguous method errors in Swift.
- Improved handling of devices with low levels of available storage.
3.0.0
- Extensive refactoring of the internals of the SDK to support new features.
- Added session filters for the screen name, session duration, number of interactions.
- Added support for offline session recording Added support for data-only sessions (screens visited, number of interactions, event timeline etc. without a screen video).
- Re-factored the UXCam API on iOS and Android to be more similar and iOS to better conform with standard naming practices.
- Re-factored the event recording system to include user and session events as well as general timeline events.
3.0.3
- Improvements to filter handling when the account is low on sessions left to record.
- OOM Crash due to very large stack trace fixed.
- Improvement on swipe gesture detection.
3.0.1
- Does not record session if available storage on device is less than 100MB.
- Wrapping up the session when the app goes to the background is much fast and the session does not get corrupt when the user force close app from recent apps.
3.0.0
- If the filter is set as wifi only and the session is recorded through data and then switicing to wifi does not uploads the session which has been fixed.
3.0.0-beta.7
- Exception handled when null passed to UXCam.logEvent().
- Ignore user properties when identity is not set.
- Significant improvement on recording crashed session.
3.0.0-beta.6
- The First session while calling the API setUserIdentity() was corrupt has been fixed.
- Bug fixes in inconsistency of sending new user identity data.
- optIn() now starts the session after it is called.
- Issue on first orientation changes not registered has been fixed.
- cancelCurrentSession() ignores the whole session rather than video only.
3.0.0-beta.5
- sendSessionProperty API accepts Object as param to support all data type.
3.0.0-beta.4
- Proguard rule added to ignore OnVerificationListener.
- A quick switch of activity before verification success response was causing an issue where SDK identified Activities incorrectly.
- Issue with inconsistent total time of last activity has been fixed.
3.0.0-beta.3
- Improved timeline and gestures.
- SDK side filter implementation.
- Locale language crash fixed.
- Screenshot taker now supports Android P, black screen issue fixed.
- Wrong gesture plotting on landscape issue fixed.
- Resolution difference on orientation change on Samsung tab fixed.
- The issue caused by connectivity LAN fixed. Now any connection except mobile data is treated as WIFI.
- The crashed session was not being able to complete the encoding issue fixed.
- Timeline issue of view appeared and total time difference fixed.
- Only ignore video in case of filters and mobile data limit.
- User and Event API now supports other data types than String.
5.0.0
- SDK released to use Android v3.0.4 and iOS v3.0.5.
3.0.0
- SDK released to use Android v3.0.1 and iOS v3.0.3.
3.0.1
- SDK released to use Android v3.0.3 and iOS v3.0.5.
3.0.0
- SDK released to use Android v3.0.1 and iOS v3.0.3.
3.0.0-beta.1
- SDK released to use v3 beta version with all new APIs.
- Complete re-architecture of the product.
- Advanced Session Replay
- Offline Recording
- Advanced Rule based Recording
- Screen Analysis
- User Analysis
Learn more about these features .
View ArticleThis is a brief guide to get started with UXCam.
How does UXCam work?
UXCam helps companies to identify usability issues on their mobile applications and make informed product decisions.
In the competitive digital market, data driven decision making decides over a company’s success or failure.
The tools that traditionally track “vanity metrics” such as page visits, DAU or MAU are unable to capture large micro-interaction data sets.
These legacy tools completely miss what matters: the user.
Our auto-capture solution gathers and processes complete user interactions and journeys from multiple sources without the need for code adaptation.
We use our team’s vast experience in data analysis to automatically provide actionable insights.
UXCam’s solution includes Session Replay Analytics, Heatmap Analytics, User Analytics, Funnel Analytics and Screen Analytics. The full feature list can be found here.
Which platforms are supported?
UXCam supports native mobile apps ( iOS and Android ) including apps developed using cross-platform tools ( PhoneGap, Xamarin, React Native, Flutter ).
UXCam does not support web pages or web apps.
How easy is it to integrate?
Setting up UXCam on your app takes less than 5 minutes and requires little developmental effort.
For complete integration instructions, please refer to our developer docs.
Does it impact performance?
UXCam does not impact app performance.
Video recording is done on a background thread to maintain app responsiveness.
Recordings are uploaded when the app goes into the background to ensure no impact is made on the bandwidth during runtime of the app
You can opt to upload the recordings only when the device is connected to a Wifi network. Doing so will save the recordings on the device and upload them to the dashboard when the device is connected to Wifi.
The network bandwidth of a session is dependent ondevice size and the length of the recording.
An average 1-minute recording of a session takes 300KB data, slightly higher for games.
Will UXCam replace other analysis tools?
Most of our users integrate UXCam with other tools like Mixpanel, Crashlytics, Google Analytics, and others to complement traditional analytics with UX analysis.
What makes UXCam unique?
UXCam automatically captures every micro-interaction inside your app.
This means that you will stop missing out on issues that you didn't account for in your event tracking set up. UXCam analyzes this captured data and provides easy-to-understand actionable insights through visualization (Session Replays, Rage Tap Heatmaps, Graphs, etc.).
UXCam, unlike other analytics tools that only provide numbers, has a focus on qualitative data. To save you the time of going through it manually, UXCam automatically surfaces problematic sessions through machine learning techniques.
To sum it up:
UXCam doesn’t require event instrumentation
UXCam stops you from missing out on issues
UXCam will provide you with actionable visual insights
UXCam automatically surfaces issues
How is UXCam pricing structured?
UXCam has a limited free planand paid plans. Pricing is dependent upon the number of sessions and videos. Learn more about our plans here.
How can I find out if UXCam is the right solution for me?
We're happy to assist teams in setting up a pilot and onboard with starting to understand user behavior. To set up a trial, book a call with us.
View ArticleFirst of all:
Call UXCam.startWithKey() with UXCam.setMultiSessionRecord(false) on onCreate() of your launching Activity
Once you have done this:
Call UXCam.startNewSession on Main Activity
Call UXCam.stopApplicationAndUploadData to stop the session
View ArticleUnder this section, you can customize settings for each of your app. Remember to apply all the changes to make sure they’re implemented.
If you want to decide which videos you want to record or control your video privacy, go to this section and update your settings.
Video recording policies
The first category of settings lets you decide which videos you want to record. You can set up some rules to make sure that you record only the videos that include particular screens and last at least 10 seconds:
Video privacy control
Thanks to these options, you’re able to select on which screens we should hide all text automatically and which screens shouldn’t be recorded at all. Please, keep in mind that we hide all the passwords by default so you don’t have to worry about this!
When you hide particular screens, we don't capture gestures on these screens to not reveal any passwords or security codes. However, if you still want to see gestures on these views, you can use the "Record gesture for excluded screen" option.
Advanced policies
Under this section, you have the possibility to manage:
The video quality - we recommend using Low or Very low quality. This should be enough to understand your users’ behavior and won’t require too much cellular data.
Max number of videos to record per day - if your plan is lower than the number of sessions in your app, determine the max number of videos that can be recorded each day to make sure you won’t use your limits within a few first days of the month.
Max number of videos to record per device - decide what’s the max number of videos you want to record for each device monthly.
The number of offline videos per device - limit the occupied space on the device since the recordings are being saved on the device until they can be uploaded.
Turn off screen auto-detection for screen - add the name of all activities that should not be considered separate screens. This rule only works for SDKs with version 3.1.4 and above.
Upload video on - decide whether you want to use your users’ mobile data or maybe wifi only. If you choose an option to upload videos on WiFi, you can also choose to upload sessions (which consume much less cellular data) on mobile data. It will work for the versions equal or aboveAndroid - 3.1.12 and iOS - 3.1.9.
Max cellular data not to exceed - if you decide to use mobile data, choose the maximum monthly data volume. The average size of a session which lasts 1 minute is about 70-80kb.
View ArticleUnresponsive gestures are defined by the following: An element is touched, but it’s not an interactive element. Therefore, the gesture doesn’t result in any responses. Heatmaps of unresponsive gestures can be generated to show you elements that get attention when they shouldn’t. You can find these gestures this way:
View ArticleIf you go to a particular screen, you can see:
Heatmaps
Screen entry rates
Screen exit rates
All the sessions that include this screen
Heatmaps show you where your users usually click. By default, we show you all the gestures on the screen but you can also narrow it down to only e.g. unresponsive gestures, rage taps, 1st clicks or double-tap.
With screen entries and exits you see from which screens your users usually come to the particular screen and to which one they go. If you want to understand more of this behavior, you can check out the Screen Flow functionality.
To go into more details of your users’ behavior, watch sessions that include this screen:
View ArticleCurrently, you can delete only 20 sessions at once. If you want to get rid of all of them, delete the app.
View ArticleThe SDK by default opts-in users for UXCam recording on app installs. You can now disable and enable recording at runtime by the following API
Opt out a User
This methods stops and deletes the session in progress (if any) and disables the recording of future sessions from this user
iOS
Android
Xamarin
React-native/Cordova
+(void) optOut();
UXCam.optOut();
UXCam.OptOut();
UXCam.optOut();
The optIn/optOut setting resets to opt-In if the user un-installs and re-installs the app.
Opt in a User
The SDK by default opts-in users for UXCam recording on app installs. If the user has been disabled for UXCam recording by using the optOut method, you can use this method to enable recording at runtime.
iOS
Android
Xamarin
React-native/Cordova
+ (void) optIn();
UXCam.optIn();
UXCam.OptIn();
UXCam.optIn();
Opt in Status
This method returns the status of the user indicating whether they are currently opted in or opted out.
iOS
Android
Xamarin
React-native/Cordova
+ (BOOL) optInStatus();
boolean UXCam.optInStatus();
boolean UXCam.OptInStatus();
boolean UXCam.optInStatus();
View ArticleThe SDK hides out Password fields automatically. For the views that contain sensitive information or you do not want recording on, you can use the following API.
The recordings are blocked on the device and hence the blocked information isnot transferred to our servers.
Hide Sensitive View
Block and unblocks views on the screen that contain sensitive information which you do not want to be recorded.
iOS
Android
Xamarin
React-native
Cordova
+(void) occludeSensitiveView:(UIView*)sensitiveView;
+(void) unOccludeSensitiveView:(UIView*)view;
UXCam.occludeSensitiveView(View sensitiveView);
UXCam.occludeSensitiveViewWithoutGesture(View sensitiveView);
UXCam.unOccludeSensitiveView(View sensitiveView);
UXCam.OccludeSensitiveView(sensitiveView);
UXCam.occludeSensitiveViewWithoutGesture(sensitiveView);
<Button ref= {view => RNUxcam.occludeSensitiveView(view)}
Not supported
The API parametersare:
sensitiveView: A View object that contains sensitive information
view: The view to show again on the screen recording
Hide Sensitive Screen
Hides / un-hides screen that contains sensitive information or you do not want recording on. Call once with 'true' to start hiding the screen and later with 'false' to record normal contents again.
iOS
Android
Xamarin
React-native/Cordova
+ (void) occludeSensitiveScreen:(BOOL) occlude
UXCam.occludeSensitiveScreen(boolean occlude);
UXCam.OccludeSensitiveScreen(boolean occlude);
UXCam.occludeSensitiveScreen(boolean occlude);
The API parametersare:
occlude: Set TRUE to hide the screen from the recording, FALSE to start recording the screen contents again
Hide all TextFields
Hides / un-hides contents of ALL the Text field views in the recording. Default is NO.
iOS
Android
+ (void) occludeAllTextFields:(BOOL) occludeAll
UXCam.occludeAllTextFields(boolean occludeAll);
The API parametersare:
occludeAll:Set YES to hide all textfield views on the screen in the recording, NO to stop occluding them from the screen recording.
View ArticleFollow the instructions below for Integration
Native Integration
Manual Integration (iOS)
Manual Integration (Android)
To add UXCam to your project
yarn add react-native-ux-cam
react-native link react-native-ux-cam
Call this method on App.js, when your app starts. Your App-key is available from UXCam dashboard.
import RNUxcam from 'react-native-ux-cam';
RNUxcam.startWithKey('YOUR API KEY');
RNUxcam.optIntoSchematicRecordings();
That completes the integration process.
Your session will be shown on the dashboard within few seconds after the app goes in the background. You can optionally use the API'es for customization such as identify users from your database with UXCam, tag sessions or hide sensitive views.
Add UXCam to your project
yarn add react-native-ux-cam
Drag RNUxcam.xcodeproj file inside node_module/react-native-ux-cam/ios to your project on Libraries group on Xcode.
Click on your main project file, select Build Phases and drag the static library from the Products folder inside the Library you are importing to Link Binary With Libraries
Add UXCam to your project
yarn add react-native-ux-cam
Go to android/settings.gradle and add
include ':react-native-ux-cam'
project(':react-native-ux-cam').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-ux-cam/android')
Under dependencies, go to 'android/app/build.gradle' and add
compile project(':react-native-ux-cam')
Go to 'android/app/src/main/java/<path-to-main-application>/MainApplication.java' and add
import com.uxcam.RNUxcamPackage;
Add 'new RNUxcamPackage()'inside getPackages() like this
@Override
protected List getPackages() {
return Arrays.asList(
new MainReactPackage(),
new RNUxcamPackage()
);
}
Add the following to your file 'android/app/build.gradle' (or add the maven url to your existing repositories section)
repositories {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
maven { url "$rootDir/../node_modules/react-native/android" }
maven { url "http://sdk.uxcam.com/android/" }
}
And add this to your file 'android/app/src/main/AndroidManifest.xml', inside your '<application>' tag:
<service android:name="com.uxcam.service.HttpPostService"/>
Then inside App.js
import RNUxcam from 'react-native-ux-cam';
RNUxcam.startWithKey(‘UXCAM_APP_KEY’);
If you get this error "Unable to load script from assets 'index.android.bundle'". Then run this code in terminal, inside your react project folder
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android\app\src\main\assets\index.android.bundle --assets-dest android\app\src\main\res
Issue
We are seeing an issues with the swipes, upon implementing UXCam SDK on React Native
Problem:
You may be seeing an issue with the swipes, upon implementing UXCam on React Native. The reasoning for the issue is because, react-native touch handling is treating other gesture recognizers as though they are in competition. Hence, itwon'tlet the UXCam observing Gesture Recognizer run while there are active React-native Gesture Recognizers.
Solution:
To work around it:
Find the react-native source file: RCTTouchHandler.m
(path: $/node_modules/react-native/React/Base/RCTTouchHandler.m)
In the last method in that file edit it to be 'return NO'
so the method becomes:
(BOOL)gestureRecognizer:(__unused UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return NO;
// Same condition forfailure ofas forbe prevented by.
//return [self canBePreventedByGestureRecognizer:otherGestureRecognizer];
}
This stops the react-native touch handler from deciding that it will reject gesture recognizers for it's own views when some other part of the code is also using a UIGestureRecognizer (as UXCam is doing in this case).
This should resolve the issue that you are seeing. Please reach out to customer success team at if you need any additional help.
View ArticleWhen you sign up for UXCam and create an App, a unique App key is generated. This app-keyis used to identify sessions of your users and group them accordingly.
We recommend creating an independent app to separate the Development and Production apps (see Creating a New app, below).
Creating a New App:
To create a new app, please click on "Create a new app" on the dashboard and use the unique account-key provided on each of the independent environments and platforms.
Renaming the App
UXCam automatically creates the name of the app. If you want to rename the app, navigate to the App Settings page and click on the Edit icon.
Deleting the App
Deleting an app irreversibly deletes all the data. New sessions from your app won't be recorded.
To delete the app, click on the Edit icon, and then on "Turn Off SDK and Delete App".
View ArticleIf you want to have separate apps for different environments, e.g. staging and production (highly recommended!), create a new app and implement a separate SDK to it.
View ArticleUXCam has set a maximum upload size limit of 50 Mb per session. This equates to around 100 minutes (on low-quality video recording)
If your app requires more 100 minutes of the session each, consider:
Pausing the session during inactive period
Splitting the session into smaller parts.
Reach out to your Account Executive to adjust this setting on your account.
View ArticleNo, just like any other analytics tool, UXCam is completely anonymous to the user and doesn’t require opt-in or additional permission.However, you are required to block any Personally Identifiable and sensitive information using our API.
View ArticleWe consume about 70-80kbs for 1-minute video. However, it mostly depends on the video quality chosen by you. Here you can read how to change this setting.
View ArticleAmplitude provides event tracking and advanced reporting capabilities to gain insight to your data sets.
The following guide explains how to associate a UXCam session URL with Amplitude event enabling you tosee a step by step session replay for your every event.
Sign up and Integrate UXCam
UXCam website will walk you through how to sign up and set up UXCam. To create an Amplitude account, visit Amplitude's website.
Integrate with Amplitude
iOS
Android
/* Import UXCam and Amplitude header at the top of your AppDelegate.m */
#import "Amplitude.h"
#import <UXCam/UXCam.h>
/* Add this call as the first line of your application:didFinishLaunchingWithOptions: method */
[UXCam startWithKey:@"App-key from https://www.uxcam.com" appVariantIdentifier:nil completionBlock:^(BOOL started) {
//Tag your Amplitude events with UXCam recording URLS. Example:
NSMutableDictionary *uxcamURL = [NSMutableDictionary dictionary];
[uxcamURL setValue:[UXCam urlForCurrentSession] forKey:@"UXCam: Session Recording link"];
[uxcamURL setValue:[UXCam urlForCurrentUser] forKey:@"UXCam: User Recordings link"];
[[Amplitude instance] logEvent:@"Dropped off at Checkout Page" withEventProperties:uxcamURL];
}];
// Inside onCreate method of all activity that is an entry point to your app add
UXCam.startWithKey("App-key from UXCam");
UXCam.addVerificationListener(new UXCam.OnVerificationListener() {
@Override
public void onVerificationSuccess() {
//Tag your Amplitude events with UXCam recording URLS. Example:
JSONObject eventProperties = new JSONObject();
try {
eventProperties.put("UXCam: Session Recording link", UXCam.urlForCurrentSession());
eventProperties.put("UXCam: User Recording link", UXCam.urlForCurrentUser());
} catch (JSONException exception) {
}
Amplitude.getInstance().logEvent("UXCam URL", eventProperties);
}
@Override
public void onVerificationFailed(String errorMessage) {
}
});
UXCam URL in Amplitude
View ArticleUXCam offers seamless integrations with products you already use by tagging UXCam’s session and user’s URL, extending UXCam capabilities and enhancing your current workflow.
UXCam User URLs
This returns a URL path for showing all the current users sessions. This can be used for tying in the current user with other analytics systems.
iOS
Android
Xamarin
React-native/Cordova
+ (NSString*) urlForCurrentUser;
UXCam.urlForCurrentUser();
UXCam.UrlForCurrentUser();
UXCam.urlForCurrentUser();
UXCam Session URLs
This returns a URL path that shows the current session when it completes. This can be used for tying in the current user with other analytics systems
iOS
Android
Xamarin
React-native/Cordova
+ (NSString*) urlForCurrentSession;
UXCam.urlForCurrentSession();
UXCam.UrlForCurrentSession();
UXCam.urlForCurrentSession();
View Article
The best idea is to create separate apps for each environment, e.g. staging and production. You can read more about it here.
View ArticleUnder this section, you can change your name and password.
View ArticleUnder the Users section, you’re able to find all the users that have at least one session recorded with their properties. This is the best place to find particular users and watch all their sessions. Each user gets a default alias which is a random name generated based on the location.
View ArticleWhen you log in to UXCam, you can find an overview of the usage and UX statistics.
Decide which period is interesting for you: 24 hours, 7 days or 30 days and check your app usage and its trends.
Under the Usage section, you’re able to find out:
How many users visited your app in a specific period
How many sessions were recorded
What your top event is
What your top app version is
What the average session duration was
How many rage gestured occurred
You can also observe trends and check how these numbers changed in comparison to the previous period.
View ArticleUXCam, by default, video records all sessions.Event-triggered video recording allows you to only capture the videos that are most important to you.
The session metadata & timeline information will still be captured, even if the session isn’t set to track with video recording.
Event-triggered video-recording conditions are specific to each application, henceforth you’ll set up a separate set of conditions for each app. This will give you the freedom to customize your conditions and prioritize sessions to be recorded based on your specific use case.
Default Video Recording Policy
When UXCam is first integrated into your application, the recording policy is set to video record all sessions.
When you click on “Add New Rule”, it shows a variety of video recording options.
Advanced Video Recording Policy
Video Quality: This setting defines the video quality of the recording. There are 4 levels of video recording quality (Ultra Low, Very Low, Low, High).
Max. videos to record per day: This allows you to set the number of videos to be recorded in a day (following UTC time).
Max. videos to record per device:This allows you to set the number of videos to record per device. Once the total videos defined here are recorded, only meta-sessions will be recorded.
Number of Offline videos per device:This allows you to set the number of videos to record when the device is Offline. The video is uploaded when the user uses the app with a valid connectivity. You can filter offline sessions on the dashboard, by clicking on Offline Sessions -> Yes.
Turn off auto-detection on screens: UXCam automatically detects the screen. If you have internal screens that you do not want to detect, please select them on this list.
Events for triggering the video recording
Click on “Add New Rule”, to see the various triggers for the video recording options.
The following list explains the various video recording triggers:
Screen Visited: The video is uploaded only if the user visits the select screens on the app.When making changes to specific screens, it can be helpful to see how users interact with the changes, this setting enables you to ensure recording those sessions.
Events:The video will only be uploaded if the user performs a certain event on the app. When focusing on a specific business process, which you made an event for, it is useful to have record videos for that event.
Crashed: The video will only be uploaded if the app crashed. This allowsdevelopers to easily reproduce bugs & crashes, which saves time & cost.
Number of Interactions:The video is uploaded only if the user has performed selected numbers of touch (tap, swipe, scroll) interactions.
Duration:The video is uploaded only if the app sessions are longer/shorter than a certain period.
Country:The video is recorded for selected countries only.
Date: The video was recorded during the selected dates.
App Version: The video is recorded for selected app versions.
SDK Version:The video is recorded for selected SDK versions.
OS Version:The video is recorded for selected OS versions.
Model:The video is recorded for selected device models.
Video Upload Policy
The video upload policy allows the configuration of video upload on Wifi or Cellular network.
If the video is not uploaded because of the condition set above, the video will be stored on the device. The SDK will upload the videos on the next run of the app.
View ArticleThanks to UXCam, you can easily find out who is your loyal user and who is slipping away. It's worth watching sessions of these users to understand their behavior patterns. Thanks to this, you can find out what to do to convert users whowant to leave your app soon into the loyal ones.
Just go toUsers, click on the search field and choose theSlipping Awaysegment:
View ArticleAt UXCam, we automatically catch the crashed sessions of your users. If you want to find them, go toSessions, click on the search and choose one of the default segments created by us calledCrashed sessions.
View ArticleHere is an example which you can reference. However, please consult your lawyer before using it:
THIRD PARTY SOFTWARE/SERVICE PROVIDERS
We may use UXCam, which is an analytics solution. UXCam may record:Screens visited, Interaction patterns (such as screen actions, gestures: taps, scrolls) and Device details (Type, Version, Model, Operating System). We are using the information collected by UXCam to improve our app.
UXCam does not collect personally identifiable information and does not track your browsing habits across apps. For more information see Privacy Policy for Information Collected by the UXCam Service.
View ArticleThis is a brief guide to help you get your UX analysis to the next level.
Invite Members to your Team
You can invite additional members of your team to the UXCam dashboard by navigating to the Team tab under App settings and then entering the email address and the access level.
Access can be set on a granular level individually for each app.
Block Personally Identifiable Information
Personally Identifiable Information (PII) of your usersshould be excluded from being recording.
We provide various client-side API to block sensitive views. These method prevents sensitive information from being recorded and hence ever leaving the user's device.
Send Additional Information
You can send additional information to our dashboard and customize it to your needs.
Events and Event Properties: You can attach events and event properties to each session, allowing you to filter sessions and analyze based on events.
User Name and Information: You can attach Unique ID and User Properties,allowing you to easily search for users based on names and properties.
Customize Screen Names
UXCam captures the name of screens automatically. You can rename the screen names, using this API.
Select what sessions to record
UXCam, by default, records all sessions. You can opt to record a fraction of sessions or choose to do rule-based recording (based on parameters such as if the app crashes or user visits certain screen).
To change the default settings, navigate tothe Rule-based Recording under App Settings page.
Attach Session Replay to your existing tools
UXCam sessions can be attached to your existing tools (such as Mixpanel, Crashlytics, Google Analytics, and Others), allowing to get visual context to your crash reporting, support request, quantitative data and more.
View ArticleFirebase Google Analytics provides event tracking and advanced reporting capabilities to gain insights into your data sets.
The following guide explains how to associate a UXCam URL with a Firebase Google Analytics event enabling you tosee a step by step session replay for your every event.
Sign up and Integrate UXCam
UXCam website will walk you through how to sign up and set up UXCam. To create a Firebase Google Analytics account, visit this website.
Setup Firebase Google Analytics for Integration
On Google Analytics, navigate to Admin. Then, in the Property column, select Custom Definitions -> Custom Dimension
Android
Click +New Custom Dimension
Name the custom Dimension "UXCam session URL".
You will see the new dimension on the Custom Dimension list. Please note the INDEX of this, as we will be using it on the next step to replace it withCUSTOM_DIMENSION_INDEX_FROM_GOOGLEANALYTICS
Integrate with Firebase Google Analytics
iOS
/* Import UXCam and Google Analytics header at the top of your AppDelegate.m */
#import "GAI.h"
#import "GAIFields.h"
#import "GAIDictionaryBuilder.h"
#import <UXCam/UXCam.h>
/* Add this call as the first line of your application:didFinishLaunchingWithOptions: method */
[UXCam startWithKey:@"App-key from https://www.uxcam.com" appVariantIdentifier:nil completionBlock:^(BOOL started) {
//Tag your Google Analytics events with UXCam recording URLS. Example:
NSMutableDictionary *uxcamURL = [NSMutableDictionary dictionary];
[uxcamURL setValue:[UXCam urlForCurrentSession] forKey:@"UXCam: Session Recording link"];
id tracker = [[GAI sharedInstance] defaultTracker];
[tracker set:[GAIFields customDimensionForIndex:CUSTOM_DIMENSION_INDEX_FROM_GOOGLEANALYTICS] value:uxcamURL];
[tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"UXCam" action:@"Init" label:nil value:nil] build]];
}];
// Inside onCreate method of all activity that is an entry point to your app add
UXCam.startWithKey("App-key from UXCam");
UXCam.addVerificationListener(new UXCam.OnVerificationListener() {
@Override
public void onVerificationSuccess() {
//Tag your Google Analytics events with UXCam recording URLS. Example:
JSONObject eventProperties = new JSONObject();
try {
eventProperties.put("UXCam: Session Recording link", UXCam.urlForCurrentSession());
} catch (JSONException exception) {
}
tracker.set(Fields.customDimension(CUSTOM_DIMENSION_INDEX_FROM_GOOGLEANALYTICS),eventProperties); }
@Override public void onVerificationFailed(String errorMessage) { } });
View ArticleFirebase Crashlytics provides real-time monitoring of crashes and the exact line of code your app crashed on.
The following guide explains how to associate a UXCam session URL with the Firebase Crashlytics event enabling you tosee a step by step session replay for your every event.
Sign up and Integrate UXCam
UXCam website will walk you through how to sign up and set up the UXCam account. To create a Firebase Crashlytics account, visit the Firebase Crashlytics's website.
Integrate with Crashlytics
Objective C
Swift
Android
// Import UXCam and Crashlytics header at the top of your AppDelegate.m
#import <Fabric/Fabric.h>
#import <Crashlytics/Crashlytics.h>
#import <UXCam/UXCam.h>
// Add this call as the first line of your
// application:didFinishLaunchingWithOptions: method
[Fabric with:@[[Crashlytics class]]];
[UXCam startWithKey:@"App-key from https://www.uxcam.com" appVariantIdentifier:nil completionBlock:^(BOOL started) {
if (started) {
[[Crashlytics sharedInstance] setObjectValue:[UXCam urlForCurrentSession] forKey:@"UXCam: Session Recording link"];
[[Crashlytics sharedInstance] setObjectValue:[UXCam urlForCurrentUser] forKey:@"UXCam: User Recordings link"];
}
else {
NSLog(@“UXCam session did not start recording”);
}
}];
//Import UXCam and Crashlytics header at the top of your AppDelegate.swift
import UXCam
import Fabric
import Crashlytics
// Add this call as the first line of your application:didFinishLaunchingWithOptions: method
Fabric.with([Crashlytics.self])
UXCam.startWithKey(_:"App-key from UXCam",
appVariantIdentifier: nil,
completionBlock: {(started : Bool) in
if started
{
let userURL = UXCam.urlForCurrentUser;
let sessionURL = UXCam.urlForCurrentSession;
Crashlytics.sharedInstance().setObjectValue(_:sessionURL(), forKey: "UXCam: Session Recording link")
Crashlytics.sharedInstance().setObjectValue(_:userURL(), forKey: "UXCam: User Recordings link")
}
else
{
print("UXCam session did not start recording")
}
} );
// Override point for customization after application launch.
return true
}
// Inside onCreate method of all activity that is an entry point to your app add
UXCam.startWithKey("App-key from UXCam");
UXCam.addVerificationListener(new UXCam.OnVerificationListener() {
@Override
public void onVerificationSuccess() {
Crashlytics.setString("UXCam: Session Recording link", UXCam.urlForCurrentSession());
Crashlytics.setString("UXCam: User Recordings link", UXCam.urlForCurrentUser());
}
@Override
public void onVerificationFailed(String errorMessage) {
}
});
UXCam URL in the Firebase Crashlytics
View ArticleUXCam has a limited free plan and paid plans. Pricing is dependent upon the number of session and video. Here are the plan details. https://uxcam.com/plans
View ArticleWith this option, you’re able to export all the raw data about sessions, events and users from your account. The .csv file will be sent to your email address.
View ArticleAliases are created automatically, based on the location of the user. You can always replace it with a custom property uploaded by you. Click here to read more about it.
View ArticleTo export data from your account, click on your app name and clickExport data. Please, keep in mind that this feature is not available on all the plans. Here you can read more about exporting data.
View ArticleWe recommend using low or very low quality. It should be enough to understand your users' behavior and it won't consume too much mobile data. Here you can see where to change this setting.
View ArticleIf some of the screens are red, it means that they were blocked by your developers.
View ArticleYes, we store the sessions until the user connects to the Internet. In the recording settings, you can also choose if you want to use only wifi or mobile data too. Click here to read more about it.
View Article