Skip to content

Deep Linking for Onboarding

Deferred deep links can carry context through the app store install flow, enabling you to personalize the onboarding experience based on how the user arrived. This reduces friction and increases activation.

  1. A marketing campaign links to https://myapp.tolinku.com/onboard/fitness?plan=premium.
  2. The user does not have the app. They see a landing page and install from the app store.
  3. On first open, the SDK claims the deferred deep link.
  4. Your app receives the path (/onboard/fitness) and query parameters (plan=premium).
  5. Instead of the generic onboarding flow, the app shows a fitness-themed welcome with the premium plan pre-selected.

If the user came from a campaign that already explained the app, skip the introductory slides:

if let link = try await Tolinku.shared?.deferred.claimBySignals(
appspaceId: "your_appspace_id"
) {
if link.deep_link_path.contains("onboard") {
skipIntroAndGoToSignup()
}
}

Pass context via the deep link path or query parameters:

https://myapp.tolinku.com/onboard/cooking?diet=vegan&skill=beginner

After claiming the deferred link, parse the parameters and pre-fill the user’s profile:

val uri = Uri.parse("https://myapp.tolinku.com${link.deepLinkPath}")
val diet = uri.getQueryParameter("diet") // "vegan"
val skill = uri.getQueryParameter("skill") // "beginner"
setUserPreferences(diet, skill)

Include a promo code in the link that is automatically applied during signup:

https://myapp.tolinku.com/signup?promo=WELCOME20

Show different onboarding flows based on the acquisition channel:

// From Instagram ad
https://myapp.tolinku.com/onboard?source=instagram
// From email invite
https://myapp.tolinku.com/onboard?source=email_invite
// From friend referral
https://myapp.tolinku.com/ref/ABC123
  • Prefix: onboard
  • Link type: Dynamic (to support path segments and query params)
  • Fallback: Your default onboarding web page
// React Native
const link = await Tolinku.deferred.claimBySignals({
appspaceId: 'your_appspace_id'
});
if (link) {
const url = new URL(`https://myapp.com${link.deep_link_path}`);
const source = url.searchParams.get('source');
const promo = url.searchParams.get('promo');
if (promo) applyPromoCode(promo);
if (source === 'instagram') showVisualOnboarding();
else showStandardOnboarding();
} else {
showStandardOnboarding();
}

Use custom events to measure how personalized onboarding affects activation:

Tolinku.track('custom.onboarding_complete', {
source: acquisitionSource,
personalized: wasPersonalized ? 'yes' : 'no'
});

Compare completion rates between personalized and standard onboarding in your analytics dashboard.

  • Claim the deferred link early. Call claimBySignals or claimByToken before navigating the user, ideally in your app’s initialization code.
  • Always have a fallback. Not every install will have a deferred link (e.g. organic installs). Handle the null case gracefully with the default onboarding flow.
  • Keep context simple. Pass a few key parameters (source, plan, promo code), not the entire user profile. Complex state should be fetched from your server after signup.
  • Measure the impact. A/B test personalized onboarding against the default flow to validate that it improves activation.