Privacy and Tracking#
The eventTrackingOptions parameter customizes Storyteller's analytics and tracking behavior during SDK initialization. It allows certain features to be disabled based on user privacy choices. It is an object of type StorytellerEventTrackingOptions and by default, all of its properties are enabled:
data class StorytellerEventTrackingOptions(
val enablePersonalization: Boolean = true,
val enableStorytellerTracking: Boolean = true,
val enableUserActivityTracking: Boolean = true,
val enableAdTracking: Boolean = true,
val enableFullVideoAnalytics: Boolean = true,
val enableRemoteViewingStore: Boolean = true
)
// Set during initialization
Storyteller.initialize(
apiKey = "[APIKEY]",
userInput = StorytellerUserInput("unique-user-id"),
eventTrackingOptions = StorytellerEventTrackingOptions(/*your setup here*/)
)
// Read current settings (read-only)
val currentOptions = Storyteller.eventTrackingOptions
Note: Starting from version 11.0.0,
eventTrackingOptionscan only be set during SDK initialization and cannot be modified afterwards. To change these settings, you must callStoryteller.initialize()again with new options.
Showcase examples#
- Compose — privacy toggles (
AccountViewModel) - Compose — stored tracking preferences (
SessionRepositoryImpl) - XML — re-initialize with
eventTrackingOptions(StorytellerServiceImpl)
User Personalization#
When enablePersonalization is enabled, user attributes and the user's ID are included on requests to Storyteller's servers to allow us to personalize the content returned
Storyteller tracking#
When enableStorytellerTracking is enabled, we will record analytics events on our servers. Note that some events are necessary for user functionality and will still be transmitted (but not stored) even when this setting is off.
User Activity tracking#
When enableUserActivityTracking is enabled, we will call the Storyteller delegate's method onUserActivityOccurred(), which allows integrating apps to record our analytics events on their own systems.
Ads tracking#
When enableAdTracking is disabled, ad-related events will not be tracked through onUserActivityOccurred() Storyteller delegate method and on our servers. Additionally, only necessary fields like Ad Unit Id and Custom Template Id's will be included in GAM requests.
Full Video Analytics#
When enableFullVideoAnalytics is enabled, detailed video information (story titles, clip titles, story IDs, clip IDs, etc.) is included in analytics events sent to the onUserActivityOccurred() delegate method.
When disabled, sensitive video data fields are nullified for VPPA (Video Privacy Protection Act) compliance:
storyId,storyTitle,storyDisplayTitleclipId,clipTitlepageId,pageTitle,itemTitle,containerTitlecardId,cardTitle,cardSubtitle
This setting allows integrators to comply with video privacy regulations while still receiving engagement analytics events. All other analytics data (user interactions, durations, event types, etc.) continues to be provided.
Remote Viewing Store#
When enableRemoteViewingStore is enabled (default), the SDK operates normally with full user activity tracking and remote storage capabilities.
When enableRemoteViewingStore is disabled, the SDK operates in a privacy-enhanced mode designed to address VPPA (Video Privacy Protection Act) compliance concerns:
- No User ID Storage: User IDs are never stored locally or sent to backend services
- Local-Only User Activity: All user viewing activity is stored locally on the device and never synchronized with remote servers
- No Remote User Activity Fetch: The SDK will not attempt to fetch user activity data from remote servers
This mode is particularly useful for clients who need enhanced privacy protection while still maintaining local user experience features like viewing history and recommendations.
Example for enhanced VPPA compliance:
Storyteller.initialize(
apiKey = "[APIKEY]",
userInput = StorytellerUserInput("unique-user-id"),
eventTrackingOptions = StorytellerEventTrackingOptions(
enablePersonalization = true,
enableStorytellerTracking = true,
enableUserActivityTracking = true,
enableAdTracking = true,
enableFullVideoAnalytics = false, // Nullifies sensitive video data
enableRemoteViewingStore = false // Disables remote user ID storage and tracking
)
)
Disabled Functional Features#
The disabledFunctionalFeatures property allows you to selectively disable specific functional areas of the SDK while maintaining others. This provides granular control over which user interactions are tracked and stored.
When a functional feature is disabled:
- The SDK will not make API requests for that particular item (even if
enableRemoteViewingStoreis true) - The SDK will not store the relevant activity locally on device
- The UI will behave as if the feature is disabled from the server
Available functional features that can be disabled:
- All - Disables everything including any future cases
- PageReadStatus - Disables Page Read/Unread feature
- ClipViewedStatus - Disables Clips Viewed/Not Viewed feature
- ClipLikes - Disables Clip Likes and Unlikes
- ClipShares - Disables Clip Share tracking and storage (but not the act of sharing)
UI Behavior When Features Are Disabled#
Pages: When PageReadStatus is disabled, all rows act as if Read/Unread tracking is disabled from the server.
Clips: When ClipViewedStatus is disabled, all entry points act as if Viewed/Not Viewed tracking is disabled from the server.
Clip Likes: When disabled, users can like/unlike clips with UI feedback, but if they swipe away and return, the clip will appear unliked again.
Clip Shares: When disabled, users can share clips and see count updates, but if they swipe away and return, the original count will be displayed.
Example configuration:
Storyteller.initialize(
apiKey = "[APIKEY]",
userInput = StorytellerUserInput("unique-user-id"),
eventTrackingOptions = StorytellerEventTrackingOptions(
enablePersonalization = true,
enableStorytellerTracking = true,
enableUserActivityTracking = true,
enableAdTracking = true,
enableFullVideoAnalytics = true,
enableRemoteViewingStore = true,
disabledFunctionalFeatures = listOf(
StorytellerDisabledFunctionalFeature.ClipLikes, StorytellerDisabledFunctionalFeature.ClipViewedStatus
)
)
)
enableEventTracking/disableEventTracking (Legacy)#
Note: This method will be removed in version 11.0.0. Please use
eventTrackingOptionsinstead.
The disableEventTracking() method will disable storing analytics events on Storyteller servers. By default, event tracking is enabled. Note that some events are necessary for user functionality and will still be made (but not stored) when event tracking is disabled.
Event tracking can be enabled again by calling enableEventTracking()
Example:
Storyteller.enableEventTracking()
Storyteller.disableEventTracking()