SDK API reference
GDPR / Identification
Section titled GDPR / IdentificationCSQ.optIn()
Section titled CSQ.optIn()1.0.0
Get user consent.
Calling this API generates a user ID and initiates tracking.
CSQ.optIn()
[CSQ optIn];
Parameters
Section titled ParametersNo parameters.
CSQ.optOut()
Section titled CSQ.optOut()1.0.0
Revoke user consent, remove stored userID
.
Stop CSQ SDK, flush, and clear all data.
CSQ.optOut()
[CSQ optOut];
Parameters
Section titled ParametersNo parameters.
CSQ.identify()
Section titled CSQ.identify()Product Analytics | Added in: 1.0.0
Assigns an identity to be associated with the current user.
This assigns the identity to all events for the user ID and lets the analysis module merge multiple user IDs with the same identity.
This should be called only after Product Analytics is configured and the SDK started. It’s safe to call multiple times with the same value. Please always provide a value that will be unique to this user. Setting values like “guest”, “anonymous”, “unauthenticated” or similar will merge all those users into a single user profile.
CSQ.identify("userIdentity")
[CSQ identify:@"userIdentity"];
Parameters
Section titled Parameters-
identity String (<= 100 chars)
Identity to be associated with the current user.
CSQ.resetIdentity()
Section titled CSQ.resetIdentity()1.0.0
If the user was previously identified with identify()
, this creates a new unidentified user and session. This is technically similar to calling optOut()
then optIn()
.
This should be called only after Product Analytics is configured and the SDK started.
CSQ.resetIdentity()
[CSQ resetIdentity];
Parameters
Section titled ParametersNo parameters.
CSQ.metadata.*****
Section titled CSQ.metadata.*****1.0.0
Get all the information related to the user and project.
CSQ.metadata.userID
Section titled CSQ.metadata.userIDIdentifier of the current user. This is an identifier from Product Analytics by default or Digital Experience Analytics if PA is not active.
let userID = CSQ.metadata.userID
NSString *userID = [[CSQ metadata] userID];
CSQ.metadata.sessionID
Section titled CSQ.metadata.sessionIDSession identifier. This is an identifier from Digital Experience Analytics by default or Product Analytics if DXA is not active.
let sessionID = CSQ.metadata.sessionID
NSString *sessionID = [[CSQ metadata] sessionID];
CSQ.metadata.projectID
Section titled CSQ.metadata.projectIDProject identifier for Digitial Experience Analytics.
let projectID = CSQ.metadata.projectID
NSString *projectID = [[CSQ metadata] projectID];
CSQ.metadata.environmentID
Section titled CSQ.metadata.environmentIDEnvironment identifier for Digitial Experience Analytics.
let environmentID = CSQ.metadata.environmentID
NSString *environmentID = [[CSQ metadata] environmentID];
CSQ.metadata.sessionReplayURL
Section titled CSQ.metadata.sessionReplayURLURL of current session replay.
let sessionReplayURL = CSQ.metadata.sessionReplayURL
NSString *sessionReplayURL = [[CSQ metadata] sessionReplayURL];
CSQ.metadata.identity
Section titled CSQ.metadata.identityIdentity associated with the user by calling identify()
.
let identity = CSQ.metadata.identity
NSString *identity = [[CSQ metadata] identity];
CSQ.metadata.onChange()
Section titled CSQ.metadata.onChange()1.0.0
A block triggered each time user information is updated. For example when sessionReplayURL
becomes available or userID
updates. Set this block to subscribe to the updates. Contentsquare will call this block with updated metadata.
CSQ.metadata.onChange { metadata in // Handle information change}
[[CSQ metadata] onChange:^(CSQMetadata *metadata) { // Handle information change}];
Parameters
Section titled Parameters-
metadata Metadata
Metadata associated with the current user and project.
Logging
Section titled LoggingCSQ.debug.logLevel
Section titled CSQ.debug.logLevel1.0.0
Gets or sets the current log level.
CSQ.debug.logLevel = .debug
[[CSQ debug] setLogLevel:CSQLogLevelDebug];
Parameters
Section titled Parameters-
level Enum (CSQ.Log.Level)
Possible values:
none
,trace
,debug
,info
,warn
,error
, orimportant
.
CSQ.debug.logChannel
Section titled CSQ.debug.logChannelProduct Analytics | Added in: 1.0.0
Gets or sets the LogChannel
to which send log messages.
CSQ.debug.logChannel = customLogChannel
[[CSQ debug] setLogChannel:customLogChannel];
Parameters
Section titled Parameters-
LogChannel interface
The interface where log messages will be routed.
LogChannel.printLog()
Section titled LogChannel.printLog()Product Analytics | Added in: 1.0.0
Implement this function to route SDK logs to another location such as CocoaLumberjack, SwiftyBeaver, or similar logging libraries.
The default implementation routes all logs through os_log
.
class CustomLogChannel: LogChannel { func printLog(logLevel: Log.Level, message: () -> String, source: String?, file: String, line: UInt) { // your implementation }}
// not supported
Parameters
Section titled ParametersNo parameters.
Property Tracking
Section titled Property TrackingCSQ.addDynamicVar()
Section titled CSQ.addDynamicVar()Experience Analytics | Added in: 1.0.0
Adds dynamic variables to the session properties.
This method allows you to pass DynamicVar
object, representing a key-value pair that is scoped to the session.
let var1 = DynamicVar(key: "key1", value: "value1")let var2 = DynamicVar(key: "key2", value: 2)
CSQ.addDynamicVar(var1)CSQ.addDynamicVar(var2)
CSQDynamicVar *var1 = [[CSQDynamicVar alloc] initWithKey:@"key1" stringValue:@"value1"];CSQDynamicVar *var2 = [[CSQDynamicVar alloc] initWithKey:@"key2" intValue:@2];
[CSQ addDynamicVar:var1];[CSQ addDynamicVar:var2];
Parameters
Section titled Parameters-
dVar DynamicVar
The dynamic variable
key String (<= 512 chars)
Dynamic variable key
intValue UInt32
Dynamic variable integer value
stringValue String
Dynamic variable string value
CSQ.addUserProperties()
Section titled CSQ.addUserProperties()Product Analytics | Added in: 1.0.0
Add a collection of properties to be associated with the current user.
CSQ.addUserProperties(["propertyKey"": "propertyValue"])
[CSQ addUserProperties:@{@"propertyKey": @"propertyValue"}];
Parameters
Section titled Parameters-
properties [String: PropertyValue]
A dictionary of user properties.
PropertyValue
in Swift can beString
,Substring
,Bool
,Double
,Float
,Int
,Int64
,Int32
,Int16
orInt8
or in Objective-CNSString
andNSNumber
(includingBOOL
).
CSQ.addEventProperties()
Section titled CSQ.addEventProperties()Product Analytics | Added in: 1.0.0
Add a collection of properties to be associated with all future events.
CSQ.addEventProperties(["propertyKey": "propertyValue"])
[CSQ addEventProperties:@{@"propertyKey": @"propertyValue"}];
Parameters
Section titled Parameters-
properties [String: PropertyValue]
A dictionary of event properties.
PropertyValue
in Swift can beString
,Substring
,Bool
,Double
,Float
,Int
,Int64
,Int32
,Int16
orInt8
or in Objective-CNSString
andNSNumber
(includingBOOL
).
CSQ.removeEventProperty()
Section titled CSQ.removeEventProperty()Product Analytics | Added in: 1.0.0
Removes a single property from the collection of event-wide properties.
CSQ.removeEventProperty("propertyKey")
[CSQ removeEventProperty:@"propertyKey"];
Parameters
Section titled Parameters-
key String
The key of the property to remove.
CSQ.clearEventProperties()
Section titled CSQ.clearEventProperties()Product Analytics | Added in: 1.0.0
Removes all event-wide properties.
CSQ.clearEventProperties()
[CSQ clearEventProperties];
View Tracking
Section titled View TrackingUIScrollView.excludeFromExposureMetrics()
Section titled UIScrollView.excludeFromExposureMetrics()Experience Analytics | Added in: 1.0.0
Exclude a scrollable view or subclass from Exposure Metric computations.
let scrollView = UIScrollView()scrollView.excludeFromExposureMetrics()
UIScrollView *scrollView = [[UIScrollView alloc] init];[scrollView excludeFromExposureMetrics];
CSInApp
Section titled CSInAppCSQ.handle()
Section titled CSQ.handle()Experience Analytics | Added in: 1.0.0
Allows the Contentsquare SDK to monitor CS in-app features activation through a custom URL scheme.
For more details check our CSInApp documentation.
CSQ.handle(url: <CSInAppURL>))
[CSQ handleWithURL:<CSInAppURL>];
Parameters
Section titled ParametersCSQ.csInApp
Section titled CSQ.csInAppExperience Analytics | Added in: 1.0.0
Boolean to manually activate or deactivate in-app features.
When CSQ.csInApp = true
, the in-app function is activated automatically at app start.
CSQ.csInApp = true
CSQ.csInApp = YES;
Interoperability
Section titled InteroperabilityCSQ.registerWebView()
Section titled CSQ.registerWebView()Experience Analytics | Added in: 1.0.0
Register a webview for tracking.
let webView = WKWebView()CSQ.registerWebView(webView)
WKWebView *webView = [[WKWebView alloc] init];[CSQ registerWebView:webView];
Parameters
Section titled Parameters-
webView WKWebView
The webview to register for tracking.
CSQ.unregisterWebView()
Section titled CSQ.unregisterWebView()1.0.0
Unregister a webview for tracking.
CSQ.unregisterWebView(webView)
[CSQ unregisterWebView:webView];
Parameters
Section titled Parameters-
webView WKWebView
The webview to unregister from tracking.
Event Tracking
Section titled Event TrackingCSQ.trackTransaction()
Section titled CSQ.trackTransaction()Experience Analytics | Added in: 1.0.0
Send a transaction.
let transaction = Transaction(id: "transactionId", total: 100.0, currency: .usd)CSQ.trackTransaction(transaction)
CSQTransaction *transaction = [[CSQTransaction alloc] initWithId:@"transactionId" total:100.0 currency:CSQCurrencyUsd];[CSQ trackTransaction:transaction];
Parameters
Section titled Parameters-
Transaction Transaction
The transaction object to be sent. Initialized with id, total and ISO 4217 currency enum.
CSQ.trackScreenview()
Section titled CSQ.trackScreenview()1.0.0
Send a screen view with or without custom variables. Requires Experience Analytics to be started.
CSQ.trackScreenview(name: "ScreenName", cvars: [CustomVar(index: 1, key: "key", value: "value")])
[CSQ trackScreenview:@"ScreenName" cvars:@[[CSQCustomVar initWithIndex:@1 key:@"key" value:@"value"]]];
Parameters
Section titled Parameters-
name String
The name of the screen.
-
cvars CustomVar[] (optional)
An array of custom variables to attach to the screen view.
index UInt32
Custom variable index
key String (<= 512 chars)
Custom variable key
value String (<= 256 chars)
Custom variable value
CSQ.trackEvent()
Section titled CSQ.trackEvent()Product Analytics | Added in: 1.0.0
Creates an event message to be tracked and sent to the API.
CSQ.trackEvent(name: String, properties: ["propertyKey": "propertyValue"]?)
[CSQ trackEventWithName:@"EventName" properties:@{@"propertyKey": @"propertyValue"}];
Parameters
Section titled Parameters-
name String
The name of the event to be tracked.
-
properties [String: PropertyValue>] (optional)
Optional properties to associate with the event.
PropertyValue
in Swift can beString
,Substring
,Bool
,Double
,Float
,Int
,Int64
,Int32
,Int16
orInt8
or in Objective-CNSString
andNSNumber
(includingBOOL
).
Surveys
Section titled SurveysCSQ.triggerSurvey()
Section titled CSQ.triggerSurvey()Experience Analytics Voice of Customer | Added in: 1.0.0
Triggers a survey by referencing a predefined trigger name.
This method allows your mobile app to trigger surveys at specific moments in the user journey. Triggers act as flexible placeholders that are not bound to individual surveys, enabling your business team to assign or update surveys later without requiring code changes.
CSQ.triggerSurvey(triggerName)
[CSQ triggerSurvey:triggerName];
Parameters
Section titled Parameters-
triggerName String
The name of the trigger associated with the survey. This should match the trigger name configured in the Contentsquare platform.
Example
Section titled Example// Trigger a survey after a purchase is completedCSQ.triggerSurvey("purchase-complete")
// Trigger a survey after a purchase is completed[CSQ triggerSurvey:@"purchase-complete"];
Error tracking
Section titled Error trackingCSQ.setUrlMaskingPatterns()
Section titled CSQ.setUrlMaskingPatterns()Experience Analytics | Added in: 1.0.0
Sets URL masking patterns.
CSQ.setUrlMaskingPatterns(["pattern1", "pattern2"])
[CSQ setUrlMaskingPatterns:@[@"pattern1", @"pattern2"]];
Parameters
Section titled Parameters-
patterns [String]
A list of URL patterns to mask.
CSQ.onCrashReporterStart()
Section titled CSQ.onCrashReporterStart()Experience Analytics | Added in: 1.0.0
Trigger a callback when the Contentsquare Crash Reporter is initialized.
CSQ.onCrashReporterStart { enabled in // do your work here, e.g. start Firebase Crashlytics}
[CSQ onCrashReporterStart:^(BOOL enabled) { // do your work here, e.g. start Firebase Crashlytics}];
Parameters
Section titled Parameters-
onCrashReporterStart (enabled: Bool -> Void)
Closure triggered when crash reporter is started. Passes a boolean indicating if crash reporter is actually enabled.
CSQ.sendUserIdentifier()
Section titled CSQ.sendUserIdentifier()Experience Analytics | Added in: 1.0.0
Associate the user identifier to the session.
CSQ.sendUserIdentifier("any_identifier")
[CSQ sendUserIdentifier:@"any_identifier"];
Parameters
Section titled Parameters-
userIdentifier String
The user identifier to track. Should be max 100 characters long.
CSQ.trackNetworkMetric()
Section titled CSQ.trackNetworkMetric()Experience Analytics | Added in: 1.0.0
Track network metrics.
let networkMetric = NetworkMetric(url: "https://example.com", httpMethod: "GET")CSQ.trackNetworkMetric(networkMetric)
CSQNetworkMetric *networkMetric = [[CSQNetworkMetric alloc] initWithURL:@"https://example.com" httpMethod:@"GET"];[CSQ trackNetworkMetric:networkMetric];
Parameters
Section titled Parameters-
networkMetric NetworkMetric
NetworkMetric object for a network request to record HTTP network errors.
Personal Data/Masking
Section titled Personal Data/MaskingCSQ.ignoreInteractions()
Section titled CSQ.ignoreInteractions()1.0.0
Ignore interactions for a specific view.
CSQ.ignoreInteractions(view)
[CSQ ignoreInteractions:view];
Parameters
Section titled ParametersUIView.csqIgnoreInteractions
Section titled UIView.csqIgnoreInteractionsUIKit IBInspectable | Added in: 1.0.0
Ignore interactions for a specific view.
view.csqIgnoreInteractions = true
view.csqIgnoreInteractions = YES;
Parameters
Section titled ParametersNo parameters.
CSQ.setDefaultMasking()
Section titled CSQ.setDefaultMasking()Experience Analytics | Added in: 1.0.0
Set the default masking state.
All UIView elements, their subclasses and SwiftUI components are fully masked by default.
CSQ.setDefaultMasking(true)
[CSQ setDefaultMasking:YES];
Parameters
Section titled Parameters-
masked Bool
The default masking state to be set.
CSQ.mask(UIView)
Section titled CSQ.mask(UIView)1.0.0
Mask a view’s content.
CSQ.mask(view)
[CSQ mask:view];
Parameters
Section titled Parameters-
view UIView
The view which content will be masked.
CSQ.unmask(UIView)
Section titled CSQ.unmask(UIView)1.0.0
Unmask a view’s content.
CSQ.unmask(view)
[CSQ unmask:view];
Parameters
Section titled Parameters-
view UIView
The view which content will be unmasked.
UIView.csqMaskContents
Section titled UIView.csqMaskContentsUIKit IBInspectable | Added in: 1.0.0
Mask the content of a view.
view.csqMaskContents = true
view.csqMaskContents = YES;
Parameters
Section titled ParametersNo parameters.
View.csqMaskContents
Section titled View.csqMaskContentsSwiftUI | Added in: 1.0.0
Mask the content of a view.
Text("Hello World!").csqMaskContents(true)
Parameters
Section titled Parameters-
enable Bool
Whether to mask the content of the view.
CSQ.mask(viewsOfType: UIView.Type
)
Section titled CSQ.mask(viewsOfType: UIView.Type)Experience Analytics | Added in: 1.0.0
Mask content for views of a specific type.
CSQ.mask(viewsOfType: UIView.Type)
[CSQ maskViewsOfType:[UIView class]];
Parameters
Section titled Parameters-
viewsOfType UIView.Type
The class type of the view whose content will be masked.
CSQ.unmask(viewsOfType: UIView.Type
)
Section titled CSQ.unmask(viewsOfType: UIView.Type)1.0.0
Unmask content for views of a specific type.
CSQ.unmask(viewsOfType: UIView.self)
[CSQ unmaskViewsOfType:[UIView class]];
Parameters
Section titled Parameters-
viewsOfType UIView.Type
The class type of the view whose content will be unmasked.
CSQ.maskTexts()
Section titled CSQ.maskTexts()1.0.0
Mask all texts.
CSQ.maskTexts(true)
[CSQ maskTexts:YES];
Parameters
Section titled Parameters-
mask Bool
Whether to mask text.
CSQ.maskImages()
Section titled CSQ.maskImages()Experience Analytics | Added in: 1.0.0
Mask images.
CSQ.maskImages(true)
[CSQ maskImages:YES];
Parameters
Section titled Parameters-
mask Bool
Whether to mask images.
CSQ.maskTextInputs()
Section titled CSQ.maskTextInputs()Experience Analytics | Added in: 1.0.0
Mask text input fields.
CSQ.maskTextInputs(true)
[CSQ maskTextInputs:YES];
Parameters
Section titled Parameters-
mask Bool
Whether to mask text inputs.
UIView.csqIgnoreInnerHierarchy
Section titled UIView.csqIgnoreInnerHierarchyProduct Analytics UIKit IBInspectable | Added in: 1.0.0
If set on a view or view controller, all touches inside that control will be attributed to it rather than child views. This can be helpful in blocking sensitive parts of an interaction and keeping implementation details out of a view hierarchy. For example, Contentsquare uses this property internally to suppress inner touches on UIDatePicker
.
let view = UIView()view.csqIgnoreInnerHierarchy = true
UIView *view = [[UIView alloc] init];view.csqIgnoreInnerHierarchy = YES;
SDK Initialisation and Management
Section titled SDK Initialisation and ManagementCSQ.configureProductAnalytics()
Section titled CSQ.configureProductAnalytics()Product Analytics | Added in: 1.0.0
SDK configuration method for Product Analytics. Must be called before start()
.
CSQ.configureProductAnalytics( environmentID: "YOUR_ENVIRONMENT_ID", additionalOptions: [ PRODUCT_ANALYTICS_INITIALIZATION_OPTIONS ])
[CSQ configureProductAnalyticsWithEnvironmentID:@"YOUR_ENVIRONMENT_ID" additionalOptions:@{PRODUCT_ANALYTICS_INITIALIZATION_OPTIONS}];
Parameters
Section titled Parameters-
environmentID String
Your Product Analytics environment ID.
-
PRODUCT_ANALYTICS_INITIALIZATION_OPTIONS [Option: Any]
Product Analytics initialization options.
CSQ.start()
Section titled CSQ.start()1.0.0
Start the SDK.
CSQ.start()
[CSQ start];
Parameters
Section titled ParametersNo parameters.
CSQ.stop()
Section titled CSQ.stop()1.0.0
Stop all activity from the SDK.
Once run no requests, telemetry collection, or logs will be generated.
CSQ.stop()
[CSQ stop];
CSQ.pauseTracking()
Section titled CSQ.pauseTracking()1.0.0
Pause all tracking features.
CSQ.pauseTracking()
[CSQ pauseTracking];
CSQ.resumeTracking()
Section titled CSQ.resumeTracking()1.0.0
Resume all tracking features.
CSQ.resumeTracking()
[CSQ resumeTracking];
Parameters
Section titled ParametersNo parameters.
Product Analytics initialization options
Section titled Product Analytics initialization optionsCSQ SDK options for Product Analytics passed to CSQ.configureProductAnalytics()
.
CSQ.configureProductAnalytics( additionalOptions: [ ])
additionalOptions:@{ }];
environmentID
Section titled environmentIDProduct Analytics Environment ID.
uploadInterval
Section titled uploadIntervalInterval at which event batches should be uploaded to the API.
Defaults to 15 seconds.
baseURL
Section titled baseURLURI object specifying the base URI for the desired API endpoint. The Heap SDK resolves paths using this base URI and ignores any pre-existing path elements.
captureVendorID
Section titled captureVendorIDWhether or not the vendor ID should be included in tracked events if made
available by the device.
Defaults to false.
captureAdvertiserID
Section titled captureAdvertiserIDWhether or not the advertiser ID should be included in tracked events if made
available by the device.
Defaults to false.
clearEventPropertiesOnNewUser
Section titled clearEventPropertiesOnNewUserWhether or not to clear event properties when a new user is created.
Defaults to false.
disablePageviewAutocapture
Section titled disablePageviewAutocaptureWhether or not source pageview events will be auto-captured.
Defaults to false.
disablePageviewTitleCapture
Section titled disablePageviewTitleCaptureDisable pageview title capture.
disableInteractionAutocapture
Section titled disableInteractionAutocaptureDisables autocapture of touch events on UIKit, Android Views, and React Native.
enableUIKitAutocapture
Section titled enableUIKitAutocaptureEnable Product Analytics iOS View events.
enablePushNotificationAutocapture
Section titled enablePushNotificationAutocaptureWhether or not the SDK will auto capture interaction events on notifications.
Defaults to false.
enablePushNotificationTitleAutocapture
Section titled enablePushNotificationTitleAutocaptureWhether or not capture the title of the notification where an interaction was performed. enablePushNotificationAutocapture
must be to true.
Defaults to false.
enablePushNotificationBodyAutocapture
Section titled enablePushNotificationBodyAutocaptureWhether or not capture the body text of the notification where an interaction was performed. enablePushNotificationAutocapture
must be to true.
Defaults to false.
messageBatchByteLimit
Section titled messageBatchByteLimitThe maximum size, in bytes, to allocate for the local event storage database.
Defaults to -1, meaning there is no limit on database size. Must be greater than or equal to 200KB.
messageBatchMessageLimit
Section titled messageBatchMessageLimitThe maximum number of messages to be included in each batch sent to Heap.
Setting a lower limit can help reduce network traffic in situations where bandwidth is limited.
Defaults to 100.
resumePreviousSession
Section titled resumePreviousSessionEnables Contentsquare behavior of persisting non-expired sessions across app launch.
pruningLookBackWindow
Section titled pruningLookBackWindowThe number of days to look back when pruning old data in days.
Defaults to 6 days.
Requires an entitlement to use.
disableScreenviewForwardToDXA
Section titled disableScreenviewForwardToDXADisable forwarding of Product Analytics Pageviews to Experience Analytics.
disableScreenviewForwardToPA
Section titled disableScreenviewForwardToPADisable forwarding of Experience Analytics Screenviews to Product Analytics.