Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.encorekit.com/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Present Encore retention offers when users dismiss your RevenueCat paywall without converting.

Presenting Offers

Option 1: Using PaywallView

If you’re using RevenueCat’s PaywallView component, use the onRequestDismiss callback to trigger Encore:
import RevenueCat
import RevenueCatUI
import Encore

PaywallView(
    placement: "your_placement",
    params: [String: Any]?,
    paywallOverrides: PaywallOverrides?,
    onRequestDismiss: { paywallInfo, paywallResult in
        // User dismissed without purchasing - trigger Encore
        Encore.placement().show()
    },
    feature: (() -> Void)?
)

Option 2: Using presentPaywallIfNeeded Modifier

If you’re using the .presentPaywallIfNeeded modifier, use the onDismiss callback:
import RevenueCat
import RevenueCatUI
import Encore

YourView()
    .presentPaywallIfNeeded(
        presentationMode: {.fullScreen, .sheet, .default},
        onDismiss: {
            // User dismissed without purchasing - trigger Encore
            Encore.placement().show()
        }
    )
See the SDK Reference for complete API details: placement() and onPurchaseRequest()

Handle Offer Results

Register RevenueCat as your purchase handler at app launch so Encore delegates purchases automatically.

Register onPurchaseRequest

Encore.shared.onPurchaseRequest { purchaseRequest in
    let products = try await Purchases.shared.products([purchaseRequest.productId])
    guard let product = products.first else { return }
    try await Purchases.shared.purchase(product: product)
}

Register onPassthrough

Called when the user dismisses the offer or no offers are available. Use this to resume the user’s original action.
Encore.shared.onPassthrough { placementId in
    // Resume your original user flow
}

Alternative: Automatic StoreKit Purchase

If you don’t set onPurchaseRequest, Encore purchases via native StoreKit 2 automatically. RevenueCat can auto-detect these transactions when configured in observer mode.

Setup

  1. Configure RevenueCat to observe external purchases:
Purchases.configure(
    with: .builder(withAPIKey: "YOUR_RC_KEY")
        .with(purchasesAreCompletedBy: .myApp, storeKitVersion: .storeKit2)
        .build()
)
No onPurchaseComplete handler is needed — RevenueCat auto-detects StoreKit transactions in observer mode.

Configure Analytics

Forward subscription events from RevenueCat to Encore

Configure RevenueCat to forward subscription events to Encore. In your RevenueCat dashboard:
  1. Go to Project Settings -> Integrations -> Webhooks
  2. Create a new webhook with URL https://encorekit.com/webhook/revenuecat/<your-token> (Encore staff will provide your token during onboarding)
  3. Save
RevenueCat will now POST subscription lifecycle events (renewals, cancellations, refunds) to Encore. This powers offer impact measurement.
Available now — share your RevenueCat project details with Encore to receive your endpoint token.
Custom server infrastructure? If you already operate your own ASSN proxy that fans out to multiple destinations, you can forward to Encore from there instead. This is an obsolete fallback — the webhook approach above is preferred for all new integrations.