Deep Linking

Sometimes it is not possible or desirable to neither Embed the Experience in an app or website, or Export it to a specific 3D platform. The Deep Link feature allows developers to redirect users to an experience made in Minsar using an external viewer.

Compatibility

In this scenario, there are 2 ways to view an Experience made in Minsar, and depending on the content compatibility may vary.

The scene might be compatible with the WebXR Viewer, which requires no app installation and runs in the browser. WebXR Viewer is available on Android, LuminOS (Magic Leap One), Windows Mixed Reality (HoloLens), Oculus Quest and does not work on iOS at the moment.

Incompatible experiences will need to be viewed from the XR View app, which is available on iOS and Android, and will soon be available on LuminOS and Windows Mixed Reality.

Open Experience API

Developers can let the Minsar Distribute API choose the best viewing mode with Automatic mode, or force the redirection to either the WebXR Viewer or the native app.

API Reference

Automatic Mode

View the experience from the browser if possible, otherwise redirect the user to the app store page of the native XR View app.

Deep Link: https://xrtp.link/?id=${ExperienceId}

Web App

Force redirect the user to the WebXR Viewer. If the experience is not compatible or the device not supported by WebXR Viewer, a dialog will be displayed.

Deep Link: https://xrtp.link/?id=${ExperienceId}&mode=webxr

Native App

Tries to redirect to the XR View native app. If the app isn't installed, the user is redirected to the XR View app store page.

Deep Link: https://xrtp.link/?id=${ExperienceId}&mode=native


Skips the XRTP website and directly opens the experience in XR View. This scenario assumes the user already has XR View installed.

Deep Link: xrtp://xrtp.link/view?id=${ExperienceId}

Getting Started

You will find below the different URLs you can call to open an experience. We recommend using the platform's native API for calling a URL:

iOS

From the iOS API Documentation:

1
2
3
4
guard let url = URL(string: "ONE_OF_THE_URL_ABOVE") else {
    return ;
}
UIApplication.shared.open(url, options: [:], completionHandler: nil)
1
2
3
NSURL *URL = [NSURL URLWithString:@"ONE_OF_THE_URL_ABOVE"];
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];

Android

From the Android API Documentation:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// Build the intent
val experience = Uri.parse("ONE_OF_THE_URL_ABOVE")
val xpIntent = Intent(Intent.ACTION_VIEW, experience)

// Verify it resolves
val activities: List<ResolveInfo> = packageManager.queryIntentActivities(xpIntent, 0)
val isIntentSafe: Boolean = activities.isNotEmpty()

// Start an activity if it's safe
if (isIntentSafe) {
    startActivity(mapIntent)
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// Build the intent
Uri experience = Uri.parse("ONE_OF_THE_URL_ABOVE");
Intent xpIntent = new Intent(Intent.ACTION_VIEW, experience);

// Verify it resolves
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(xpIntent, 0);
boolean isIntentSafe = activities.size() > 0;

// Start an activity if it's safe
if (isIntentSafe) {
    startActivity(mapIntent);
}

Support

Having trouble with integrating the deep linking features? Please contact our support!