WarpLink
SDKsReact Native

React Native SDK

Integrate WarpLink deep linking into your React Native app.

Requirements: React Native 0.71+, React 18+, iOS 15+ and/or Android API 26+. This SDK requires native modules and does not work with Expo Go — use a development build.

Installation

npm install @warplink/react-native
cd ios && pod install
npx expo install @warplink/react-native
npx expo prebuild

Platform Setup

The React Native SDK bridges to native iOS and Android SDKs. Both platforms need configuration.

iOS

  1. Open Xcode, select your app target > Signing & Capabilities
  2. Add Associated Domains > applinks:aplnk.to
  3. Enable Associated Domains in your App ID at developer.apple.com

For Expo, add to app.json:

{
  "expo": {
    "ios": {
      "associatedDomains": ["applinks:aplnk.to"]
    }
  }
}

Android

Add the intent filter to your main Activity in android/app/src/main/AndroidManifest.xml:

<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="aplnk.to" />
</intent-filter>

For Expo, add to app.json:

{
  "expo": {
    "android": {
      "intentFilters": [{
        "action": "VIEW",
        "autoVerify": true,
        "data": [{ "scheme": "https", "host": "aplnk.to" }],
        "category": ["BROWSABLE", "DEFAULT"]
      }]
    }
  }
}

Configure the SDK

Call configure() once at app startup, outside of any React component:

import { WarpLink } from '@warplink/react-native';

WarpLink.configure({
  apiKey: 'wl_live_abcdefghijklmnopqrstuvwxyz012345',
  debugLogging: true,       // Enable native console logging
  matchWindowHours: 48,     // Attribution window (default: 72)
});

configure() is synchronous. It validates the key format locally and delegates async server validation to the native SDK.

import { useEffect } from 'react';
import { WarpLink } from '@warplink/react-native';

function App() {
  useEffect(() => {
    // Warm-start deep links
    const unsubscribe = WarpLink.onDeepLink((event) => {
      if (event.deepLink) {
        navigateTo(event.deepLink.destination);
      }
    });

    // Cold-start deep link
    WarpLink.getInitialDeepLink().then((link) => {
      if (link) navigateTo(link.destination);
    });

    return unsubscribe;
  }, []);

  return <>{/* Your app */}</>;
}

Next Steps

On this page