Deferred Deep Links in React Native

Drive installs that convert: with deferred deep links a user taps a link, installs your app, and on first launch lands exactly where you need — the correct screen with the correct context.

What are deferred deep links?

A deep link that survives the install. The user taps a campaign link (from web, social, email or QR), goes through the store if the app isn’t installed, and after installing opens your app with the original context restored.

Tap

User taps a link with product, campaign, or referral parameters.

Install

If the app is missing, the user installs it from the store.

Open

On first launch the user lands directly where you want.

Why they convert better

  • Less friction: fewer steps between the click and the action.
  • Personalized onboarding: open the exact product, cart, article, or promo.
  • Cross-channel continuity: links work from web, email, QR, social, paid ads.

Setup (iOS & Android)

iOS — Universal Links

  1. In Xcode add Associated Domains capability.
  2. Add your entries:
    applinks:{YOUR_ID}.sddl.me
    applinks:{your.custom.domain}
  3. Build & install on a device.

Detailed iOS guide: Universal Links — Setup & Troubleshooting.

Android — App Links

Add a verified intent‐filter to your main activity:

<intent-filter android:autoVerify="true">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="https"
        android:host="{YOUR_ID}.sddl.me OR {your.custom.domain}"
        android:pathPrefix="/" />
</intent-filter>

In SDDL, add your package name and fingerprint to enable verification.

Usage in React Native

Install the SDK and initialize once — it handles runtime links, initial link, and true cold start (deferred) flow.

// 1) Install
// npm i sddl-react-native-sdk
// npx pod-install   # iOS

// 2) Initialize once (e.g., in App.tsx)
import React, { useEffect } from 'react';
import { Sddl } from 'sddl-react-native-sdk';

export default function App() {
  useEffect(() => {
    Sddl.init({
      onSuccess: (payload) => {
        // Example routing:
        // if (payload.product_id) navigate('Product', { id: payload.product_id })
        console.log('SDDL payload:', payload);
      },
      onError: (msg) => console.warn('SDDL error:', msg),
    });
    return () => Sddl.dispose();
  }, []);

  return null;
}

That’s it — one init for open with link, open with initial link, and first launch after install.

Practical examples

Promo & onboarding

Apply promo on first launch and show the relevant screen.

Product deep links

Open specific product/article after install from web or ads.

Cart restore

Rebuild the cart from link context to reduce drop-off.

Referrals

Reward both sides when the referred user installs and opens.

Testing checklist

iOS

  • Real device recommended for link sources (Safari, Mail, Notes).
  • Simulator: xcrun simctl openurl booted "https://{YOUR_ID}.sddl.me/your-key"
  • Reinstall after changing Associated Domains.

Android

  • ADB: adb shell am start -a android.intent.action.VIEW -d "https://{YOUR_ID}.sddl.me/your-key"
  • Ensure verification passes for your domain.
  • Match fingerprints for debug/release builds.

Troubleshooting

  • Link opens in browser: verify iOS Associated Domains / Android App Links verification and reinstall the app.
  • No payload in app: check that you use your verified domain and a valid link key.
  • Multiple apps claim the domain: uninstall conflicting builds on the device.

FAQ

Do I need a custom URL scheme?

No. Use Universal Links on iOS and App Links on Android. Schemes are optional as a product-specific fallback.

Does this work with Expo?

Yes in bare workflow. In managed, ensure native settings for Associated Domains (iOS) and App Links (Android) are included during the build.

Do I need to host AASA/assetlinks.json?

No. SDDL serves the necessary files for your domain based on your app configuration.

Related guides

Continue exploring