Skip to main content

Configuration

CocoaPods Deprecated

If you're using CocoaPods, please migrate to Swift Package Manager. CocoaPods support will be removed by end of 2026. See Migration Guide.

Initialization

Initialize the SDK once, typically in AppDelegate or SceneDelegate:

StorifyMeInstance.shared.initialize(
accountId: "YOUR_ACCOUNT_ID",
apiKey: "YOUR_API_KEY",
env: .EU
)

Adding a Widget

let widget = StorifyMeWidget()
widget.setWidgetId(widgetId: YOUR_WIDGET_ID)
widget.load()

view.addSubview(widget)
widget.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
widget.leadingAnchor.constraint(equalTo: view.leadingAnchor),
widget.trailingAnchor.constraint(equalTo: view.trailingAnchor),
widget.heightAnchor.constraint(equalToConstant: 120)
])

Widgets automatically wait for SDK initialization, so load() can be called at any point.

Widget Configuration

Playback Behavior

storifyMeWidget.setPlaybackOptions(
options: StorifyMeStoryPlaybackOptions(behaviour: .restartStoriesOnAppLaunch)
)
OptionBehavior
alwaysResumeStoryWhereStoppedResume where the user stopped (default)
restartStoriesOnAppLaunchRestart on every app launch
restartStoriesWhenOpenRestart every time the widget is opened

Audio Control

storifyMeWidget.setWidgetAudioOptions(
options: StorifyMeStoryAudioOptions(
behaviour: .applyLastUserChangeForAllFutureStories,
defaultState: .unmuted
)
)
OptionBehavior
applyLastUserChangeForAllFutureStoriesRemembers user's last audio choice (default)
applyChangeForSingleStoryAudio state resets for each story
applyChangeForPresentedStoriesAudio state resets after widget is dismissed

Poster Thumbnails

storifyMeWidget.setGifPosterEnabled(true) // GIF posters — enabled by default
storifyMeWidget.setVideoPosterEnabled(true) // Video posters — disabled by default

URL Presentation

storifyMeWidget.setURLPresentationOptions(
options: StorifyMeURLPresentationOptions(presentationMode: .inAppBrowser)
)
  • .externalBrowser — open in Safari (default)
  • .inAppBrowser — open in-app

Direction and Language

var config = StorifyMeWidgetConfig()
config.setDirection(direction: .rtl)
config.setLanguage(languageCode: "en")

storifyMeWidget.setWidgetConfig(config: config)

Scroll Navigation

storifyMeWidget.setWidgetScrollNavigationOptions(
options: StorifyMeWidgetScrollNavigationOptions(storiesNavigation: .verticalCenteredControls)
)

Disable Onboarding

StorifyMeInstance.shared.disableInitialOnboarding()

Opening Stories Programmatically

Open a specific story from code — by position, handle, or ID:

storifyMeWidget.openWidgetStoryByPosition(0, storyBehaviour: nil) { result in }
storifyMeWidget.openWidgetStoryByHandle("my-story-handle", storyBehaviour: nil) { result in }
storifyMeWidget.openWidgetStoryById(42, storyBehaviour: nil) { result in }

To open a story without a widget (e.g. from a deep link or push notification):

StorifyMeInstance.shared.openStoryByHandle(handle: "my-story-handle")
tip

Story IDs, handles, and count are available in the onLoad event callback.

Utility Methods

Playback Control

StorifyMeInstance.shared.playbackController.pausePlayback(controlsVisibility: .visible)
StorifyMeInstance.shared.playbackController.resumePlayback(mode: .fromBeginning)
StorifyMeInstance.shared.playbackController.closePlayback()

Clear Seen State

storifyMeWidget.clearAllSeenState() // Clear all, refresh list
storifyMeWidget.clearSeenState(storyId: 42) // Clear one story

In-Story Notifications

StorifyMeInstance.shared.showNotification(title: "Title", message: "Message")

Logging

Set the log level before initialize() to capture initialization logs:

StorifyMeInstance.shared.logLevel = .debug
LevelDescription
.debugDevelopment debugging
.warningRecoverable problems (default)
.errorCritical errors only
.noneRecommended for production

Logs appear in Xcode Console and Console.app (filter by subsystem com.storifyme.sdk).

GIF Cache

StorifyMeInstance.shared.diskCacheMaxAge = 7 * 24 * 60 * 60 // 7 days (default)
StorifyMeInstance.shared.clearAllGIFCaches() // Manual clear

For SwiftUI:

StorifyMeWidgetView.clearAllCaches()

SDK Lifecycle

For lifecycle management — SDK state observation, whenReady, shutdown, account switching, and notification-based patterns — see Advanced Integration Patterns.