PaywallPresentationHandler
A handler class that provides status updates for paywall presentation in register() calls.
Use this handler when you need fine-grained control over paywall events for a specific register() call, rather than global events via SuperwallDelegate.
This handler is specific to the individual register() call. For global paywall events across your app, use SuperwallDelegate instead.
Purpose
Provides callbacks for paywall lifecycle events when using register() with a specific handler instance.
Signature
@objcMembers
public final class PaywallPresentationHandler: NSObject {
public func onPresent(_ handler: @escaping (PaywallInfo) -> Void)
public func onDismiss(_ handler: @escaping (PaywallInfo, PaywallResult) -> Void)
public func onSkip(_ handler: @escaping (PaywallSkippedReason) -> Void)
public func onError(_ handler: @escaping (Error) -> Void)
}Parameters
| Method | Parameters | Description |
|---|---|---|
onPresent | handler: (PaywallInfo) -> Void | Sets a handler called when the paywall is presented. |
onDismiss | handler: (PaywallInfo, PaywallResult) -> Void | Sets a handler called when the paywall is dismissed. |
onSkip | handler: (PaywallSkippedReason) -> Void | Sets a handler called when paywall presentation is skipped. |
onError | handler: (Error) -> Void | Sets a handler called when an error occurs during presentation. |
Returns / State
Each method returns Void and configures the handler for the specific paywall lifecycle event.
Usage
Basic handler setup:
func registerFeatureWithHandler() {
let handler = PaywallPresentationHandler()
handler.onPresent { paywallInfo in
print("Paywall presented: \(paywallInfo.id)")
// Pause background tasks, analytics, etc.
}
handler.onDismiss { paywallInfo, result in
print("Paywall dismissed with result: \(result)")
switch result {
case .purchased:
showSuccessMessage()
case .cancelled:
showPromotionalOffer()
case .restored:
updateUIForActiveSubscription()
}
}
Superwall.shared.register(
placement: "premium_feature",
params: ["source": "feature_screen"],
handler: handler
) {
unlockPremiumFeature()
}
}Handle skip and error cases:
let handler = PaywallPresentationHandler()
handler.onSkip { reason in
print("Paywall skipped: \(reason)")
switch reason {
case .userIsSubscribed:
proceedToFeature()
case .holdout:
proceedToFeature()
default:
break
}
}
handler.onError { error in
print("Paywall error: \(error)")
showErrorAlert(error)
}Method chaining style:
func registerWithChaining() {
let handler = PaywallPresentationHandler()
.onPresent { _ in pauseVideo() }
.onDismiss { _, result in
resumeVideo()
handlePurchaseResult(result)
}
.onError { error in showAlert(error) }
Superwall.shared.register(
placement: "remove_ads",
handler: handler
) {
hideAdsFromUI()
}
}How is this guide?