Superwall
Advanced

Using the Presentation Handler

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
}
import { usePlacement } from "expo-superwall";
import { Button } from "react-native";

function PaywallButton() {
  const { registerPlacement } = usePlacement({
    onPresent: (paywallInfo) => {
      console.log(`Handler (onPresent): ${paywallInfo.name}`);
    },
    onDismiss: (paywallInfo, paywallResult) => {
      console.log(`Handler (onDismiss): ${paywallInfo.name}`);
      // Check the result to see if user purchased
      console.log(`Result:`, paywallResult);
    },
    onError: (error) => {
      console.log(`Handler (onError): ${error}`);
    },
    onSkip: (skipReason) => {
      console.log(`Handler (onSkip):`, skipReason);
    },
  });

  const handlePress = async () => {
    await registerPlacement({
      placement: 'campaign_trigger',
      feature: () => {
        // Feature launched
        console.log("Feature unlocked!");
      },
    });
  };

  return <Button onPress={handlePress} title="Show Paywall" />;
}

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

How is this guide?