Supported on: iOS SDK
1.0.61+Core Methods
Session Data Methods
Config Methods
Map Methods
Experiment Methods
Push Methods
AppDNA.pushModule forwarding
For hosts that disable the notification proxy (AppDNADisableNotificationProxy = YES) and forward from their own delegate. All three are no-ops returning false unless the payload carries the AppDNA marker (appdna: "1"); calls are deduplicated per push.
Delivered / tapped tracking needs an AppDNA server from this release or later (older servers send no
appdna marker, push_id or delivery_id, so their pushes are not recognised as AppDNA pushes: no tracking, no callbacks, no tap routing).
Presentation Methods
Web Entitlements
Deep Links
Module Namespaces
Access module-specific functionality through these properties on theAppDNA singleton:
Delegate Protocols
AppDNALifecycleDelegate
AppDNA.lifecycleDelegate = self. Every method has a default no-op, so a host
implements only what it cares about.
onEventTracked fires for every tracked event, immediately after it is durable in the upload
queue — so forwarding from it cannot lose an event, and nothing you do in it can stop one being
sent. It fires on whatever thread tracked the event, which is deliberately not always the main
thread: track is called from renderers, timers and background queues. Do not block it, and
dispatch to the main thread yourself if your handler touches UI.It is an observer, not a filter — returning does not affect delivery. The SDK’s own
_sdk_events_dropped meta-event is not reported through it, so a loss counter can never be
mistaken for one of your events.Onboarding events carry location answers unreduced.
onboarding_step_completed’s selection_data and
onboarding_flow_completed’s responses reach onEventTracked as the device stored them: a picked location answer
arrives whole, with the address, coordinates and time zone of the place the user picked (and a Google answer’s place ID). AppDNA reduces an answer to what
the geocoding providers’ terms allow only on its own server, after the event leaves the device. What you store or
forward from these properties is under your terms with the provider, and for a Google answer (one carrying place_id)
under your terms with Google. A Google answer you show yourself must carry Google’s attribution wherever it is shown
without a Google map.The SDK also tracks a
sdk_decode_dropped event carrying the same values, so the fleet view does
not depend on a host implementing this. The delegate exists so YOUR crash reporter can see your
own content being dropped.AppDNAPushDelegate
AppDNABillingDelegate
AppDNA.billing.setDelegate(_ delegate: AppDNABillingDelegate?, deliversPurchases: Bool = true) (or AppDNA.billingDelegate = …, which is deliversPurchases: true). Any billing delegate drains the late-purchase delivery queue — implement onPurchaseCompleted, or pass deliversPurchases: false for a delegate that must not receive queued purchases.
onPurchaseCompleted fires for every purchase the SDK completes — paywall-driven or direct AppDNA.billing.purchase(...). On .storeKit2 it also fires for purchases that complete later (interrupted, Ask-to-Buy or offer code), possibly at launch, on setDelegate or after identify; a purchase made on another device of the same Apple ID may also be reported here, and a late purchase made while another user was signed in is delivered when that user signs in — grant idempotently by transaction.transactionId. A refused paywall tap (providerNotAvailable) and a re-buy of an owned item fire no onPurchaseCompleted.
AppDNAOnboardingDelegate
AppDNAPaywallDelegate
AppDNAInAppMessageDelegate
AppDNASurveyDelegate
AppDNADeepLinkDelegate
Key Types
AppDNAOptions
Environment
LogLevel
BillingProvider
.storeKit2 (and omitted) — the SDK owns purchases and finishes transactions. .revenueCat / .adapty — the provider owns purchases; the SDK never finishes transactions and SDK paywall taps report providerNotAvailable — under .revenueCat unless RevenueCat is linked into AppDNA (source / vendored builds only), under .adapty always (with Adapty linked, restore and entitlements go through Adapty, but the SDK never buys). .none — billing disabled; purchase and restore throw BillingError.providerNotAvailable (“No billing provider configured”). See Billing.
Info.plist keys (not runtime options)
PaywallContext
OnboardingContext
PushPayload
PushAction
TransactionInfo
ProductInfo
Entitlement
WebEntitlement
DeferredDeepLink
PaywallAction
DismissReason
StepAdvanceResult
minimumBridgeTimeout(stepData:) is the floor the Flutter and React Native bridges apply to onBeforeStepAdvance: they wait max(vetoTimeout, minimumBridgeTimeout(stepData:) ?? 0). A native iOS host is not timed out.
StepConfigOverride
FormFieldType
Server-Driven Screens
AppDNAScreenDelegate
ScreenError
ScreenResult
FlowResult
SectionAction
An action a section dispatches through its context.SectionAction is an
enum, not a struct — each case carries its own associated values.

