# Open the app from links

When your app is installed, a phone can open your links straight in the app instead of the browser. iOS calls this **Universal Links** and Android calls it **App Links**. Both work the same way: the phone fetches a small file from your link host that lists your app, and your app says it handles that host. Mocco serves those files for you on both of your project's hosts. You give Mocco a few details and add a few lines to your app.

People who don't have the app installed still go where the link sends them today: the store page or your web page (see [Deep links overview](https://www.mocco.club/docs/en/articles/xz8btr-overview)).

## 1. Give Mocco your app's details

On **Deep links → Settings**, each iOS and Android app of the project has a card. Only owners and admins can change these.

- **iOS:** enter your **Apple Team ID**, the 10 letters and digits shown under **Membership details** at developer.apple.com/account. The app's bundle ID comes from the project's **Apps**.
- **Android:** enter your **Signing certificate SHA-256 fingerprints**, one per line. The package name comes from the project's **Apps** (its Application ID).

Save each card. The files on your hosts change as soon as you save.

### Finding the Android fingerprint

If Google Play signs your app (Play App Signing, the default for new apps), use the fingerprint of Google's **app signing key**, not your upload key: in Play Console open your app, then **Test and release → App integrity → Play app signing**, and copy the **SHA-256 certificate fingerprint** under **App signing key certificate**. Add your upload key's fingerprint too if you install builds you signed yourself, such as internal test builds.

## 2. Add the lines to your app

Under **Open the app from links**, Mocco shows the lines for both of your hosts, ready to copy:

- **iOS:** the **Associated Domains entitlement** (`applinks:<your host>` for each host). In Xcode, add it under **Signing & Capabilities → Associated Domains**. With Expo, copy the **Expo app.json (iOS)** snippet into `ios.associatedDomains`.
- **Android:** the **AndroidManifest.xml intent filter** with `android:autoVerify="true"` and both hosts. With Expo, copy the **Expo app.json (Android)** snippet into `android.intentFilters`.

Then build and install the app again: phones read these lines when the app is installed.

## 3. Check the files

Choose **Check now**. Mocco fetches both files from each host the way Apple and Google do and tells you what's wrong, if anything: a host that doesn't answer, a redirect, a wrong content type, or a file that's missing one of your apps or fingerprints. You can check up to 10 times a minute.

**Show the files** shows exactly what each host serves. The links to each file are there to copy too.

## 4. Test on a phone

- **iOS:** Apple fetches the file through its own cache, which can take up to a day to see a change; **Check now** tells you when Apple's copy is behind. To test sooner, add `?mode=developer` to the entitlement on a development build (`applinks:<your host>?mode=developer`) and turn on **Settings → Developer → Associated Domains Development** on the device. Then open a link from Notes or Messages: links typed into Safari's address bar open in Safari.
- **Android:** install the app, then run `adb shell pm get-app-links <your package>` and check that both hosts say `verified`. Open a link from another app, such as Messages.

## What stays in the browser

Mocco's own pages on your hosts, such as the **Report this link** form, always open in the browser, on both platforms.
