getPresentationResult()

Check the outcome of a placement without presenting a paywall.

Purpose

Retrieves the presentation result for a placement without presenting the paywall. Call this when you need to know whether a placement would show a paywall, send the user to a holdout, or fail due to missing configuration before you decide how to render UI.

Signature

Hook usage:

const { getPresentationResult } = useSuperwall()

await getPresentationResult(
  placement: string,
  params?: Record<string, any>
): Promise<PresentationResult>

Compat API usage:

import Superwall from "expo-superwall/compat"

await Superwall.getPresentationResult({
  placement: string,
  params?: Map<string, any>
}): Promise<PresentationResult>

Both variants return a promise that resolves to a PresentationResult object from expo-superwall/compat.

Parameters

Prop

Type

Returns / State

The promise resolves to one of the PresentationResult subclasses exported from expo-superwall/compat:

Prop

Type

If configuration fails or the native module throws, the promise rejects—catch and handle these errors as you would any async call.

Usage

import {
  PresentationResultPaywall,
  PresentationResultHoldout,
  PresentationResultNoAudienceMatch,
  PresentationResultPlacementNotFound,
} from "expo-superwall/compat";
import { useSuperwall } from "expo-superwall";

export function FeatureGate() {
  const { getPresentationResult } = useSuperwall();

  const checkAccess = async () => {
    const result = await getPresentationResult("premium_feature", { source: "settings" });

    if (result instanceof PresentationResultPaywall) {
      setExperiment(result.experiment);
      setState("locked");
    } else if (result instanceof PresentationResultHoldout) {
      setState("holdout");
    } else if (result instanceof PresentationResultNoAudienceMatch) {
      unlockFeature();
    } else if (result instanceof PresentationResultPlacementNotFound) {
      console.warn("Placement missing from dashboard");
    } else {
      fallbackFlow();
    }
  };

  return <Button title="Check access" onPress={checkAccess} />;
}
import Superwall, {
  PresentationResultPaywall,
  PresentationResultPaywallNotAvailable,
} from "expo-superwall/compat";

async function inspectPlacement() {
  const result = await Superwall.getPresentationResult({
    placement: "premium_feature",
    params: new Map([["source", "home"]]),
  });

  if (result instanceof PresentationResultPaywallNotAvailable) {
    // Show offline UI
    return;
  }

  if (result instanceof PresentationResultPaywall) {
    console.log("Experiment group:", result.experiment.groupId);
  }
}

How is this guide?

On this page