> ## Documentation Index
> Fetch the complete documentation index at: https://learn.biq.li/llms.txt
> Use this file to discover all available pages before exploring further.

# Configure mobile deep linking

> Attach a registered Mobile App and configure routes, referral data, dynamic values, fallbacks, and Deep View.

<Warning>
  Mobile deep linking is in **Public Beta**. Complete real Google Play and TestFlight deferred-install tests before production use.
</Warning>

Open **Links**, create or edit a link on a verified custom domain, then expand **Mobile Deep Linking & Deep View**.

Only a workspace owner can view or change mobile link settings. Before
continuing, a workspace owner must [register a Mobile App](/help/workspace/developer/mobile-apps)
on the same custom domain.

## Enable mobile deep linking

1. Turn on **Mobile Deep Linking**.
2. Select the target Mobile App. The app must be active and attached to the link's custom domain.
3. Enter the in-app route.
4. Configure only the referral data and dynamic values the app needs.
5. Optionally override the Mobile App's platform store URLs for this link.
6. Enable **iOS Deep View** when the link needs exact iOS deferred attribution.
7. Save the link and test it on each supported platform.

Success means the saved link names the Mobile App, its route, and the correct platform fallbacks. An installed app should resolve the link with `exact_app_link` after its association file has propagated.

## Field reference

| Field                      | Requirement                                                                                                                                        |
| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |
| Target Mobile App          | An active app attached to the same custom domain.                                                                                                  |
| In-app route               | Required. Starts with `/`, contains no query, fragment, or double slash, and is at most 500 characters. Example: `/invite/accepted`.               |
| Referral code              | Optional. From 1 to 128 letters, digits, `.`, `_`, `~`, or `-`.                                                                                    |
| Allowed dynamic query keys | Optional. Up to 20 unique keys. Each starts with a lowercase letter, uses lowercase letters, digits, or underscores, and is at most 40 characters. |
| Safe metadata              | Optional JSON object. Up to 20 top-level keys, three nested levels, 4 KB encoded, and 1,000 characters per string.                                 |
| iOS fallback               | Optional per-link override. Use `apps.apple.com`, or `testflight.apple.com` for testing. Leaving it empty uses the Mobile App default.             |
| Android fallback           | Optional per-link override. Must be a Google Play URL whose package `id` matches the Mobile App. Leaving it empty uses the Mobile App default.     |
| iOS Deep View              | Requires Deep View to also be enabled in the custom-domain settings.                                                                               |
| Attribution active         | On by default. Turning it off prevents this link's mobile payload from resolving without deleting the settings.                                    |

Safe metadata must be an object such as:

```json theme={null}
{
  "campaign": "spring_launch",
  "screen": "invite",
  "variant": 2
}
```

An array, string, or number at the top level is invalid and produces **Metadata must be a JSON object**. Do not add passwords, secrets, tokens, authorization or cookie data, payment-card information, government identifiers, email addresses, phone numbers, or health data. Biqli rejects sensitive field names.

## Forward selected query values

Only listed dynamic keys reach the app. For example, if the allowed list contains only `ref`:

```text theme={null}
https://go.example.com/invite?ref=BOB&evil=SECRET
```

the attribution can contain `dynamic.ref = "BOB"`; `evil` is discarded. Each accepted value must be a non-empty scalar string no longer than 256 characters.

The static referral code normally wins. If the link has no static referral and `ref` is allowed, the dynamic `ref` value can become the referral code.

## Understand edits and snapshots

When a visitor creates a deferred handoff, Biqli snapshots the link's route, referral code, safe metadata, and permitted dynamic values. Editing the link later does not change that existing handoff. A new click receives the updated configuration.

An installed app that opens the short URL directly resolves the payload for that new visit. Test again after changing the route, referral data, allowed query keys, or target Mobile App.

## Configure iOS Deep View

Exact iOS deferred attribution requires both:

* **Custom domains → your domain → Advanced settings → Deep View** enabled; and
* **iOS Deep View** enabled on this link.

The visitor selects **Continue** on the Deep View, installs the app, then explicitly selects the SDK's paste control after first launch. Biqli does not silently read the iOS pasteboard.

If either setting is off, the visitor is redirected to the iOS fallback without the exact paste handoff. Optional probabilistic matching is a separate, consent-gated Mobile App and SDK setting.

## Activation, expiration, and ordinary redirects

Mobile behavior still respects the link's active state and schedule. Disabled, not-yet-active, and expired links do not create a new eligible mobile handoff. Desktop visitors, bots, and unsupported devices follow the link's ordinary redirect behavior.

The stored mobile payload must also be active and unexpired. Selecting
**Remove mobile settings** deletes the payload rather than merely pausing it;
use **Attribution active** when you may want to restore the same configuration.

## Verify the link

1. Open the short URL on iOS and Android with the app installed.
2. Confirm each platform opens the expected screen.
3. Repeat without the app and confirm the correct store fallback.
4. Run the full deferred installation tests in [Test and troubleshoot mobile links](/developers/mobile/testing-troubleshooting).
5. Check the Mobile App detail page for the resolution event.

If the app does not appear in the selector, verify that it is active, uses the same custom domain, and that you are working in the same workspace.
