Quickstart
Create a WarpLink account, register your app, and get your first deep link working in under 30 minutes. Step by step.
This guide walks you through creating your first WarpLink deep link and testing it on a device.
1. Create an Account
Sign up at warplink.app. You'll automatically get a free organization with 10,000 monthly clicks.
2. Register Your App
In the dashboard, go to Apps and click Register App. Fill in your platform details:
{
"name": "My App",
"ios_bundle_id": "com.example.myapp",
"ios_team_id": "ABCDE12345",
"ios_app_store_url": "https://apps.apple.com/app/id123456789"
}{
"name": "My App",
"android_package_name": "com.example.myapp",
"android_sha256_fingerprints": ["AA:BB:CC:..."],
"android_play_store_url": "https://play.google.com/store/apps/details?id=com.example.myapp"
}{
"name": "My App",
"ios_bundle_id": "com.example.myapp",
"ios_team_id": "ABCDE12345",
"android_package_name": "com.example.myapp",
"android_sha256_fingerprints": ["AA:BB:CC:..."]
}3. Create Your First Link
Go to Links and click Create Link, or use the API:
curl -X POST https://api.warplink.app/v1/links \
-H "Authorization: Bearer wl_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"destination_url": "https://example.com/promo",
"ios_url": "myapp://promo",
"android_url": "myapp://promo",
"app_id": "YOUR_APP_ID"
}'
You'll get back a short link like https://aplnk.to/abc123.
4. Install the SDK
Use an SDK key here, not an API key. The SDKs authenticate with an SDK key, created in the dashboard under API Keys > SDK key. It is pre-scoped for link resolution and install attribution. An API key looks identical (wl_live_ plus 32 characters) but cannot record installs, so deep links keep resolving while every attribution call is rejected and no installs appear in your dashboard.
Add WarpLink via Swift Package Manager:
https://github.com/WarpLinkApp/warplink-ios-sdk.gitConfigure in your AppDelegate. One onLink callback receives taps and deferred installs:
import WarpLink
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
WarpLink.configure(
apiKey: "wl_live_yoursdkkeyhere000000000000000000",
options: WarpLinkOptions(onLink: { result in
if case .success(let link) = result, let link {
navigate(to: link)
}
})
)
return true
}Then forward the tapped URL to the SDK (there is no swizzling):
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
WarpLink.continue(userActivity)
}Scene-based apps forward from their scene delegate instead, and setting your delegate class to the drop-in WarpLinkAppDelegate or WarpLinkSceneDelegate does it for you. See the iOS SDK guide.
Add to your build.gradle.kts:
dependencies {
implementation("app.warplink:sdk:1.1.0")
}Initialize in your Application class. Cold start and the deferred check are wired automatically:
import app.warplink.WarpLink
import app.warplink.WarpLinkOptions
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
WarpLink.configure(
context = this,
apiKey = "wl_live_yoursdkkeyhere000000000000000000",
options = WarpLinkOptions(onLink = { result ->
result.onSuccess { link -> navigateTo(link) }
})
)
}
}Install the package:
npm install @warplink/react-nativeConfigure in your app entry. One onLink callback handles cold start, warm start, and deferred installs:
import { WarpLink } from '@warplink/react-native';
WarpLink.configure({
apiKey: 'wl_live_yoursdkkeyhere000000000000000000',
onLink: ({ deepLink }) => deepLink && navigateTo(deepLink.destination),
});On iOS, forward the tapped URL from your AppDelegate so taps reach the SDK. Add the WarpLink call to the delegate method you already have and keep returning your existing linking result, so React Navigation and Expo Linking still receive the URL:
// ios/YourApp/AppDelegate.swift
import React
import warplink_react_native
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL {
WarpLinkModule.handleIncomingURL(url)
}
return RCTLinkingManager.application(
application, continue: userActivity, restorationHandler: restorationHandler)
}Android needs no host code. The React Native SDK guide covers the Objective-C form, custom URL schemes, and Expo prebuild.
Serving links from a custom domain? Add one option so the SDK knows the domain is yours from the very first launch: linkDomains: ["links.yourapp.com"] at configure(), or the plist / manifest equivalent on native. Full detail in Use it in your app.
5. Test Your Link
- Open
https://aplnk.to/abc123on a device with your app installed - The link should open your app directly via Universal Links (iOS) or App Links (Android)
- If the app isn't installed, the user is redirected to the app store
Next Steps
- Deep Linking Concepts: Understand how deep links work
- Deferred Deep Links: Preserve context through installs
- API Reference: Full endpoint documentation