Grant-first model. On a successful redemption the backend has already granted the entitlement to the app user. The SDK only refreshes the local entitlements — you do not need to call
identify() or grant anything yourself.How it works
- The user completes a purchase on your published web funnel.
- Qonversion sends a redemption email with a link of the shape:
https://screens.qonversion.io/r/{project_uid}/{token} - The user taps the link on their phone → your app opens via a Universal Link (iOS) / App Link (Android).
- Your app passes the link to the Qonversion SDK, which redeems the token and refreshes entitlements.
Opened on desktop or without the app? The same URL also serves a minimal “Open in app” fallback page (for desktop browsers, or if the Universal/App Link didn’t auto-open). Visiting that page does not consume the token — it’s only consumed when the app redeems it. So the link keeps working until the user opens it on a device with the app installed (within the 30-day window).
Before you start
- Qonversion SDK installed and initialized in your app. See Install SDK. Redemption works in the SDK’s default Subscription Management mode.
- The device has a Qonversion user (the SDK creates one on launch). Redemption grants the entitlement to this device’s user — there’s nothing to identify manually.
Prerequisites
Before redemption links can open your app, register your app in the Qonversion Dashboard so Qonversion can serve the association files (apple-app-site-association / assetlinks.json) for screens.qonversion.io:
Dashboard → Project Settings → Connect Apps — add your app:
- iOS: Bundle ID + Apple Team ID
- Android: Package name + signing certificate SHA-256 fingerprint
Step 1 — Register the deep link
The redemption link uses the shared hostscreens.qonversion.io, and the path is scoped to your project: /r/{project_uid}/{token}. You can find your project_uid in the Dashboard (Connect Apps).
iOS — Associated Domains
Add the Associated Domains capability with:Android — App Links
Add an intent filter to the activity that should handle redemption, scoped to yourproject_uid:
AndroidManifest.xml
YOUR_PROJECT_UID with your project’s uid from the Dashboard.
Step 2 — Handle the redemption link
Forward the incoming URL tohandleRedemptionLink. The SDK validates the host and path internally before making any network call.
Redemption results
Reissue a redemption link
If the original link expired or was lost, let the user request a fresh one by email. The two platforms expose this differently:- iOS — your app collects the email and passes it to
reissueRedemption(email:). - Android — the SDK presents a ready-made dialog that collects the email for you via
presentReissueUI(activity:).
A successful/accepted result means the request was accepted, not that a matching purchase exists or that the mail was delivered — the backend intentionally responds uniformly so the endpoint can’t be used to probe which emails have purchases.