Skip to main content
The value returned by await Encore.shared.placement(_:).show(). It is the complete factual record of the presentation: either nothing appeared (and why), or the interaction ran and the record carries what happened on each independent axis. .presented means the interaction ran: the offer sheet, or on IAP-first variants the purchase sheet that stands in for it. show() never throws; errors are values on the result.

Definition

Outcome’s fields are independent axes. .notAttempted is a real value (“funnel open, nothing entered it”), never nil. A claim and a purchase are not rival cases: a flow where the user claims an offer and then completes a purchase records both, side by side.

NotPresentedReason

AdvertiserOutcome

How far Encore’s claim funnel got. The claim is staged the same way in both unlock modes, but .verified is only reachable under unlock: .strict, where an in-session verification poll upgrades the staged .claimed. In .optimistic the advertiser axis stops at .claimed.

ClaimedOffer

The transactionId is the join key to a later .strictUnlockVerified event on outcomes.

PublisherOutcome

What your EncorePurchaseController reported back.

DismissReason

How the sheet went away. See DismissReason for the full vocabulary (.userTappedClose, .userSwipedDown, .flowCompleted, .cooldown, .interrupted, and more).

Fact readers

The record carries raw facts only; there is no SDK-computed “unlocked” verdict. What a claim means is a property of the flow that served it (some flows grant on claim, some gate on verification, some grant nothing), so the SDK reports what happened and your integration decides.

Usage

The dominant pattern branches on the facts:
When the mechanism matters (analytics, debugging), switch on the record:
Branch this flow on the record itself. isActive and isActivePublisher are the durable entitlement state for gating UI elsewhere in your app, long after a presentation ends; they are not the check for what just happened here. Use result.advertiser directly to distinguish an unverified .claimed from a .verified one.
  • DismissReason, the dismissal axis of the record.
  • Errors, the EncoreError values carried by .notPresented(.error(...)) and AdvertiserOutcome.failed.
  • outcomes, the passive stream every resolution also lands on.