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
| Name | Type | Description |
|---|---|---|
placement | string | Placement to evaluate. Always await Superwall.configure before calling. |
params | Record<string, any> or Map<string, any> | Optional parameters that feed audience filters. Keys beginning with $ are reserved and removed. Nested maps or arrays are not supported. Defaults to omitted. |
Returns / State
The promise resolves to one of the PresentationResult subclasses exported from expo-superwall/compat:
PresentationResultPaywall– A paywall would be shown. Includes anexperimentfield (id,groupId, etc.).PresentationResultHoldout– The user is placed in a holdout for the experiment.PresentationResultNoAudienceMatch– No matching audience rules.PresentationResultPlacementNotFound– The placement name is not attached to any campaign.PresentationResultUserIsSubscribed– The SDK determined the user is already active, so no paywall will show.PresentationResultPaywallNotAvailable– The paywall could not be displayed (no activity, already showing, offline, etc.).
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)
}
}Related
useSuperwall– Provides the hook variant shown above.SuperwallProvider– Configure the SDK before calling this method.- Feature gating quickstart – Shows the full flow of gating UI with placements.
How is this guide?
Edit on GitHub