Privacy and Tracking#
The eventTrackingOptions property customizes Storyteller's analytics and tracking behavior. 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.
Important: eventTrackingOptions can only be set during SDK initialization. To configure tracking options, pass a StorytellerEventTrackingOptions object to the initialize method. The default value is .enableAll:
// Using custom tracking options
let trackingOptions = StorytellerEventTrackingOptions(
enablePersonalization: false,
enableStorytellerTracking: false,
enableUserActivityTracking: false,
enableAdTracking: false,
enableFullVideoAnalytics: false,
enableRemoteViewingStore: false,
disabledFunctionalFeatures: .none
)
try await Storyteller.shared.initialize(
apiKey: "your-api-key",
userInput: StorytellerUserInput(externalId: "user-id"),
eventTrackingOptions: trackingOptions
)
// Or use the default .enableAll (all tracking enabled)
try await Storyteller.shared.initialize(
apiKey: "your-api-key",
userInput: StorytellerUserInput(externalId: "user-id")
)
The property remains publicly readable via Storyteller.shared.eventTrackingOptions, but can no longer be modified at runtime. To change tracking options after initialization, you must reinitialize the SDK with new options.
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.
Videos tracking#
When enableFullVideoAnalytics is disabled, sensitive video event data for Story ID, Page ID, Story Title, Page Title, Clip ID, Clip Title, Story Display Title, Item Title, Container Title, Card Id, Card Title and Card Subtitle will not be included in the onUserActivityOccurred() Storyteller delegate method.
Remote viewing store#
When enableRemoteViewingStore is disabled, user IDs are never stored or sent to backend services, and all user viewing activity is only kept locally on the device. This mode ensures the SDK operates in a privacy-enhanced mode designed to address VPPA (Video Privacy Protection Act) compliance concerns.
Independent Functional Behavior Toggles#
The disabledFunctionalFeatures property allows to conditionally disable functional features of the SDK for privacy compliance. When a feature is disabled, the SDK will behave as if that functionality is disabled from the server.
pageReadStatus#
Summary: Controls whether read/unread status is enabled for Story pages.
When disabled, the SDK will not store read/unread behavior for pages. All Lists and Players will act as if read/unread tracking is disabled from the server, meaning users will not see visual indicators of which Stories they have previously viewed.
clipViewedStatus#
Summary: Controls whether viewed/not viewed status is enabled for individual Clips.
When disabled, the SDK will not store viewed/not viewed information for Clips. All Lists and Players will act as if viewed/not viewed tracking is disabled from the server, removing visual indicators of previously watched content.
pollVotes#
Summary: Controls whether Poll voting responses are persistently stored.
When disabled, users can still interact with Polls and see immediate UI updates when they vote, but their votes are not persistently stored. If they navigate away and return to the same Poll, they can vote again. Since this is coupled with disabled Storyteller Analytics, their votes will not contribute to overall Poll statistics.
triviaQuizAnswers#
Summary: Controls whether Trivia Quiz responses and progress are persistently stored.
When disabled, users can still answer trivia questions and see immediate UI feedback, but their answers are not persistently stored. If they navigate away and return to the same Quiz, they can answer questions again. The results page will be hidden since the SDK is not allowed to display persistent Quiz results.
clipLikes#
Summary: Controls whether Clip like/unlike interactions are persistently stored.
When disabled, users can still tap to like/unlike Clips and see immediate UI updates, but these interactions are not persistently stored. If they swipe away and return to the same Clip, it will appear in its original unliked state.
clipShares#
Summary: Disables Clip Share tracking and storage (but not the sharing action itself).
When disabled, users can still tap on Share Clip button and see immediate UI updates, but this interaction is not persistently stored. If they swipe away and returns to the same Clip, the original share count will be displayed.
all#
Summary: Disables all functional feature behaviors.
When disabled using .all, the SDK will behave as if every individual functional toggle is turned off.