Dashboard vs. Code
AppDNA splits responsibility between the Console (UI configuration) and your code (SDK calls). Many features require zero code — the SDK handles them automatically based on what you configure in the Console.Quick Reference
| Feature | Console | Your Code |
|---|---|---|
| Paywalls | Design layout, plans, CTA, publish | AppDNA.paywall.present("id") |
| Onboarding flows | Design steps, branching rules, publish | AppDNA.onboarding.present() |
| Experiments | Create, set variants, allocate traffic | AppDNA.experiments.getVariant("id") |
| Feature flags | Create flag, toggle on/off | AppDNA.features.isEnabled("flag") |
| Remote config | Set key-value pairs | AppDNA.remoteConfig.getString("key") |
| In-app messages | Design message, set triggers, publish | None — fully automatic |
| Surveys | Design survey, set triggers, publish | None — automatic (or present manually) |
| Push notifications | Create campaigns in Retention | AppDNA.setPushToken() + register |
| Deep links | Configure routes | AppDNA.deepLinks.checkDeferred() |
| Event tracking | — | AppDNA.track("event", properties) |
| User identity | — | AppDNA.identify(userId, traits) |
| Billing | Link store products to plans | AppDNA.billing.purchase("productId") |
| Web entitlements | Stripe integration in Settings | Automatic after identify() |
What’s Automatic (Zero Code)
The SDK tracks these events automatically. You do not need to calltrack() for any of them.
Session & Lifecycle
session_start,session_end,app_open,app_close
Onboarding
- Flow started, step viewed, step completed, step skipped, flow completed, flow dismissed
Paywalls
- Paywall presented, actions, dismissed, purchase started/completed/failed
Billing
- Purchase started, completed, failed, canceled, restore started/completed
Push
- Token registered, permission granted/denied, delivered, tapped
Experiments
- Exposure tracked once per session on first
getVariant()call
In-App Messages
- Message presented, action taken, dismissed
Surveys
- Survey presented, response submitted, dismissed
For the full list of auto-tracked events with their properties, see the Auto-Tracked Events reference.
Callbacks — When You Want to React
Every SDK module provides a delegate or callback interface so you can respond to events in your own code. Common scenarios:- iOS
- Android
- Flutter
- React Native
Paywalls
PaywallDelegate — purchase, dismiss, action callbacks
Onboarding
OnboardingDelegate — step, completion, response callbacks
Billing
BillingDelegate — purchase, restore, entitlement callbacks
Surveys
SurveyDelegate — presentation, response, dismiss callbacks

