Deep Link Testing Hub

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>

URL Scheme Deep Links

WhatsApp
Telegram
Twitter Profile
Instagram Profile
Facebook Profile
LinkedIn
Spotify Track
YouTube Video
Play Store App

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

Universal Link Domain Checker

Enter your domain to verify Universal Links configuration:

iOS Configuration

Android Configuration