Supported on: Android SDK
1.0.33+Core Methods
Methods available directly on theAppDNA object.
Session Data Methods
Config Methods
Experiment Methods
Push Methods
There is no
registerForPush() helper on Android. Push permission (POST_NOTIFICATIONS) is a runtime permission on Android 13+ and is requested through AppDNA.push.requestPermission(activity). See the Push guide for the full setup.Presentation Methods
Web Entitlements
Deep Links
Module Namespaces
The SDK exposes the following module namespaces for direct access:
Server-driven screens are accessed via top-level methods on
AppDNA (showScreen, showFlow, dismissScreen, etc.) and the AppDNA.screenDelegate property — there is no AppDNA.screens module namespace.
Delegate Interfaces
AppDNAPushDelegate
AppDNABillingDelegate
onPurchaseCompleted may also fire at app start, on setDelegate (a delivering delegate) or at identify, for a purchase whose verification failed earlier or that was made outside the app; such a report has no paywall (its purchase_completed event carries paywall_id: ""). Grant idempotently by transaction.transactionId.
AppDNAOnboardingDelegate
AppDNAPaywallDelegate
AppDNAInAppMessageDelegate
AppDNASurveyDelegate
AppDNADeepLinkDelegate
Types
AppDNAOptions
billingProvider— omitted =StoreKit2(AppDNA’s own billing);RevenueCat/Adaptywhen that SDK owns purchases (the SDK never acknowledges; paywall taps reportproviderNotAvailable);Nonedisables billing. See Billing.vetoTimeout— seconds a Flutter / React Native bridge waits for a host hook; sign-in actions inonBeforeStepAdvancewait at least 120 s. Unused by a native Android host: itsonBeforeStepAdvanceis not timed out,onBeforeStepRenderends at 3 s and arefreshinteraction at 8 s.
Environment
LogLevel
PaywallContext
OnboardingContext
PushPayload
PushAction
PushActionButton
TransactionInfo
Entitlement
status is the server’s subscription status, passed through: active, trialing, grace_period and billing_retry count as active (as on the server); any other value (for example on_hold, paused, pending, expired, canceled, revoked or refunded) does not. AppDNA.billing.hasActiveSubscription() counts active one-time products (a lifetime unlock) as well as subscriptions. AppDNA.billing.restorePurchases() throws on failure (providerNotAvailable under RevenueCat / Adapty / None; networkError / serverError under StoreKit2; an IllegalStateException — “AppDNA SDK not configured yet — call configure() first”, which billingErrorType maps to unknown — when called before configure has set billing up or after AppDNA.shutdown()) — see Billing → Restore can fail.
ProductInfo
PurchaseResult
PaywallAction
DismissReason
WebEntitlement
DeferredDeepLink
StepAdvanceResult
StepAdvanceResult.minimumBridgeTimeoutMs(stepData) returns 120000 when stepData["action"] is a sign-in action, else null. Wrapper bridges wait max(vetoTimeout, this) for onBeforeStepAdvance, so a sign-in hook gets at least 120 s. The native SDK itself imposes no timeout.
StepConfigOverride
FormFieldType
LocationData
formatted_address is optional. A selection — in a form-step Location field or a Location content block — fills the fields that have a value (a blank value is left out; timezone_offset only with a timezone; raw_query is the text typed to find the place); typed text without a selection returns formatted_address and raw_query only (null coordinates). The stored answer keeps address as an alias of formatted_address.
Server-Driven Screens
AppDNAScreenDelegate
The delegate uses untyped maps (rather than the typedScreenResult / FlowResult data classes) so the SDK can add fields without breaking host implementations:
screen_id, dismissed, responses, last_action, duration_ms, error. Flow keys: flow_id, completed, last_screen_id, responses, screens_viewed (List<String>), duration_ms, error.
ScreenError
ScreenResult
Delivered to theshowScreen top-level callback (not the delegate):
FlowResult
Delivered to theshowFlow top-level callback (not the delegate):

