You can provide a PaywallPresentationHandler to register, whose functions provide status updates for a paywall:

  • onDismiss: Called when the paywall is dismissed. Accepts a PaywallInfo object containing info about the dismissed paywall, and there is a PaywallResult informing you of any transaction.
  • onPresent: Called when the paywall did present. Accepts a PaywallInfo object containing info about the presented paywall.
  • onError: Called when an error occurred when trying to present a paywall. Accepts an Error indicating why the paywall could not present.
  • onSkip: Called when a paywall is skipped. Accepts a PaywallSkippedReason enum indicating why the paywall was skipped.
let handler = PaywallPresentationHandler()
handler.onDismiss { paywallInfo, result in
  print("The paywall dismissed. PaywallInfo: \(paywallInfo). Result: \(result)")
}
handler.onPresent { paywallInfo in
  print("The paywall presented. PaywallInfo:", paywallInfo)
}
handler.onError { error in
  print("The paywall presentation failed with error \(error)")
}
handler.onSkip { reason in
  switch reason {
  case .holdout(let experiment):
    print("Paywall not shown because user is in a holdout group in Experiment: \(experiment.id)")
  case .noAudienceMatch:
    print("Paywall not shown because user doesn't match any audiences.")
  case .placementNotFound:
    print("Paywall not shown because this placement isn't part of a campaign.")
  }
}

Superwall.shared.register(placement: "campaign_trigger", handler: handler) {
  // Feature launched
}

Wanting to see which product was just purchased from a paywall? Use onDismiss and the result parameter. Or, you can use the SuperwallDelegate.