Superwall

SuperwallEvent

An enum representing analytical events that are automatically tracked by Superwall.

These events provide comprehensive analytics about user behavior and paywall performance. Use them to track conversion funnels, user engagement, and revenue metrics in your analytics platform.

Common events to track for conversion analysis include triggerFire, paywallOpen, transactionStart, and transactionComplete.

Purpose

Represents internal analytics events tracked by Superwall and sent to the SuperwallDelegate for forwarding to your analytics platform.

Signature

public enum SuperwallEvent {
  // User lifecycle events
  case firstSeen
  case appOpen
  case appLaunch
  case appClose
  case sessionStart
  case identityAlias
  case appInstall
  
  // Deep linking
  case deepLink(url: URL)
  
  // Paywall events
  case triggerFire(placementName: String, result: TriggerResult)
  case paywallOpen(paywallInfo: PaywallInfo)
  case paywallClose(paywallInfo: PaywallInfo)
  case paywallDecline(paywallInfo: PaywallInfo)
  case paywallWebviewProcessTerminated(paywallInfo: PaywallInfo)
  case paywallPreloadStart(paywallCount: Int)
  case paywallPreloadComplete(paywallCount: Int)
  
  // Transaction events
  case transactionStart(product: StoreProduct, paywallInfo: PaywallInfo)
  case transactionComplete(transaction: StoreTransaction?, product: StoreProduct, type: TransactionType, paywallInfo: PaywallInfo)
  case transactionFail(error: TransactionError, paywallInfo: PaywallInfo)
  case transactionAbandon(product: StoreProduct, paywallInfo: PaywallInfo)
  case transactionRestore(restoreType: RestoreType, paywallInfo: PaywallInfo)
  case transactionTimeout(paywallInfo: PaywallInfo)
  
  // Subscription events
  case subscriptionStart(product: StoreProduct, paywallInfo: PaywallInfo)
  case freeTrialStart(product: StoreProduct, paywallInfo: PaywallInfo)
  case subscriptionStatusDidChange
  
  // System events
  case deviceAttributes(attributes: [String: Any])
  case reviewRequested(count: Int)

  // Permission events (Request permission action)
  case permissionRequested(permissionName: String, paywallIdentifier: String)
  case permissionGranted(permissionName: String, paywallIdentifier: String)
  case permissionDenied(permissionName: String, paywallIdentifier: String)
  
  // And more...
}

Parameters

Each event case contains associated values with relevant information for that event type. Common parameters include:

  • paywallInfo: PaywallInfo - Information about the paywall
  • product: StoreProduct - The product involved in transactions
  • url: URL - Deep link URLs
  • attributes: [String: Any] - Device or user attributes
  • count: Int - For reviewRequested, the number of times a review has been requested (available in version 4.8.1+)
  • permissionName: String / paywallIdentifier: String - The permission requested from the paywall and the identifier of the paywall that triggered it (new in 4.12.0).
  • paywallCount: Int - Total number of paywalls being preloaded when paywallPreloadStart/paywallPreloadComplete fire (new in 4.12.0).

Returns / State

This is an enum that represents different event types. Events are received via SuperwallDelegate.handleSuperwallEvent(withInfo:).

Usage

These events are received via SuperwallDelegate.handleSuperwallEvent(withInfo:) for forwarding to your analytics platform.

Permission events (4.12.0+)

The Request permission action for the paywall editor is rolling out and isn't visible in the dashboard yet. Editor support is coming very soon, so you may not see the action in your workspace today.

When you wire the Request permission action in the paywall editor, the SDK emits permission_requested, permission_granted, and permission_denied events. Use them to track opt-in funnels or adapt your UI:

func handleSuperwallEvent(withInfo eventInfo: SuperwallEventInfo) {
  switch eventInfo.event {
  case .permissionRequested(let permission, let paywallId):
    logger.info("Prompting \(permission) from paywall \(paywallId)")
  case .permissionGranted(let permission, _):
    analytics.track("permission_granted", properties: eventInfo.params)
  case .permissionDenied(let permission, _):
    showSettingsNudge(for: permission)
  default:
    break
  }
}

See the Request permissions from paywalls guide for setup details and Info.plist requirements.

Paywall preloading events (4.12.0+)

paywallPreload_start and paywallPreload_complete fire whenever the SDK preloads cached paywalls in the background. Both events include paywall_count inside eventInfo.params, and the enum cases expose the same value via paywallCount. This makes it easy to time or monitor cache warm-up:

switch eventInfo.event {
case .paywallPreloadStart(let count):
  Metrics.shared.begin("paywall_preload", metadata: ["count": count])
case .paywallPreloadComplete(let count):
  Metrics.shared.end("paywall_preload", metadata: ["count": count])
default:
  break
}

Pair these events with the shouldPreload option if you want to compare “on-demand” versus background caching strategies.

How is this guide?

Edit on GitHub