WarpLink SDK 1.1.0: One Callback, Guaranteed Matches, Rebuilt Networking
WarpLink SDK 1.1.0 for iOS, Android, and React Native: one onLink callback for every link, a matchGuaranteed flag, automatic retries on weak connections, and campaign parameters on every resolved link.
TL;DR: WarpLink SDK 1.1.0 is available today for iOS, Android, and React Native. One
onLinkcallback receives every link, a newmatchGuaranteedflag tells you when a match is deterministic, networking is rebuilt with automatic retries, and campaign parameters arrive with every resolved link. Most apps upgrade by changing one version number. The upgrade guide has the steps.
WarpLink is link infrastructure for mobile teams: deep linking, install attribution, and real-time analytics in one SDK. Version 1.1.0 ships for all three SDKs on the same day.
One Callback for Every Link
Pass onLink to configure() and the SDK routes every link to it: cold start, warm start, and deferred deep links after an install. Configuring the SDK also starts the deferred deep link check, which is the request that attributes the install. deepLink.isDeferred tells you which kind of link arrived.
import { WarpLink } from '@warplink/react-native';
WarpLink.configure({
apiKey: 'wl_live_yoursdkkeyhere000000000000000000',
onLink: ({ deepLink, error }) => {
if (error || !deepLink) return;
// Fired for taps and deferred installs. Check deepLink.isDeferred.
navigateTo(deepLink.destination);
},
});
The native SDKs take the same shape. On iOS, WarpLinkAppDelegate and WarpLinkSceneDelegate forward Universal Links for you. If you keep your own delegate, WarpLink.open(_:) and WarpLink.continue(_:) do the same in one line each, with no method swizzling. On Android, cold start is automatic and warm start is one call to WarpLink.onNewIntent(intent).
Each automatic step can be switched off, and the manual methods remain, so an app that routes links itself can keep doing so.
Know When a Match Is Guaranteed
Every resolved link carries matchGuaranteed. It is true only for a deterministic match: a Universal Link or App Link tap, the Play Install Referrer, or a device ID match. It is false for a probabilistic match made from device signals.
A probabilistic match is a best guess, and a guess can name the wrong person. Gate auto sign-in, personal data, and anything else you cannot show the wrong user on this flag, not on the match alone.
WarpLink.configure(
apiKey: "wl_live_yoursdkkeyhere000000000000000000",
options: WarpLinkOptions(onLink: { result in
guard case .success(let deepLink) = result, let deepLink else { return }
if deepLink.matchGuaranteed {
// Safe to restore a session or show personal data.
restoreSession(for: deepLink)
}
navigate(to: deepLink)
})
)
Campaign Parameters Arrive With the Link
The query string on a tapped link travels into the resolved link. destination and deepLinkUrl carry the link's UTM and custom parameters, and customParams holds the full parameter set. A campaign tag you put on a link reaches the screen it opens, so your in-app analytics can read the same source, medium, and campaign as the click.
For the full pattern, see How to Pass UTM Parameters Through Deep Links Into Your App.
Networking Rebuilt for Weak Connections
Request handling in the iOS and Android SDKs is rebuilt around a dedicated retry layer. The React Native SDK uses the same native code on each platform.
When a link resolve or the deferred check meets a dropped or flaky connection, or a server error, the SDK tries again. It makes up to three attempts, each with its own time limit, within about 12 seconds in total. On a weak connection, the second attempt usually delivers, in about eight seconds.
Every attempt for one tap carries the same identifier, so a retried tap records one click in your analytics. A refusal, such as a missing or expired link, is never retried, because trying again cannot change the answer.
On iOS, a tap that arrives after a long stay in the background retries on a fresh connection. In React Native, one tap is still one onLink event, and if every attempt fails, the error arrives once as E_NETWORK_ERROR.
Smaller Additions
- Is this URL yours?
WarpLink.isWarpLinkURL(_:)on iOS andWarpLink.isWarpLinkUri(uri)on Android answer synchronously, with no network call. Use them when your app forwards every incoming URL and needs to decide which ones belong to WarpLink. - Declare your link domains. Set
linkDomainsin code, aWarpLinkDomainsarray inInfo.pliston iOS, or anapp.warplink.DOMAINSmanifest entry on Android, so the SDK knows which custom domains are yours. The SDK also learns your verified domains from the server. - Typed Swift models.
WarpLinkDeepLinkconforms toCodable,Sendable, andEquatable, andcustomParamsuses a typedJSONValue. - API key status on iOS.
WarpLink.isApiKeyValidreports the server's verdict on your key. An invalid or revoked key also logs a warning, even with debug logging off. - Awaitable setup in React Native.
configure()returns aPromise<void>. - Native SDKs included.
@warplink/react-native1.1.0 builds against the 1.1.0 iOS and Android SDKs.
How to Upgrade
Most apps upgrade by changing one version number, in Swift Package Manager on iOS, Gradle on Android, or npm on React Native, and rebuilding.
On iOS, check one thing first. customParams values are typed JSONValue, so code that casts a value out of the dictionary switches to a typed accessor. Replace customParams["id"] as? String with customParams["id"]?.stringValue.
The upgrade guide has the exact dependency line for each platform. The iOS, Android, and React Native setup guides cover onLink, link domains, and matchGuaranteed in full.
Frequently Asked Questions
How do I upgrade to WarpLink SDK 1.1.0?
Change the SDK version to 1.1.0 in Swift Package Manager, Gradle, or npm, then rebuild. Most apps need no other change. On iOS, code that casts a value out of customParams, such as customParams["id"] as? String, switches to the typed accessor customParams["id"]?.stringValue. The upgrade guide lists the exact dependency line for each platform.
Do I have to use the onLink callback? No. The manual methods remain in 1.1.0, and each automatic step can be switched off in the SDK options, so an app that routes links itself can keep doing so.
What does matchGuaranteed mean?
matchGuaranteed is true only for a deterministic match: a Universal Link or App Link tap, the Play Install Referrer, or a device ID match. It is false for a probabilistic match made from device signals. Gate auto sign-in, personal data, and anything else you cannot show the wrong person on this flag.
Related Guides
- Carry campaign data into the app: How to Pass UTM Parameters Through Deep Links Into Your App shows how link parameters reach the screen they open.
- The install side on iOS: Deferred Deep Linking on iOS walks through the match cascade in Swift.
- Before you ship the upgrade: How to Test Deep Links on iOS and Android has the simulator and device commands.
WarpLink Team
Building affordable, reliable link infrastructure for mobile teams. Deep linking, install attribution, and real-time analytics in one SDK.
Related Posts
Firebase Dynamic Links Migration Guide (30 Minutes)
Migrate from Firebase Dynamic Links to WarpLink in 30 minutes. Step-by-step code examples for iOS, Android, and React Native.
Deep Links in Instagram and Facebook In-App Browsers: The Fixes
A deep link tapped in the Instagram, Facebook, or TikTok in-app browser usually will not open your app. What each one does on iOS and Android, and the fixes.
How to Test Deep Links on iOS and Android: Commands and Checklist
Test deep links on iOS and Android with real commands: simctl and adb, Universal Link and App Link verification, deferred installs, and a checklist.