Test and validate your deep links
Check the files first, then the device. Read the apple-app-site-association and assetlinks files your domain serves, confirm each lists your app, and then tap a real link on a phone. A tap in Notes or the mail app is the true test, because typing a link into a browser bar does not open an app.
How it works
Read the association files
Paste your link domain into the deep link checker. It fetches the apple-app-site-association file and the assetlinks file and says what each one lists. The iOS file must name your team ID and bundle ID, and the Android file must hold your package name and signing certificate hash.
Test on an iOS device or simulator
On a simulator, open the link with xcrun simctl. On a real device, paste the link into Notes and tap it.
Test on an Android device
Open the link with adb as a browsable VIEW intent, so the system picks the handler. Then read what the device recorded for your domains with pm get-app-links.
Open the setup test address
Each app host serves a setup page at https://{handle}.aplnk.to/test. On a phone with your build installed, a tap on that address opens the app. If the page opens in the browser instead, it says the app did not open the link and points to the setup steps. It records no click.
Check the redirect
Run the link through the redirect checker to read each hop and its status. A link that wanders through a tracking address will not hand off to the app.
Let an assistant run the setup check
The verify_setup MCP tool checks the app configuration, hosted files, domain, SDK key, test link and first click, and lists the steps that need a person.
Test from the command line
# Open a link on the booted simulator
xcrun simctl openurl booted "https://links.example.com/product/123"
# On a real device, paste the link into Notes and tap it.
# Typing it into the Safari address bar never opens an app.# Let the system choose the handler. This is the real App Links test.
adb shell am start -a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "https://links.example.com/product/123"
# Read what the device recorded for your domains. "verified" means App Links work.
adb shell pm get-app-links com.example.myapp{
"tool": "verify_setup",
"input": { "app_id": "3f9a1c2e-6b7d-4e1a-9c2f-8a5b1d0e7c44" },
"output": {
"app_id": "3f9a1c2e-6b7d-4e1a-9c2f-8a5b1d0e7c44",
"ready": true,
"checks": [
{
"id": "well_known_files",
"status": "pass",
"host": "acme.aplnk.to",
"detail": "acme.aplnk.to serves the link files for this app."
},
{
"id": "test_link",
"status": "pass",
"detail": "An active link exists: https://acme.aplnk.to/summer"
},
{
"id": "sdk_connected",
"status": "needs_human",
"detail": "No SDK request has been recorded. Only a real device running the app can send one.",
"fix": "Put the SDK key in the app, call `WarpLink.configure`, then ask the person to start the app on a device with network access.",
"docs_url": "https://warplink.app/docs/quickstart"
}
],
"needs_human": [
{
"id": "sdk_connected",
"detail": "No SDK request has been recorded. Only a real device running the app can send one.",
"fix": "Put the SDK key in the app, call `WarpLink.configure`, then ask the person to start the app on a device with network access."
}
]
}
}What you get
- Linking
- Association files generated and hosted for your app and your domains, so the checks read what the phone reads.
- Attribution
- A working link is where install attribution begins: installs that follow a tap on a WarpLink link, in any channel, can only be matched when the tap reaches us.
- Analytics
- The first click and the first install appear in the link report, which confirms the path end to end.
Common questions
Why does my link open the app from Notes but not from Safari's address bar?
Universal Links need a tap on a link. Typing or pasting a URL into the address bar is a navigation by the browser, and iOS does not hand it to an app.
How do I know Android verified my domain?
Run adb shell pm get-app-links with your package name. A domain that shows verified is claimed by your app.
What does the deep link checker read?
It fetches the apple-app-site-association file and the assetlinks file for the domain you give it, and reports what each one lists for your app.
Why does the link work in one app and not another?
Some apps open links in an embedded browser that does not hand them to the system. The post on in-app browsers covers each case.
Where do I start if the app does not open?
Start with the files. Most failures are a wrong team ID, bundle ID or certificate hash, or a redirect on the way to the file. The checker shows which one.