Deep-link syntax tester
Check that a deep link's syntax matches the format iOS Universal Links, Android App Links, or a custom scheme expects. Generates the matching apple-app-site-association and assetlinks.json snippets.
Server config snippet
Verify with curl (run on your terminal)
Ready.
How to use
- Paste the deep link URI (e.g.
myapp://product/123orhttps://example.com/app/product/123). - Pick the Platform tab — iOS Universal, Android App Link, Custom scheme.
- The tool tells you whether the URI matches each platform's required format and what's wrong if not.
- The Server config panel generates the
apple-app-site-associationpathsentry or theassetlinks.jsonentry your team needs to host. Copy it. - A copy-pasteable
curlsnippet at the bottom lets you fetch and verify the real association files from a terminal (this we can't do in the browser due to CORS).
Platform requirements at a glance
- iOS Universal Links — must be HTTPS and host
/.well-known/apple-app-site-associationwith no redirect, served asapplication/json. App's entitlements list the domain. - Android App Links — HTTPS,
/.well-known/assetlinks.json, plus your app signing certificate fingerprint. RequiresautoVerify="true"on the intent filter. - Custom schemes — register in
Info.plist(iOS) and an intent-filter (Android). Caveat: any app can register the same scheme on Android.
FAQ
Why use Universal Links instead of custom schemes?
Universal Links degrade gracefully (open the website if the app isn't installed) and can't be hijacked by another app. Custom schemes are simpler to set up but offer no such guarantees.
Why can't this fetch the AASA file directly?
CORS — your browser blocks cross-origin requests to most sites. The curl snippet lets you verify from a terminal where CORS doesn't apply.
Does the snippet include my real Team ID and package name?
No — it uses placeholders (TEAMID.com.example.app). Replace before publishing.
What about App Clips / Instant Apps?
Same association files are used, with extra fields (App Clip experiences in AASA, Instant App-specific intent filters on Android). Add those manually.