Skip to main content
Glama
android-app-links.md6.96 kB
--- title: Android App Links description: Learn how to configure Android App Links to open your Expo app from a standard web URL. hasVideoLink: true --- To configure Android App Links for your app, you need to: - Add `intentFilters` and set `autoVerify` to true in your project's app config - Set up two-way association to verify your website and native app ## Add `intentFilters` to the app config Configure your app config by adding the `android.intentFilters` property and setting the `autoVerify` attribute to `true`. Specifying `autoVerify` is required for Android App Links to work correctly. The following example shows a basic configuration that enables your app to appear in the standard Android dialog as an option for handling any links to the `webapp.io` domain. It also uses the regular `https` scheme since [Android App Links](/linking/overview/#android-app-links) are different from [standard deep links](/linking/into-other-apps/). ```json app.json|collapseHeight=454 { "expo": { "android": { "intentFilters": [ { "action": "VIEW", /* @info Add the autoVerify property to the intent filter in app config to enable app links.*/ "autoVerify": true, /* @end */ "data": [ { "scheme": "https", "host": "*.webapp.io", "pathPrefix": "/records" } ], "category": ["BROWSABLE", "DEFAULT"] } ] } } } ``` ## Set up two-way association To setup **two-way association** between the website and Android app, you will need the following: - **Website verification:** This requires creating a **assetlinks.json** file inside the **/.well-known** directory and hosting it on the target website. This file is used to verify that the app opened from a given link is the correct app. - **Native app verification:** This requires some form of code signing that references the target website domain (URL). ### Create assetlinks.json file Create an **assetlinks.json** file for the website verification (also known as [digital asset links](https://developers.google.com/digital-asset-links/v1/getting-started) file) at **/.well-known/assetlinks.json**. This file is used to verify that the app opened for a given link. If you're using Expo Router to build your website (or any other modern React framework such as Remix, Next.js, and so on), create **assetlinks.json** at **public/.well-known/assetlinks.json**. For legacy Expo webpack projects, create the file at **web/.well-known/assetlinks.json**. Get the value of `package_name` from your app config, under `android.package`. Get the value of `sha256_cert_fingerprints` from your app's signing certificate. If you're using [EAS Build](/build/setup/) to build your Android app, after creating a build: - Run `eas credentials -p android` command, and select the build profile to get its fingerprint value. - Copy the fingerprint value listed under `SHA256 Fingerprint`. <Collapsible summary="Alternate method to obtain the SHA256 certificate fingerprint from Google Play Console"> If you're not using EAS to manage code signing, you can find the **sha256_cert_fingerprints** by building and submitting your app manually to the [Google Play Console](https://play.google.com/console/): - Inside the Google Play Console's dashboard, go to **Release > Setup > App Signing**. - Find the correct **Digital Asset Links JSON** snippet for your app. - Copy the value looks like `14:6D:E9:83...` and paste it into your **public/.well-known/assetlinks.json** file under `sha256_cert_fingerprints`. </Collapsible> Add `package_name` and `sha256_cert_fingerprints` to the **assetlinks.json** file: ```json public/.well-known/assetlinks.json [ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", /* @info Replace <CODE>com.example</CODE> with your app's package name. */ "package_name": "com.example", /* @end */ "sha256_cert_fingerprints": [ // Supports multiple fingerprints for different apps and keys /* @info Replace <CODE>14:6D:E9:83...</CODE> with your app's SHA256 certificate fingerprint. */ "14:6D:E9:83:51:7F:66:01:84:93:4F:2F:5E:E0:8F:3A:D6:F4:CA:41:1A:CF:45:BF:8D:10:76:76:CD" /* @end */ ] } } ] ``` > **info** You can add multiple fingerprints to the `sha256_cert_fingerprints` array to support different variants of your app. For more information, see [Android's documentation on how to declare website associations](https://developer.android.com/training/app-links/verify-android-applinks#web-assoc). ### Host assetlinks.json file Host the **assetlinks.json** file using a web server with your domain. This file must be served with the content-type `application/json` and accessible over an HTTPS connection. Verify that your browser can access this file by typing the complete URL in the address bar. ### Native app verification Install the app on an Android device to trigger the [Android app verification](https://developer.android.com/training/app-links/verify-android-applinks#web-assoc) process. Once you have your app opened, see [Handle links into your app](/linking/into-your-app/#handle-urls) for more information on how to handle inbound links and show the user the content they requested. ## Debugging The Expo CLI enables you to test Android App Links without deploying a website. Utilizing the [`--tunnel`](/more/expo-cli/#tunneling) functionality, you can forward your dev server to a publicly available HTTPS URL. Set the environment variable `EXPO_TUNNEL_SUBDOMAIN=my-custom-domain` where `my-custom-domain` is a unique string that you use during development. This ensures that your tunnel URL is consistent across dev server restarts. Add `intentFilters` to your app config as [described above](#add-intentfilters-to-the-app-config). Replace the `host` value with a Ngrok URL: `my-custom-domain.ngrok.io`. Start your dev server with the `--tunnel` flag: Compile the development build on your device: Use the following `adb` command to start the intent activity and open the link on your app or type the custom domain link in your device's web browser. <Terminal cmd={[ '$ adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "https://my-custom-domain.ngrok.io/" <your-package-name>', ]} /> ## Troubleshooting Here are some common tips to help you troubleshoot when implementing Android App Links: - Ensure your website is served over HTTPS and with the content-type `application/json` - [Verify Android app links](https://developer.android.com/training/app-links/verify-android-applinks) - Android verification may take 20 seconds or longer to take effect, so be sure to wait until it is completed. - If you update your web files, rebuild the native app to trigger a server update on the vendor side (Google)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jaksm/expo-docs-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server