Skip to main content
Represents the result of showing an offer to a user. The result indicates whether the user completed an offer flow, dismissed without completing, or had no offers available.

Definition

sealed class PresentationResult {
    data class Completed(
        val offerId: String,
        val campaignId: String?
    ) : PresentationResult()

    data class Dismissed(
        val reason: DismissReason
    ) : PresentationResult()

    data object NoOffers : PresentationResult()
}

enum class DismissReason(val value: String) {
    USER_CLOSED("user_closed"),
    NO_OFFERS("no_offer_available"),
    ERROR("error"),
}

Cases

CaseAssociated ValuesDescription
CompletedofferId: String, campaignId: String?User completed an offer flow (tapped CTA, opened link)
Dismissedreason: DismissReasonUser dismissed the offer sheet without completing
NoOffersNo offers were available for this user / placement
NoOffers is a data object — match it directly without destructuring (is PresentationResult.NoOffers).

DismissReason

ValueDescription
USER_CLOSEDUser explicitly dismissed the offer sheet (close button, back gesture)
NO_OFFERSReserved — typically surfaces as PresentationResult.NoOffers instead
ERRORAn error occurred during presentation (e.g., no foreground Activity, network failure inside the sheet)

Usage

lifecycleScope.launch {
    val result = Encore.placement("cancel_flow").show()

    when (result) {
        is PresentationResult.Completed -> {
            Log.d("Encore", "Completed offer: ${result.offerId}")
        }
        is PresentationResult.Dismissed -> {
            Log.d("Encore", "Dismissed: ${result.reason}")
            proceedWithCancellation()
        }
        is PresentationResult.NoOffers -> {
            Log.d("Encore", "No offers available")
            proceedWithCancellation()
        }
    }
}
When using the delegate handler pattern (onPurchaseRequest / onPassthrough), the SDK routes results automatically. PresentationResult is primarily used with the suspend show() variant for direct control flow.