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 aPaywallInfo
object containing info about the dismissed paywall, and there is aPaywallResult
informing you of any transaction.onPresent
: Called when the paywall did present. Accepts aPaywallInfo
object containing info about the presented paywall.onError
: Called when an error occurred when trying to present a paywall. Accepts anError
indicating why the paywall could not present.onSkip
: Called when a paywall is skipped. Accepts aPaywallSkippedReason
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?