Skip to main content
Represents the result of showing an offer to a user. The result indicates whether the user completed an offer, dismissed it, or no offers were 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 without completing
NoOffersNo offers available for this user

DismissReason

ValueDescription
USER_CLOSEDUser explicitly dismissed the offer sheet
NO_OFFERSNo offers were available to show
ERRORAn error occurred during presentation

Usage

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

    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 -> {
            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.