Accessibility Guide

How Storyly Placement widgets work with screen readers, and how to make your content accessible.

We aim to make Storyly content accessible to everyone, so people with disabilities can get the most out of it. Storyly Placement widgets work with the device's built-in screen reader: TalkBack on Android and VoiceOver on iOS. No accessibility API call is needed; the SDK handles it for you.

How it works

Once the end user turns on the screen reader on their device, Storyly Placement becomes accessible:

  • No autoplay. Stories and banner slides move on only when the user acts.
  • Single tap moves focus to an element and reads it. Double tap performs its action.
  • Previous / Next buttons appear on screen, so content can be navigated without swipe gestures.
  • Built-in labels such as "Close Story" or "Slide 1 of 4" are read in the user's language. See Supported languages.

The content your team creates is read as written: titles, button texts, alt text and video transcripts all come from the Storyly Dashboard.

Accessibility features by widget

WidgetAndroid & iOSWeb
Story BarSupportedSupported
BannerSupported (SDK 1.18.0+)Not yet supported
Video FeedSupportedPartially supported (accessibility mode, keyboard navigation)
Swipe Card, CanvasNot yet supportedNot yet supported

Story Bar

Story groups

  • Story group order, for example "Story position 1 of 5"
  • Story group title
  • Story group status: seen / unseen, and pinned

Stories

  • Story position, for example "Story 2 of 4"
  • Alt text or video transcript of the story (see Describing your content)
  • Labeled Close and Share buttons, and share sheet options
  • CTAs read with their titles (for example Swipe Up, Buy Now)
  • Previous / Next Story buttons for navigation
  • Play, Pause and Replay buttons in the story header (SDK 1.1.0+)

Interactive components

Read by the screen readerNot read by the screen reader
Text, Button, Swipe Up, Image Button, Poll, Quiz, Image Quiz (alt text per option), Product Card, Product CatalogVideo, Rating, Emoji, Countdown, Comment, Promo Code, Product Tag, Image components other than the story background

Banner (SDK 1.18.0+)

  • Each slide is one element. Its text is read, then its position: "Big Autumn Sale, Up to 50% off, Slide 1 of 4".
  • Image and video slides read the alt text set in the Dashboard.
  • A slide with a link is read as a button. A button without text is read as "Open link".
  • Reading order: Play / Pause → Previous → Next → slide.
  • Previous / Next are disabled on the first and last slide. On iOS, a three-finger swipe also changes slides.
  • In right-to-left layouts, the arrows switch direction.

Play / Pause button. Turn it on in Widget Builder → Banner → Design → Navigation → Play/Pause button and set its icon and background colors for light and dark mode. It lets users stop auto-advancing slides, which supports WCAG 2.2.2 (Pause, Stop, Hide) on Android and iOS.

🚧

Remember!

The Play / Pause button is off by default. It has a 44 × 44 touch area and appears when slides auto-advance or the banner contains video.

Describing your content: Alt Text and Video Transcript

The screen reader can only read what you describe. In Storyly Studio, the field you use depends on the story's background:

Story backgroundField to fill inWhat the screen reader reads
Static (image)Alt TextThe image description
VideoVideo TranscriptThe transcript of the video

How to add it: open the story group in Storyly Studio, click the story name, fill in the Alt Text or Video Transcript field, and save. For banners, add alt text to each image or video slide in the Dashboard.

📘

Tip

Components that the screen reader does not read (such as Countdown, Promo Code or Rating) can still be made accessible. Include the information they carry, for example the promo code or the end date, in the story's Alt Text or Video Transcript.

Only the story's background image uses the story alt text. Other Image components placed on the story are not read, so describe them in the alt text as well when they carry information.

Supported languages

Built-in labels are read in this order of priority:

  1. The locale set in STRPlacementConfig
  2. The device language
  3. English, when neither is supported
LanguageAndroid & iOSWeb
English (default), German, Hebrew, Portuguese, Spanish, Turkish✅✅
Polish✅ (SDK 1.12.0+)—

For right-to-left languages, set setLayoutDirection(STRLayoutDirection.RTL) in STRPlacementConfig. Your Dashboard content is read as written; use Localization in the Dashboard to serve it in several languages.

Adding your own language

To add a language or change a built-in label, add Storyly's string keys to your app's localization files: values-<code>/strings.xml on Android, <code>.lproj/Localizable.strings on iOS. Your values override the SDK's. Use %1$d / %1$s on Android and %d / %@ on iOS.

KeyEnglish value
st_desc_story_next / st_desc_story_previousNext Story / Previous Story
st_desc_story_share / st_desc_story_closeShare Story / Close Story
st_desc_video_play / st_desc_video_pause / st_desc_video_replayPlay / Pause / Replay
st_desc_story_group_pinnedStory position %d of %d, %@, pinned, %@
st_desc_story_group_unpinnedStory position %d of %d, %@, %@
st_desc_seen / st_desc_unseenseen / unseen
st_desc_story_indexStory %d of %d
st_desc_title_textTitle %@, %@
st_desc_swipeup / st_desc_imagectaSwipe Up / Image Button
st_desc_poll_with_title / st_desc_poll_without_titlePoll sticker, %@ / Poll sticker
st_desc_poll_after_selection%@, was selected by %d%% of users
st_desc_quiz_with_title / st_desc_quiz_without_titleQuiz sticker, %@ / Quiz sticker
st_desc_quiz_after_poll%@, %@, was selected by %d%% of users
st_desc_quiz_after_sngl_true / st_desc_quiz_after_sngl_false%@, %@ is the correct answer / %@, %@ is the wrong answer
st_desc_option_a … st_desc_option_dOption A … Option D
st_share_sheet_title_text / st_share_sheet_copy_text / st_share_sheet_copied_textShare Story / Copy Link / Copied
st_share_sheet_link_via / st_share_sheet_screenshot_viaShare via… / Share image via…

Banner keys (SDK 1.18.0+)

KeyEnglish value
st_banner_desc_defaultBanner
st_banner_desc_slide_positionSlide %1$d of %2$d
st_banner_desc_open_linkOpen link
st_banner_desc_next_slide / st_banner_desc_previous_slideNext slide / Previous slide
st_banner_desc_play / st_banner_desc_pausePlay / Pause

Web Placement

On the web, the story presenter works with browser screen readers and the keyboard. Its labels are available in English, German, Hebrew, Portuguese, Spanish and Turkish.

KeyAction
→ / ←Next / Previous story
SpacePlay / Pause
EscClose story
SShare story

Users can switch accessibility mode on from the presenter, and its state is announced. Mute, Pause and transcript controls are labeled, and links that open in a new tab are announced. Video Feed supports accessibility mode and keyboard navigation.

Known limitations

  • Web Banner: no screen reader support or Play / Pause button yet; the Dashboard setting is ignored, so auto-advancing web banners cannot be paused.
  • Swipe Card and Canvas: no dedicated screen reader support yet.
  • Text size: the system font size (Dynamic Type on iOS, font scale on Android) is not applied to widget text.
  • Video audio can play over the screen reader's speech.
  • Product bottom sheets: some labels are incomplete.

🚧

Remember!

Accessibility features are available in Storyly Placement SDK for Android, iOS, React Native and Flutter. Use SDK 1.18.0 or later to get Banner accessibility.


Did this page help you?