Mobile Widget SDKs
Lifecycle
The SDK owns one isolated widget session. The host application owns the signed-in user, screen lifetime, logout, and account replacement.
Controller operations
reload()
Replays the SDK-owned HTML shell in the existing WebView and starts a fresh document lifecycle.
retry()
Clears terminal error state and recreates the isolated widget session.
updateTheme()
Applies light, dark, or system theme to the current widget when possible.
logout()
Clears native authentication and requests in-widget logout without replacing the host session.
isAuthenticated
Reports whether the SDK currently has a usable cached access token. It never returns token text.
sessionSnapshot
Returns redacted lifecycle and authentication state for host UI and diagnostics.
invalidate()
Cancels SDK work and tears down the active session. It does not construct a replacement surface.
One controller attaches to one widget
Create a separate controller for each mounted widget. Do not reuse an attached controller across two views or components.
Readiness and errors
Treat mounted or ready events as the widget-session checkpoint. Authentication failures and widget errors stop the current ready wait. A ready timeout presents error UI without silently replacing the WebView. Use retry only when the host wants a fresh session attempt.
Session expiry
A session-expired event clears the SDK access-token cache. The next authentication request calls embedTokenProvider again. Return a newly minted embed token and do not force a WebView reload.
Soft logout is not host sign-out
logout() is an in-widget operation. It clears native authentication and submits a runtime logout request, but it does not prove server-side revocation and must not delay host cleanup.
The host owns account state
Remove the old widget immediately when the application user signs out or changes account. Do not wait for a widget logout event before clearing host UI and session state.
Replace the surface when the account changes
Changing only the provider function does not reset the authenticated account. A cached token or earlier provider call may still belong to the previous user.
- Flutter
- Unmount the old widget or change its key using a stable, non-secret host-session key, then supply the new provider.
- Android
- Dispose and remove the old View. In Compose, replace the keyed subtree so its disposal runs.
- iOS
- Dispose the UIKit view or replace the SwiftUI representable identity before mounting the new user.
- React Native
- Unmount the old component or change its React key using a stable, non-secret host-session key.
Multiple widgets
Give each simultaneous widget a distinct storagePrefix, controller, and host identity. Never use an embed token, access token, or raw customer identity as a UI key or storage prefix.
Known isolation boundary
A fresh WebView may share content-origin cookies or storage with other WebViews. Do not clear application-wide WebView storage as a workaround. Verify sensitive account-switch behavior in the real host and runtime.