Superwall

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?

Edit on GitHub