Common integration questions

Key concepts

  • We use multiple payment systems, including Stripe, Paddle, PayPal, Primer, Solidgate, Unlimit
  • After the payment a user receives a link to download the app
  • In the app you resolve their web2wave user_id — either through an MMP deeplink (AppsFlyer, Adjust, Branch, …) or through web2wave deferred deeplinks if you do not use an MMP
  • Then use that user_id to tier the user in the app with their web subscription
  • We manage the rest – multiple payment systems, cancellations, RevenueCat, Adapty, etc

Can web2wave handle just Quizes and Paywalls, and Stripe will be used from our side?

To integrate Stripe with web2wave effectively, access to your Stripe keys is mandatory. This is crucial for the following reasons:

  • Fetching Prices: We need to retrieve price information via the Stripe API.
  • Discount Management: Creating and managing discounts for your products.
  • Customer & Payment Handling: Creating customers, payment methods, and managing subscription schedules like trials and introductory offers.
  • Subscription Analytics: Gathering invoice details for better analytics, such as calculating customer lifetime value (LTV).
  • Webhook Handling: Receiving webhooks for subscription status updates.
  • Payment Processing: Managing subscription payments and schedules directly.

Can we just give you Stripe Checkout link from our Stripe?

The proposed approach using Stripe Checkout will not work efficiently for the following reasons:

  • Stripe Checkout doesn't support subscription schedules, and buttons like Apple Pay cannot be placed directly on paywalls but are redirected to Stripe's external form.
  • Stripe Price details (currency, amount, period) still require Stripe keys for access.
  • It lacks PayPal integration, which can boost revenue by 10-15%.

Can we pass user_id to the app without AppsFlyer, Adjust, or Branch?

Yes. If you do not use a mobile measurement partner (MMP), web2wave provides deferred deeplinks built into every Mobile SDK — an alternative to installing and configuring AppsFlyer, Adjust, Branch, or similar attribution tools.

On first app launch, call identify(). The SDK sends device signals (platform, screen_size, timezone, os_version) to GET /api/user/identify. web2wave matches the device against the user's recent quiz or paywall session on the same project and returns user_id. No MMP SDK, no install deeplink handler, no "revisit the link after install" step.

MMP (AppsFlyer, Adjust, Branch, …)web2wave deferred deeplinks
Extra SDK in the appYesNo — included in web2wave SDK
How user_id arrivesInstall / deferred deeplinkidentify() on first launch
Typical setupMMP dashboard + deeplink in project settingsInitialize web2wave SDK + call identify()
📘

MMP and web2wave deferred deeplinks are alternatives, not backups for each other. If you already use an MMP, keep reading user_id from the deeplink — see the guides below. If you do not use an MMP, deferred deeplinks are the simplest path.

Full setup and code examples (Flutter, Swift, Kotlin, Java, React Native, Unity): web2wave deferred deeplinks.


User and tech flows



General Flow of deeplinks


  • The user purchases a subscription on the web.
  • Receives a link and instructions for installation.
    • With MMP: AppsFlyer / Adjust / Branch passes user_id into the app via install deeplink.
    • Without MMP (custom deeplink): instructions say "Install the app via the link and then REVISIT the link."
    • Without MMP (deferred deeplinks): no deeplink handling — call identify() on first app open. See web2wave deferred deeplinks.
  • In the mobile app, the user_id is obtained and saved.
  • Then, the obtained user_id is used:
    • Either for user identification in billing (Adapty/AppHud/your own billing system).
    • Or for direct requests to the web2wave API.

Passing user_id to the app

With AppsFlyer, Adjust, Branch, etc. (MMP)

Without MMP — web2wave deferred deeplinks

If you do not use AppsFlyer, Adjust, Branch, or similar tools, call identify() from the web2wave SDK on first app launch. The backend matches the device against the user's recent web session and returns user_id — no install deeplink or third-party attribution SDK required.

See web2wave deferred deeplinks for setup and code examples across all SDKs.

Without MMP — custom deeplink page

After a purchase, the user receives an app installation link in the format:

https://quiz.YOURDOMAIN.com/deeplink?user_id={GUID}&email={EMAIL}

Example: https://quiz.momslab.app/deeplink

This link:

  • If the user opens the page on the web, displays a QR code for the same page.
  • If the app is not installed, redirects them to the AppStore/Google Play based on the platform.
  • If the app is installed, passes their user_id and email to the app via a custom URL scheme, e.g.,
    yourappscheme://web2wave?user_id={GUID}&email={EMAIL}
    In the app, you create a handler for your scheme and extract data from the provided URL.

For iOS – Defining a Custom URL Scheme

For Android – Deep Linking

You can also add handling for deep links like https://quiz.YOURDOMAIN.com/deeplink along with the scheme.


Billing integrations

Integration with Our API from the App (Without Server Integration)

Receiving Subscription Information via Webhook to Your Backend

You can receive subscription information from web2wave through a webhook to your backend – Webhook Formats - Subscription Type and apply the subscription to the user in your backend.