Placement SDK Analytics

This guide covers how to send Storyly events to your Analytics tool to understand the performance of Storyly Widgets.

This guide explains how your app receives widget analytics through the Storyly Placement SDK. Events are delivered via the onEvent callback on StorylyPlacementView, using a typed STREventPayload per widget. Shopping-related events are delivered via the onProductEvent callback.

Integration

StorylyPlacementView(
  provider: _provider,
  onEvent: (event) {},
  onProductEvent: (event) {},
)

Sending events to your analytics stack

Implement onEvent / onProductEvent and forward the event name together with any fields you need from the typed payload. The event name is available as a String on event.payload.event (widget events) and event.event (product events).

StorylyPlacementView(
  provider: _provider,
  onEvent: (event) {
    final eventName = event.payload.event;
    // analytics.track(name: eventName, properties: ...);
  },
  onProductEvent: (event) {
    final eventName = event.event;
    // analytics.track(name: eventName, properties: ...);
  },
)

Widget-specific payloads

The widget that produced the event is available on event.widget.type. To read widget-specific data, cast event.payload.payload to the matching payload type.

Widgetevent.widget.typePayload type
Story Bar'story-bar'STRStoryBarPayload
Banner'banner'STRBannerPayload
Canvas'canvas'STRCanvasPayload
Swipe Card'swipe-card'STRSwipeCardPayload
Video Feed'video-feed'STRVideoFeedPayload

After casting, you get:

  • The event name via event.payload.event (a String).
  • A widget-specific payload object with typed fields.

Example — Story Bar

StorylyPlacementView(
  provider: _provider,
  onEvent: (event) {
    if (event.widget.type == 'story-bar') {
      final eventName = event.payload.event;
      final storyBarPayload = event.payload.payload as STRStoryBarPayload?;
      final group = storyBarPayload?.group;
      final story = storyBarPayload?.story;
      final component = storyBarPayload?.component;

      switch (eventName) {
        case 'StoryGroupOpened':
          // Story group opened
          break;
        case 'StoryShown':
          // Story shown
          break;
        case 'StoryDismissed':
          // Story dismissed
          break;
        default:
          // check other events if necessary
          break;
      }
    }
  },
)

Checklist

  1. Implement onEvent and forward event.payload.event plus enriched properties.
  2. Implement onProductEvent (and cart/wishlist handlers if you use shoppable content).