Gating actions
1. Gate the call site
func handleExport() async {
let decision = await amply.trackGated(event: "ExportTapped", properties: [:])
guard case .proceed = decision else { return } // user backed out — don't export
exporter.export(currentDocument) // your code, your live context
}lifecycleScope.launch {
val decision = amply.trackGated("ExportTapped")
if (decision is GateDecision.Proceed) {
exporter.export(currentDocument) // your code, your live context
} // GateDecision.Cancelled -> user backed out, don't export
}async function handleExport() {
const decision = await amply.trackGated('ExportTapped');
if (decision.outcome !== 'proceed') return; // user backed out
await exporter.export(currentDocument);
}2. Register what runs at the gate
final class RewardedAdPresenter: CampaignPresenter {
func present(params: [String: String], info: [String: Any], resolution: CampaignResolution) {
let reward = Int(params["reward"] ?? "") ?? 0 // params come from the campaign URL query
rewardedAd.show(reward: reward) { result in
switch result {
case .earned: resolution.resolve(result: .completed)
case .closed: resolution.resolve(result: .dismissed) // user backed out
case .noFill, .failed: resolution.resolve(result: .unavailable) // -> proceeds (fail-open)
}
}
}
func dismiss() { rewardedAd.tearDown() } // SDK calls this if the gate is abandoned
}
amply.registerGate(baseUrl: "yourapp://ad", presenter: RewardedAdPresenter(),
onAbort: .cancel, timeoutMs: 60_000)class RewardedAdPresenter : CampaignPresenter {
override fun present(params: Map<String, String>, info: Map<String, Any>, resolution: CampaignResolution) {
val reward = params["reward"]?.toIntOrNull() ?: 0
rewardedAd.show(reward) { result ->
when (result) {
Result.EARNED -> resolution.resolve(CampaignResult.Completed)
Result.CLOSED -> resolution.resolve(CampaignResult.Dismissed)
else -> resolution.resolve(CampaignResult.Unavailable)
}
}
}
override fun dismiss() { rewardedAd.tearDown() }
}
amply.registerGate("yourapp://ad", RewardedAdPresenter(), onAbort = AbortPolicy.Cancel, timeoutMs = 60_000)Consent and permissions are not gates
Related
Last updated