Skip to main content
Registers a handler invoked for all not-granted outcomes — when the user dismisses the offer or no offers are available. This signals “Encore didn’t result in a purchase — run your original button logic.”
Set onPassthrough before calling placement().show(). If not set, the SDK will log a warning.

Signature

fun onPassthrough(
    handler: (placementId: String) -> Unit
): Encore

Parameters

NameTypeDescription
handler(String) -> UnitCallback receiving the placementId. Execute your original button logic here.

Returns

Returns the Encore instance for chaining.

Usage

Cancel flow passthrough

Encore.shared.onPassthrough { placementId ->
    // Encore didn't intercept — proceed with original action
    when (placementId) {
        "cancel_flow" -> proceedWithCancellation()
        "downgrade_flow" -> proceedWithDowngrade()
        else -> Log.d("Encore", "Passthrough for $placementId")
    }
}

Chained with onPurchaseRequest

Encore.shared
    .onPurchaseRequest { productId, placementId ->
        billingManager.purchase(productId)
    }
    .onPassthrough { placementId ->
        router.handleOriginalAction(placementId)
    }
Use onPassthrough to ensure your original button logic still runs when Encore doesn’t intercept. For example, if a user taps “Cancel Subscription” and Encore has no offers, the passthrough handler lets you proceed with the cancellation flow.