userConfirmedCompletion = true, and your app grants the prize.
Requires iOS SDK 2.3.0 or Android SDK 2.3.0. React Native and Flutter support ships in their own releases; check each bridge’s changelog.
Identify your users
Encore keeps score by the user ID your app passes toidentify(), not by the device, so only identified users are promised a prize. Call it after sign in, before show():
identify() links them to an account, so signing in can’t earn that offer’s prize again.
What the flag means
userConfirmedCompletion means the user said they finished and Encore’s server granted the prize. It is still the user’s own word. It does not mean the advertiser confirmed a conversion. Encore records the answer for that user, but books no transaction, conversion, payout, or entitlement for it, and sends nothing to your server. Of the prize itself, only its id leaves the device; the title, detail, and icon stay on it.
To grant only when the advertiser verifies the completion, use the offer_completed webhook instead. It carries the same transactionId that your app reads from result.claim.
Register the prize and grant it
Pass aPublisherReward on the placement, then read the flag on result.claim, the result show() returns. Passing a prize is a commitment: grant it whenever the flag is true.
transactionId can be null, and the fallback of user ID plus campaignId matches that rule. Use the same user ID you gave identify(), so your grant key and Encore’s count belong to the same person. On Android, call showLevelReward(lifecycleScope, userId) from an Activity or Fragment. detail and iconUrl are optional, the icon shows only for an http or https URL with a host, and a blank id or title counts as no prize, so the sheet shows no promise. The builder method is listed in the placement() reference for iOS and Android.
How Encore decides the prize
A Yes is sent to Encore under the user’s ID, and Encore’s server alone decides whether it earns the prize. It grants the prize only for:- The first Yes for an offer: once per user per offer, ever. This rule is fixed.
- Within your daily limit: at most 3 prizes per user in any 24 hours by default. The window rolls; it doesn’t reset at midnight.
Set the daily limit
You can set your own daily limit. Values are clamped to 1 through 10. Set it any time beforeshow(); it survives reset(). The SDK sends it to the server with each presentation that passes a prize.
No answer, no prize
If the server can’t be reached when the sheet opens, there’s no promise. A Yes to a promise waits up to 5 seconds for the server’s answer. With no answer in that time (offline, slow, or a timeout), the flag stays false. The SDK sends the report again later, so the offer is still hidden once it lands, but a late answer never sets the flag.An offer the user already completed
A user’s offer list can be older than their last Yes: they may have finished the offer on another device since it loaded. If they tap it, the server refuses the claim as already completed. The sheet drops that offer and the user picks another. When it was the last one, the sheet closes as flow completed (.flowCompleted on iOS, FlowCompleted on Android) with no claim on the result, so your app runs its original flow as for any presentation without a claim.
When the flag stays false
Only a Yes the server grants sets the flag. It stays false when the user:- answers No,
- closes the sheet without answering,
- closes the sheet while a promised Yes is still waiting for the server,
- isn’t identified,
- has reached your daily limit,
- already said Yes to this offer,
- can’t get an answer from the server in time,
- changes while the sheet is open, because
identify()switched to a different user orreset()ran.
campaignId, as in the sample earlier on this page, so no other path in your app pays that offer twice.
The flag never changes the claim’s stage. A confirmed claim is still claimed, and it keeps the flag when Encore verifies the claim in strict unlock mode. Reading result.claim covers both stages. A Yes that earns the prize always closes the sheet, so the result you receive is the confirmed claim.
Which users see the question
The promise and the question appear only when the served variant is built for reward for trying. Every other variant ignores the prize. Registering a prize is always safe, even for users who aren’t in that variant: their flag just stays false.Related
- Reward Users: the use case this runs in.
ClaimedOfferfield by field: iOS and Android.