App Sensor Integration FAQ

Answers to common questions about integrating the Conviva App SDK, including platform support, identity sync, cookies, auto-collection, blocklists, and performance impact.

Updated 2026-10-12 eco, integration, faq, sensor developer center, tools, eco integration

The Conviva App SDK consists of several basic scripts accessible from the Conviva GitHub Repositories with basic README instructions and the related script files for each supported application platform. Lightweight integration of Conviva App Sensor enables automatic, semantic-less data collection. Deploy custom events for advanced metrics and dimension analysis.

Use these FAQs to help answer common questions related to App SDK integration and platform support.

FAQs

Category

Question

Answer

Platform and Frameworks

Which platforms are supported by the App SDK?

Use these links to access details for each platform.

Which frameworks and libraries are supported for auto-collection?

See the support details:

Web Apps with Multiple Sub-Domains and Native/Webview Hybrid Apps

How does Conviva preserve end-to-end user journeys across subdomains, native apps, and webviews?

When the Conviva App SDK initializes on an app instance for the first time, it generates a Client ID — a unique, Conviva-owned identifier used to attribute events to a single, continuous user. This ID contains no Personally Identifiable Information (PII) and exists only to distinguish one user's activity from another's inside Conviva's analytics. For more details, see Conviva Identity Sync Guide.

Conviva Cookies Usage

What Conviva stores; why it is essential; and how it aligns with privacy frameworks?

Conviva creates a limited set of cookies that are required for the core functionality of our service. These cookies are considered essential cookies and ensure accurate measurement, analytics, and reporting. Importantly, Conviva does not store any Personally Identifiable Information (PII) within these cookies. For more details, see Conviva Cookies Usage.

React Native app that uses Expo Router

How do I track screen views in a React Native app that uses Expo Router?

Expo Router does not work with Conviva's existing screen-view auto-tracking helper. Track screen views manually by calling trackScreenViewEvent() from your root layout. For more details, see Conviva Expo Router Screen Tracking.

Storage Requirement

What is the device local storage requirement of the App SDK?

Events will be dispatched with 250KB size limit or 5 seconds interval.

Initialization

When should I initialize the App SDK?

Conviva SDK should be initialized as early as possible, preferably before the first screen loads and first HTTP client object is created.

Events Auto-Collected

Which events are auto-collected by the App SDK?

Reference to App Metrics.

Events Video to App

How do I send events from the Video SDK to the App SDK?

With these Video SDK and App SDK versions, Conviva automatically sends video events to the App SDK:

Minimum Version App SDK Minimum Version Video SDK
Android 0.5.2 4.0.30
iOS 0.2.10 4.0.31
JS SDK 0.3.17 4.5.13
C SDK 2.184.0.1 No
Roku 0.2.3 No
Rust 1.0.4 No
React Native 0.2.0 No
Flutter 0.3.9 No

For more details about event support, see Getting Started with Events.

Events and Tags

What is the difference between custom event and custom tag. When to use events or tags?

Custom events need to be used when a specific event needs to be reported from the app at a specific time and with all the details.

Custom tag is recommended when some specific information needs to be reported that remains static through the app sessions (such as device model).

Performance Impact

Will there be any performance impact if I include the App SDK in my app?

CPU Performance impact due to Android, iOS, and JS SDK's is 0.5-1%

Logging Levels

What is the recommended log level setting during testing vs production?

Conviva recommends:

  • Disable logging in production

  • Enable it on verbose mode in debug builds.

Performance KPI validation needs to be executed on Production builds.

Other Analytics Tools

We use other analytics in our app. Does the order in which we initialize them matter?

No, the order does not matter.

Validation

How do I verify if my instrumentation is correct?

Verify the basic integrations steps in the integration guide and then access Conviva Pulse to verify the metrics and metadata based on the integrated data.

Troubleshooting and Data Monitoring

Why is the App SDK not monitoring data after instrumentation?

Verify that the tracker is initialized with the correct customer key and app name.

Why are some of my network requests missing?

After app startup, the app uses a remote config to decide which analytics to initialize. Is that a problem?

Not initializing the App SDK at the time of app launch may cause some events to not be reported.

Also, the app launch time values may not be reported accurately.

Which network requests does the App SDK block by default.

Check the default blocklists:

Android Support Details

Android FAQs, Gradle plugin dependencies, blocklist, and auto-collection details

Android FAQs

Question

Answer

Which devices are currently supported by the SDK?
  • Android Mobile

  • Android Tablets

  • Android Smart TV’s

Which development frameworks are currently supported by the SDK?
  • Android Native

  • Jetpack Compose

What is the target SDK version? The SDK is targeted for Android 14 (API level 34).
What is the minimum Android version required to use the SDK? To use the SDK, the devices should run on at least Android 5.0 (Lollipop) version (API level 21).
Which network requests does the App SDK block by default. Check the default SDK blocklist.
What is the size of the Android App SDK? 230 KB (approximate size)
How to get and set the Client ID?
  • Get Client ID:
ConvivaAppAnalytics.getClientId(context);
  • Set Client ID:
ConvivaAppAnalytics.setClientId(context, "client-id");
How do I track events if they are not auto-collected?

Use the trackCustomEvent() API to track all kinds of events. This API provides 2 fields to describe the tracked events:

// eventName - Name of the custom event
// eventData - Data in a JSONObject or a JSON-formatted String
// Set up the event properties JSONObject
JSONObject eventDataJSON = new JSONObject();
eventDataJSON.put("identifier1", intValue);
eventDataJSON.put("identifier2", boolValue);
eventDataJSON.put("identifier3", "stringValue");

String eventName = "your-event-name";

tracker.trackCustomEvent(eventName, eventDataJSON);

Why are some events that are supposed to be auto-collected not reported?

Add the following proguard rules to keep Conviva SDK classes from obfuscation.

-keepnames class * extends android.view.View
-keep, allowshrinking class com.conviva.** { *; }
The Android application is crashing during runtime after adding the App SDK. What could be the reason?

If multidex is enabled and a multidex-config.pro is being used by the application, please add the following rule to the config.pro – CadActive file.

-keep class com.conviva.** { *; }

Exclude any classes that you do not want Conviva to track.

// For Android Gradle Plugin version <7.0
// in the app build.gradle
...
android {
...
conviva {
excludePackages = ["com/example/.",
"org/example/."]
}
...
}
// For Android Gradle Plugin version >=7.2
// in the app build.gradle
...
android {
...
conviva {
excludePackages = ["com/example/",
"org/example/"]
}
...
}

Android Gradle Plugin Dependencies

Android Gradle Version Conviva Sensor Version Conviva Plugin Version
Any Android Gradle Version >=0.9.3 0.3.5
7.2 and above >=0.9.0 0.3.3
below 7.2 >=0.9.1 0.2.4
below 7.2 0.9.0 0.2.3

(Mobile Only) Impact to Download/Install Size

Increase in Install Size due to Conviva - 250KB (measured in 0.9.7)

Increase in CPU Usage due to Conviva

(0.5 - 4 %) (measured in 0.9.7)

Network Requests Tracking Blocklist for Android

Network requests tracking is blocked for the default URL patterns:

/ctp

/wsg pings.conviva.com

.m3u8

.mpd .ism

.m4

.ts .jpeg
.jpg .png .bmp
google-analytics.com googlesyndication.com googleapis
stats.g.doubleclick chartbeat.com omtrdc.net
app-measurement.com firebase newrelic
bitmovin.com/impression bitmovin.com/analytics api.segment.io
youbora // NPAW! hotjar mixpanel.com
nr-data.net clevertap auryc // heap.io
.aac .vtt .googlevideo
webp appsflyer facebook
dynatrace mparticle npaw
doubleclick .pdf bookkeeper
kochava mp3 marketingcloudapis
demdex scorecardresearch lura.live
perimeterx.net permutive.app segment.com
vaicore.site boomtrain ketchcdn
qualtrics .svg amplitude
datadoghq branch.io hotjar
splunkcloud heap

Autocollection Details/Limitations

Sensor Version on which the implementation details or limitations are added: 0.9.4

Feature Implementation Details / Limitations Explanation
Network Request

We support only the

  • OKHTTP3 execute/enqueue

  • OKHTTP3 retrofit execute/enqueue

  • HTTPURLConnection/HTTPSURLConnection

Response and Request Body atributes are collected only when the:

  • size is < 10kb and the content-length is available

  • content-type is "json" or "text/plain"

  • data is a JSONObject or Nested JSONObject or JSONArray

Response and Request Headers are collected only when the:

  • data is a JSONObject, Nested JSONObject and JSONArray
  • server is provisioned with "Access-Control-Expose-Headers:"*
Screenview

We support:

  • Activities

  • Android Fragments

  • Jetpack Compose

App or Screen Load times

We support only:

  • Activities

Doesn’t support the:

  • Android Fragments

  • Jetpack Compose

As the screen load times are not reliable and are inaccurate for Fragments/Compose, we will not be able to collect it in future as well.

User Click Tracking

We support any clickable element clicking for:

  • Android Native

  • Jetpack Compose

Traceparent Header Generation

Supported for each request with new traceparent id

App Crashes

We support collecting:

  • Any crash after conviva is initialised

  • Will be trying to send the crash details before the application exits due to crash

We don't support:

  • Any crash before conviva is initialised

Conviva Android SDK listens to the unhandled exceptions leading to app crashes and attempts sending the crash events before app exits. If an app crash event is not sent before the app exists, SDK attempts to send that crash event only after the next app launch, which will be discarded if sent after 90 seconds of original crash timestamp.

iOS Support Details

iOS FAQs, performance impact, blocklist, and auto-collection details

iOS FAQs

Question

Answer

Which Apple devices are currently supported by the SDK?
  • Apple iPhones (iOS)

  • Apple TV (tvOS)

Does the SDK support Apple Watch (watchOS)? No, Apple Watch is not supported at this time.
Which development frameworks are supported by the SDK?
  • Apple Native

  • Swift UI

What is the size of the iOS App SDK? 700 KB (approximate size)
Which network requests does the App SDK block by default. Check the default SDK blocklist.
How to get and set the Client ID?
  • Get Client ID:
//Swift:
let clientId = CATAppAnalytics.sharedInstance()?.getClientId();

//ObjC:
NSString *clid = [[CATAppAnalytics sharedInstance] getClientId];
  • Set Client ID:
//Swift:
CATAppAnalytics.sharedInstance()?.setClientId(clientId);

//ObjC:
[[CATAppAnalytics sharedInstance] setClientId:clid];
How do I track events if they are not auto-collected?

Use the two APIs to track custom events:

/**
* Track custom event.
* @param name Name of the custom event.
* @param data A JSON-formatted string.
 */
- (void)trackCustomEvent:(NSString *)name data:(nonnull NSString*)data;

/**
* Track custom event.
* @param name Name of the custom event.
* @param eventData Dictionary/Array of dictionaries.
 */
- (void)trackCustomEvent:(NSString *)name eventData:(nonnull id)eventData;

Examples:

// Swift:
var eventData = ["identifier1":"test","identifier2":1,"identifier3":true] as [String : Any]
tracker?.trackCustomEvent("your-event-name", eventData: eventData)
// ObjC:
NSDictionary *data = @{@"identifier1":@"test",@"identifier2":@(1),@"identifier3":@(true)};
[self trackCustomEvent:@"your-event-name" eventData:data];
The iOS/tvOS application is crashing during compilation after adding the App SDK. What could be the reason?

Verify you have added "-ObjC" in Other Linker Flags section in Xcode.

Impact to Download/Install Size

Increase in Install Size due to Conviva - 700 KB

(Mobile Only) Performance Impact(CPU Usage):

  • Streaming is on while taking samples

  • Sent 100 network requests with 50 in parallel

  • Used get request as mentioned in video

Sl No Feature set CPU Usage
1 Without Conviva App Sensor 29.1%
2 With Conviva App Sensor v0.2.28 37%

Network Requests Tracking Blocklist for iOS

Network requests tracking is blocked for the default URL patterns:

/ctp

/wsg conviva.com
remote_config.json nr-data.net firebase

app-analytics-services.com

newrelic googleapis
.bitmovin.com/impression bitmovin.com/analytics omtrdc.net
chartbeat.com stats.g.doubleclick app-measurement.com
mixpanel.com hotjar google-analytics.com
doubleclick.net googlesyndication.com api.segment.io
youbora auryc heap
clevertap .m3u8 .ts
.m4 .mp4 .mpd
.ism .jpg .png
.jpeg .bmp .aac
.vtt .googlevideo webp
appsflyer facebook dynatrace
mparticle npaw doubleclick
.pdf bookkeeper kochava
mp3 marketingcloudapis demdex
scorecardresearch lura.live perimeterx.net
permutive.app segment.com vaicore.site
boomtrain ketchcdn qualtrics
.svg amplitude datadoghq
branch.io hotjar splunkcloud

Auto-collection Details / Limitations

Feature

Implementation Details / Limitations

Explanation

Traceparent Header Generation

Not Implemented yet, Once implemented will be auto-collected.

No planned date as of now.

Application Not Responding

Not Implemented yet, Once implemented will be auto-collected.

No planned date as of now.

Network Request

Supports

  • NSURLSession

  • NSURLConnection

Screen View

We support:

  • iOS/ tvOS Native

  • Swift UI

App Crashes

We support collecting:

  • Any exception after conviva is initialised

  • Will be trying to send the crash details before the application exits due to crash

We don't support:

  • Any crash before conviva is initialised

  • If we cannot send before the application exit, it will be attempted only after next launch, which will be discarded if sent after 90 seconds of original crash

  • Memory corruptions & dangling pointers crashes (EXC_BAD_ACCESS KERN_INVALID_ADDRESS) are missing

Web (JS/React) Support Details

Web (JS/React) FAQs, performance impact, blocklist, and auto-collection details

Web (JS/React) FAQs

Question

Answer

Which devices are supported by the SDK?
  • All Web Browsers

  • Smart TV’s Web Apps

Which development frameworks are supported by the SDK?
  • HTML-based Web Apps

  • React-based Web Apps

  • Angular-based Web Apps

What is the size of the JS (Web) App SDK? 141 KB (approximate size)
Which network requests does the App SDK block by default. Check the default SDK blocklist.
What defines a 'page view' event in an app?

The definition of a page view event depends on the type of application:

  • For Multi-Page Applications (MPAs), each full page load counts as a new view.

  • For Single-Page Applications (SPAs), a page view may be triggered by a route or URL path change.

Optionally call trackPageView() based on how navigation is handled in the specific app, to enable the associated metric Average Largest Contentful Paint Time.

Is the trackPageView() call mandatory for tracking page view events? No, the trackPageView() call is optional for the Conviva JS SDK. However, most customers use it to track the page views and collect important metric Average Largest Contentful Paint Time.
When should I call trackPageView()?

Call trackPageView() whenever a significant page navigation occurs, such as a full page load, route change, or in-app view transition, to track page views. You have complete control over when to trigger trackPageView(). Conviva recommends calling trackPageView() only after a page is ready, meaning the content is both visible and usable. Avoid invoking it during the initial DOM load.

Example:

trackPageView(); // Uses document.title
trackPageView({ title: "Custom Page Title" });
What if I forget to call trackPageView()?

If you skip the trackPageView() call during a navigation event, that page view won’t be recorded. Hence, the associated metric (Average Largest Contentful Paint Time) will not be displayed correctly in the Pulse dashboard. Remember, Conviva does not auto-capture any missing page views.

How to get and set the Client ID?
  • Get Client ID:
import {
	convivaAppTracker,
	getClientId,
} from '@convivainc/conviva-js-appanalytics';

convivaAppTracker({
	appId: 'YOUR_APP_NAME_AS_STRING',
	convivaCustomerKey: 'CONVIVA_ACCOUNT_CUSTOMER_KEY',
	appVersion: '1.1.0',
});

// Always call getClientId() after initializing convivaAppTracker()
clientId = getClientId();
  • Set Client ID:
import {
	convivaAppTracker,
	getClientId,
} from '@convivainc/conviva-js-appanalytics';

// Always call setClientId() before initializing convivaAppTracker() to set a specific clientId
setClientId(clientId);

convivaAppTracker({
	appId: 'YOUR_APP_NAME_AS_STRING',
	convivaCustomerKey: 'CONVIVA_ACCOUNT_CUSTOMER_KEY',
	appVersion: '1.1.0',
});
How do I track events if they are not auto-collected?

Use the trackCustomEvent() API to track all kinds of events that are not auto-collected.

This API provides 2 fields to describe the tracked events:

name - Name of the custom event

data - Any type of data in JSON format.

import { trackCustomEvent } from '@convivainc/conviva-js-appanalytics';

let customData = {
	identifier1: 'test',
	identifier2: 1,
	identifier3: true,
};

trackCustomEvent({
	name: 'Custom Event Name',
	data: customData,
});

Why are my application page views not being auto-collected?

When you navigate within a single-page application, new pages are not loaded, so they will not be tracked as page views.

To track page views in single page applications, call the trackpageview API.

Is Conviva SDK hosted on a CDN?

Conviva prefers using npm as it improves the speed of execution at app startup. Due to this reason, it is not hosted on a CDN.

To host the App SDK on a CDN, use the script version of the JS App SDK: GitHub - Conviva/conviva-js-script-appanalytics: App analytics sensor specially made for JS script tag based integrations.

Impact to Download/Install Size

Sensor Version Download Size
v0.6.8 141KB

(Web Only) Performance Impact

These results based on actual Conviva customer data.

Process Memory

For web applications the AverageUsage(Mbytes) is calculated based on the actual running time of the web application.

MinUsage, MaxUsage, AverageUsage refer to the process memory (Mbytes) used during a video player application.

App config MinUsage **( Mbytes ) MaxUsage ( Mbytes ) AverageUsage ( Mbytes ) Duration
Conviva App Sensor v0.6.8 28.3 180.64 101.60 7 minutes 22 seconds
Without Conviva App Sensor 22.36 179.62 103.42 7 minutes 46 seconds

Network

AverageReceivedSpeed :- Referring to the average data receive speed over network(KB/sec) in a given duration,

AverageSendSpeed: Referring to the average data send speed over network(KB/sec) in a given duration.

SendTotal: Referring to the total data send over network(KB) in a given duration.

Network Requests Tracking Blocklist for Web (JS/React)

Network requests tracking is blocked for the default URL patterns:
cws.conviva.com /wsg /ctp
remote_config pings.conviva.com .m3u8
.mpd .ism .m4
.mp4 .ts .png
.jpg .jpeg .bmp
google-analytics.com googlesyndication.com googleapis
stats.g.doubleclick chartbeat.com omtrdc.net
app-measurement.com firebase nr-data.net
newrelic bitmovin.com/impression bitmovin.com/analytics
api.segment.io youbora hotjar
mixpanel.com clevertap auryc
.aac .vtt .googlevideo
webp appsflyer facebook
dynatrace mparticle npaw
.pdf bookkeeper kochava
mp3 marketingcloudapis demdex
scorecardresearch lura.live perimeterx.net
permutive.app segment.com vaicore.site
boomtrain ketchcdn qualtrics
.svg amplitude datadoghq
branch.io hotjar splunkcloud

Auto-collection Details/Limitations

Sensor Version on which the implementation details or limitations are added: 0.6.8

Feature Implementation/Limitations

Network Request

We support only :

  • XMLHttpRequest

  • fetch

Page View

Page Title can be passed as part of trackPageView api, if title is not set then page title is autodetected using api document.title when trackPageView api is called.

Button Click Tracking

We support click on input element type button or if element tag name is button.

if customer application adds stopPropagation or preventDefault in there button click event listener then conviva will not be able to detect the click.

Link Click Tracking

We support link click tracking on element if element tag name is .

if customer application adds stopPropagation or preventDefault in there link click event listener then conviva will not be able to detect the click.

Application Not Responding

Not Implemented yet, implemented will be

Autocollected