Dynamic Configuration
Dynamic Config from Studio
The SDK can receive visual and behavioral configuration from JOIN Studio.
If no manual configuration is provided in the app, the SDK applies the Studio configuration when available.
If a Studio setting is missing, the SDK falls back to its default value.
If a manual configuration is provided in the app, it always takes priority over the Studio configuration.
Configuration priority
Manual configuration in app
↓
Studio configuration
↓
SDK default value
If a value is manually configured in the app, it always overrides the Studio value.
If no manual value is provided, the SDK uses the Studio value when available.
If no Studio value is available, the SDK uses its default value.
Studio settings mapping
| Studio setting | Applies to | Visual effect | Default | Manual override in app |
|---|---|---|---|---|
| Item spacing | Bubbles, Cards (grid/list) | Space between items | Bubbles: 12; Cards: Grid 8, List 3 | Bubbles: BubbleConfiguration.thumbViewSpacing; Cards: CardConfiguration.spacing |
| Show play icon | Bubbles, Cards | Show/hide play glyph overlay | On | Bubbles: BubbleConfiguration.showPlayButton; Cards: CardConfiguration.showPlayButton |
| Play icon style | Bubbles | Choose icon style (minimalist/outline/fill) | Minimalist | BubbleConfiguration.playIcon (values: "minimalist", "outline", "fill") |
| Show labels | Bubbles, Cards | Show/hide labels under items | On | Bubbles: BubbleConfiguration.showLabel; Cards: CardConfiguration.showLabel |
| Card corner radius | Cards (grid/list) | Card rounding | Grid: 8, List: 10 | Grid: CardGridConfiguration.cardRadius; List: CardListConfiguration.cardRadius |
| Player corner radius | Player | Player view rounding | 0 | PlayerConfiguration.playerCornerRadius |
| Show cover and title (player) | Player | Show/hide cover/title overlay | On | PlayerConfiguration.showFeedStoryCoverAndTitle |
| Read / unread effect | Bubbles, Cards | Enables read state behavior for stories | Off | BubbleConfiguration.enableRead |
| Reorder read stories | Bubbles, Cards | Displays unread stories first | Off | BubbleConfiguration.reorderedReadStories, CardConfiguration.reorderedReadStories |
| Viewed indicator | Bubbles | Displays a viewed indicator on read bubbles | Off | BubbleConfiguration.storyViewedIndicatorColor |
| Loader ring colors (brand) | Bubbles | Gradient around bubble | JOIN default gradient (red→orange) | `BubbleConfiguration.loaderColors |
- Note: Widget type (“shape”) is always selected in code (manual integration), not from Studio.
Read / unread behavior
Reorder read stories and Viewed indicator are only applied when Read / unread effect is enabled in Studio.
If Read / unread effect is disabled, these settings are ignored.
To let Studio control these behaviors, enable Read / unread effect in Studio and avoid forcing the related values manually in the app.
bubbleTriggerView.bubbleConfiguration = BubbleConfiguration(
enableRead = null,
reorderedReadStories = null
)
If the app explicitly overrides a value, the manual configuration takes priority:
bubbleTriggerView.bubbleConfiguration = BubbleConfiguration(
reorderedReadStories = false
)
In this case, Studio cannot enable Reorder read stories dynamically.
