true; otherwise it returns false and your app should handle the link as usual.
Register the custom URL scheme
The default scheme isuserpilot- followed by your lowercased Userpilot token, which you can obtain from your Environments Page. For example, if your token is NX-12345678, the scheme is userpilot-nx-12345678.
Android
Add an intent filter for the scheme to the activity that hosts your MAUI app, alongside the existingMAIN and LAUNCHER filter. Use LaunchMode.SingleTop so links reach the running instance instead of creating a new one.
DataHost = "sdk" in the intent filter. It generates android:host="sdk" in the Android manifest, matching the host Userpilot validates for preview and push-notification URLs.
iOS
Add the scheme toPlatforms/iOS/Info.plist:
Handle the custom URL scheme
UserpilotSdk.DidHandleUrl is the single entry point on both platforms. It accepts either a string or, on iOS, an NSUrl. URLs that arrive before UserpilotSdk.Setup are cached and replayed once setup completes, so a cold launch from a link still works without you sequencing the calls.
Android
Forward the incoming URL from bothOnCreate, which covers a cold launch, and OnNewIntent, which covers a link arriving while the app runs. Handling only one of the two silently drops links in the other case.
iOS
OverrideOpenUrl in your AppDelegate:
Supported links
The SDK only claims a URL when the scheme is one of the accepted values and the host issdk. Every other URL is passed back to your app.
See Push Notifications for the delivery setup on each platform.
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.
DidHandleUrl 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
With the app installed, open a link directly to confirm your scheme is registered and your handler runs, without going through the Builder. The sample app has a Deep Link screen that shows the registered scheme and a log of received links.12345 with a real experience ID.
Troubleshooting
Nothing happens when I scan the QR code
Nothing happens when I scan the QR code
Confirm the registered scheme matches your token exactly, lowercased. Verify the registration with the commands above: if
adb reports no matching activity, the intent filter is the problem.The app opens but the experience doesn't appear
The app opens but the experience doesn't appear
The OS routed the link, so registration is correct and the problem is in the handling step. On Android, check that you forward the URL from both
OnCreate and OnNewIntent, since a cold launch only passes through OnCreate. Also confirm the SDK is set up with the same token that generated the QR code.A link opens a second copy of my activity
A link opens a second copy of my activity
Set
LaunchMode = LaunchMode.SingleTop on the activity. Without it, Android may create a new instance for the incoming link rather than delivering it to the running one through OnNewIntent.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 the staging build registers the scheme for the token it initializes the SDK with.