Skip to main content
The result of showing an offer to a user: either nothing appeared (NotPresented with a reason), or a sheet appeared and the record carries two independent funnels (advertiser claim, publisher purchase) plus how the sheet was dismissed. show() returns this record and never throws; errors are values on it.

Definition

The Outcome fields are independent axes; NotAttempted is a real value (“funnel open, nothing entered it”), never null.

Fact readers

Convenience properties on every result, so most call sites never need the when:
userConfirmedCompletion is true only when the placement passed a prize, the user said they finished the offer, and Encore’s server granted the prize: the first Yes per user per offer, within your daily limit, for a user your app identified. It is still the user’s word: Encore books no transaction or payout for it, and it never changes the stage (Claimed, or Verified in strict mode). It stays false in an app set to pay only when the brand confirms; credit those prizes from the offer_completed webhook. See Reward for Trying.
The record carries raw facts only; there is no SDK-computed unlocked or isPurchased verdict. What a claim means is a property of the flow that served it, so hosts branch on the axes: result.claim != null || result.publisher == PublisherOutcome.Purchased. The configured UnlockMode selects only the in-flow verification mechanism; it never changes how a result is read.

The axes

AdvertiserOutcome

Encore’s funnel: how far the claim got.

PublisherOutcome

Your funnel: what your purchase controller reported back.

DismissReason

How a presented sheet went away: the user’s closing gesture, a server-side rejection, or the SDK ending the flow itself. Every case, its analytics wire value, and the emission-only values that never reach a record are in DismissReason.

NotPresentedReason

Why no sheet ever appeared.

Usage

Most call sites branch on the facts:
When the mechanism detail matters, read the record:
To distinguish an unverified claim from a verified one, read result.advertiser directly.