Skip to main content
A Web Funnel lets a user buy a subscription on the web (Stripe Checkout) and then unlock it inside your mobile app. After a successful purchase, Qonversion emails the buyer a one-time redemption link. When they tap it on their device, your app opens and the SDK redeems the purchase — activating the entitlement for that device. This guide covers the mobile side: setting up the deep link and handling redemption in the Qonversion SDK.
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

  1. The user completes a purchase on your published web funnel.
  2. Qonversion sends a redemption email with a link of the shape: https://screens.qonversion.io/r/{project_uid}/{token}
  3. The user taps the link on their phone → your app opens via a Universal Link (iOS) / App Link (Android).
  4. 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
Qonversion generates the association files automatically from these values. No manual file hosting is required. The redemption link uses the shared host screens.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 and Android differ here
  • iOS — you register only the domain; Qonversion scopes the path to your project server-side.
  • Android — you must register the path scoped to your project_uid. Because the domain is shared across all Qonversion merchants, a generic /r/* filter would clash with other Qonversion-powered apps on the device. Scoping to your project_uid prevents that.

iOS — Associated Domains

Add the Associated Domains capability with:
Add an intent filter to the activity that should handle redemption, scoped to your project_uid:
AndroidManifest.xml
Replace YOUR_PROJECT_UID with your project’s uid from the Dashboard. Forward the incoming URL to handleRedemptionLink. The SDK validates the host and path internally before making any network call.
Do not call identify() after a successful redemption. The entitlement is already granted to the user on the backend; the SDK refreshes it for you. Adding your own identify() is unnecessary and may cause an extra network round-trip.

Redemption results

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.