Skip to main content
Supported on: Android SDK 1.0.33+

Overview

Server-driven screens let growth teams design and deploy native screens from the AppDNA console — no app release needed. The SDK renders screens from JSON config fetched via Firestore. Screens combine content blocks from any SDK module (onboarding, paywalls, surveys, messages) into a single composable surface. You can build feature announcements, upgrade prompts, referral screens, guided tutorials, and more — all without writing native UI code.

Show a Screen

Show a Multi-Screen Flow

Dismiss

Screen Slots (Inline Content)

Place named slots in your Compose views. The console assigns screens to slots.
  • Empty slots render nothing (no visual impact)
  • Content updates on next config refresh
  • Supports audience targeting per slot
Automatically inject screens between app navigations:

Debug Preview

Test screens from raw JSON without publishing to Firestore:

Screen Delegate

The delegate fires for every screen lifecycle event. Result and action payloads are delivered as Map<String, Any?> for forward-compat with new fields the SDK adds (e.g., last_action, duration_ms):
The top-level AppDNA.showScreen(...) / AppDNA.showFlow(...) callbacks DO use the typed ScreenResult / FlowResult data classes (see API Reference) — only the delegate uses untyped maps.

Presentation Modes

Screens support the following presentation modes configured in the Console: Unrecognized values fall through to fullscreen.

Section Types

Screens are composed of ordered sections. The unified section registry includes content from all SDK modules:

Auto-Tracked Events

Full Example

Screens are rendered using Jetpack Compose. The SDK handles the full UI lifecycle. Screens are delivered via the same Firestore config bundle as other SDK modules.