Skip to content

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, eventTrackingOptions can only be set during SDK initialization and cannot be modified afterwards. To change these settings, you must call Storyteller.initialize() again with new options.

Showcase examples#

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, storyDisplayTitle
  • clipId, clipTitle
  • pageId, pageTitle, itemTitle, containerTitle
  • cardId, 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 enableRemoteViewingStore is 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 eventTrackingOptions instead.

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()