cordova-plugin-deeplinks to receive them. You declare the scheme once in package.json, Cordova writes the native configuration during the build, and your JavaScript forwards each link to the Userpilot SDK.
Register the custom URL scheme
Install the deep links plugin
Configure the plugin
Add the configuration below to yourpackage.json, replacing APP_TOKEN with your app’s Userpilot token from your Environments Page. For example, if your token is NX-12345678, your scheme value is userpilot-nx-12345678.
DEEPLINK_HOST must be sdk, because that’s the host the SDK matches on.
Generated configuration
From the plugin configuration above, Cordova adds the following to yourconfig.xml:
event value, deeplink, is the event name you subscribe to in JavaScript below.
After you build the project, the configuration is reflected in the native platform files. You don’t edit these by hand, but they’re useful for verifying the scheme landed correctly.
iOS — in Info.plist:
AndroidManifest.xml, on the main Activity:
Handle the custom URL scheme
Subscribe to thedeeplink event and pass eventData.url to userpilot.didHandleUrl(url, onSuccess, onFail). The success callback receives true when the SDK recognized and handled the link, and false when your app should handle it.
A link can arrive before setup has finished, particularly on a cold start from the Builder’s QR code. Buffer that link and replay it once setup completes, otherwise the first preview after a launch is silently dropped.
Supported links
The SDK only claims a URL when the scheme matches your token and the host issdk. Every other URL is passed back to your app.
On iOS, notification taps are handled natively by the SDK and never reach the
deeplink event, so follow Push Notifications for that setup.Preview an experience with a QR code
Userpilot can render a draft experience on your device before you publish it, so you can check layout, copy, and behavior on a real screen. Preview is supported for Flows and Surveys. The preview is delivered over the custom URL scheme. It works once your app is installed on the device and the scheme is registered and handled as described above.1
Open the experience
Open a Flow or Survey in the Experience Builder and enter Edit Mode.
2
Start the preview
Select Preview in the top-right corner of the builder. A popup with a QR code appears.
3
Scan the QR code
Scan the code with your device camera. Your app opens and the experience appears.
- You don’t need to apply or save your changes before previewing them.
- The experience doesn’t need to be live.
- A preview bypasses the experience’s targeting and frequency settings, so it appears even when the current user wouldn’t normally qualify for it.
- Once you close the experience, the app resumes normal behavior.
Test push notifications
You can send a test push to a specific user from the Userpilot dashboard and verify delivery and tap handling on a real device without sending anything to your wider audience. The notification doesn’t need to be live, so you can test it while it’s still a draft.- Test pushes work in both the staging and production environments.
- Test pushes are not counted as real sends, and they’re excluded from analytics.
- Test pushes bypass the notification’s targeting and frequency settings.
deeplink handling there. If the notification appears but tapping it does nothing, the scheme registration is the first thing to check.
Test a deep link from the command line
Open a link directly to confirm your scheme is registered and your handler runs, without going through the Builder:12345 with a real experience ID.
Troubleshooting
Nothing happens when I scan the QR code
Nothing happens when I scan the QR code
Confirm
URL_SCHEME in package.json matches your token exactly, lowercased, then rebuild so Cordova regenerates the native configuration. Check the generated Info.plist and AndroidManifest.xml shown above to confirm the scheme actually landed.The deeplink event never fires
The deeplink event never fires
Two things to check.
cordova-plugin-deeplinks must be installed and the app rebuilt after installing it. And the event name you subscribe to must match the event attribute in the generated <universal-links> entry in config.xml, which is deeplink.The first preview after launching the app is ignored
The first preview after launching the app is ignored
The link arrived before
setup completed, so the SDK wasn’t ready to act on it. Buffer the URL and replay it from the setup success callback, as shown above.Tapping an Android push notification does nothing
Tapping an Android push notification does nothing
Notification taps travel over this same URL scheme on Android, so they need the scheme registration and the
deeplink forwarding described above. Confirm DEEPLINK_HOST is sdk.Preview works in production but not in staging
Preview works in production but not in staging
Each environment has its own token, and the scheme follows the token. Confirm
URL_SCHEME matches the token that build initializes the SDK with, then rebuild.