Deep Link Testing Hub

AASA Validator, Universal Link Checker, Apple App Site Association (AASA) Validator, Universal Links / App Links Validator

By Capgo.app

About Our AASA & Universal Links Validator

Our AASA & Universal Links Validator is designed to help you confirm your website's readiness for Universal Links. We examine your domain's apple-app-site-association (AASA) file hosting, comparing it against Apple's official guidelines and insights from successful production deployments.

Ensuring your AASA file is correctly configured is vital. It's a key factor in delivering a seamless experience for your iOS app users when they interact with your links.

What if your AASA file checks out, but Universal Links aren't working as expected? Our validator can also assist in diagnosing issues related to your Xcode project's Universal Links setup.

For a more thorough check, you can provide your Apple App Prefix and Bundle Identifier. This allows the validator to verify that these crucial values from your project are accurately reflected in your AASA file.

Upon completion, if your apple-app-site-association file meets all criteria, we'll present its content. Otherwise, we'll clearly indicate which specific tests did not pass, or which couldn't be executed due to preceding errors.

Universal Links (AASA)

Product Page
User Profile
Settings

System Deep Links

Phone Call
Send SMS
Send Email
Open Coordinates
Google Maps Search
Waze Navigation
Web Search
Settings
WiFi Settings
Bluetooth Settings
Notifications Settings
Location Settings

Testing Tips

• Not all deep links may work on every device or platform

• Some apps might need to be installed for deep links to work

• iOS and Android might handle deep links differently

• Custom URL schemes are specific to each app

Deep Linking Setup Guide

To open other apps from your app:

iOS Configuration

  1. Configure LSApplicationQueriesSchemes in Info.plist:
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>whatsapp</string>
        <string>telegram</string>
        <string>twitter</string>
        <string>instagram</string>
        <string>fb</string>
        <string>linkedin</string>
        <string>spotify</string>
        <string>youtube</string>
        <string>maps</string>
        <string>waze</string>
    </array>
  2. Implement the code:
    func openDeepLink(scheme: String, path: String) {
        if let url = URL(string: "\(scheme)://\(path)") {
            if UIApplication.shared.canOpenURL(url) {
                UIApplication.shared.open(url)
            }
        }
    }

Android Configuration

  1. Add queries to AndroidManifest.xml:
    <queries>
        <package android:name="com.whatsapp" />
        <package android:name="org.telegram.messenger" />
        <package android:name="com.twitter.android" />
        <package android:name="com.instagram.android" />
        <package android:name="com.facebook.katana" />
        <package android:name="com.linkedin.android" />
        <package android:name="com.spotify.music" />
        <package android:name="com.google.android.youtube" />
        <package android:name="com.google.android.apps.maps" />
        <package android:name="com.waze" />
    </queries>
  2. Implement the code:
    fun openDeepLink(scheme: String, path: String) {
        val intent = Intent(Intent.ACTION_VIEW, Uri.parse("$scheme://$path"))
        startActivity(intent)
    }

To allow your app to receive deep links:

iOS Configuration

  1. Add URL schemes in Xcode:
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>myapp</string>
            </array>
        </dict>
    </array>
  2. Implement the code:
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        // Handle deep link
        return true
    }

Android Configuration

  1. Configure intent filters in AndroidManifest.xml:
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="myapp" />
        </intent-filter>
    </activity>
  2. Implement the code:
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        handleIntent(intent)
    }
    
    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        handleIntent(intent)
    }
    
    private fun handleIntent(intent: Intent?) {
        if (intent?.action == Intent.ACTION_VIEW) {
            val uri = intent.data
            // Handle deep link
        }
    }

Modern deep linking using Universal Links (iOS) and App Links (Android):

Quick Setup Guide

Getting your iOS Team ID:

  1. Visit Apple Developer Account
  2. Click on "Membership" in the left sidebar
  3. Your Team ID is displayed at the top of the page

Getting your Android SHA-256 Certificate Fingerprint:

  1. For Debug certificate:
    # Debug certificate
    keytool -list -v \
      -keystore ~/.android/debug.keystore \
      -alias androiddebugkey \
      -storepass android \
      -keypass android
  2. For Release certificate:
    # Release certificate
    keytool -list -v \
      -keystore your-release-key.keystore \
      -alias your-key-alias
  3. Look for "SHA256:" in the output

Configure your iOS Universal Links:

  1. Create apple-app-site-association file:
    {
      "applinks": {
        "apps": [],
        "details": [
          {
            "appID": "TEAM_ID.com.example.app",
            "paths": ["/app/*", "/products/*"]
          }
        ]
      }
    }
  2. Host at https://example.com/.well-known/apple-app-site-association
  3. Enable Associated Domains capability in Xcode
  4. Add domain to Associated Domains list

Configure your Android App Links:

  1. Create assetlinks.json file:
    [{
      "relation": ["delegate_permission/common.handle_all_urls"],
      "target": {
        "namespace": "android_app",
        "package_name": "com.example.app",
        "sha256_cert_fingerprints": ["YOUR_APP_SIGNING_KEY_SHA256"]
      }
    }]
  2. Host at https://example.com/.well-known/assetlinks.json
  3. Configure AndroidManifest.xml:
    <activity android:name=".MainActivity">
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https"
                android:host="yourdomain.com"
                android:pathPrefix="/app" />
        </intent-filter>
    </activity>

Real-World Examples

See how major companies implement their AASA and Asset Links files:

Apple App Site Association (AASA) Examples

YouTube:
https://www.youtube.com/.well-known/apple-app-site-association
Twitter:
https://twitter.com/.well-known/apple-app-site-association
GitHub:
https://github.com/.well-known/apple-app-site-association

Android Asset Links Examples

YouTube:
https://www.youtube.com/.well-known/assetlinks.json
Twitter:
https://twitter.com/.well-known/assetlinks.json
GitHub:
https://github.com/.well-known/assetlinks.json

Universal Link Domain Checker

Enter your domain to verify Universal Links configuration:

OSZAR »