Skip to main content
The dismissal axis of a presented flow’s Outcome: how the sheet actually ended. These are business outcomes, not errors. Genuine failures arrive as values in .notPresented(.error(EncoreError)), never here. DismissReason is a String-backed enum. The raw values are the analytics wire values: the same string lands in decline_reason on sdk_offer_sheet_dismissed, unmapped.

Definition

Cases

dismissal always records how the sheet actually ended: .flowCompleted when the SDK closed it on its own; the user’s gesture when a post-claim or success screen kept it up and they closed it themselves. The last three cases (.offerClaimed, .appBackgrounded, .appTerminated) are emission-only analytics values. Outcome.dismissal never carries them: a claim is advertiser-axis data, and the two lifecycle interruptions fire while the sheet is still up.
Reasons a sheet never appeared at all (.noOffers, .unsupportedOS, .experimentControl, .notConfigured, .alreadyPresenting, .useCaseUnavailable, .error) live on NotPresentedReason, not here.

Usage

Most apps never branch on the dismissal: the canonical check is on the claim and purchase facts, and every non-success falls through to the original flow.
  • PresentationResult, the record dismissal is one axis of.
  • Errors, genuine failures carried as values on .notPresented(.error(...)).