agentleFS
launch52-ailaunch52-ai/flutter-template/.claude/skills/deep-linking/SKILL.md

deep-linking

Skill2 starsChanged 9 months agoMITView on GitHub

Deep linking with Universal Links (iOS) and App Links (Android). Platform setup, domain verification, GoRouter integration, path-based routing. Use when implementing deep links, URL handling, or app-to-web navigation.

We split this skill into the rules it gives an agent

8 rules. About 0 are common, 3 are distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Create apple-app-site-association file (see ios-guide.md)

    line 40
  2. Very specific:

    Create assetlinks.json file (see android-guide.md)

    line 41
  3. Distinctive:

    Verify HTTPS and correct MIME types

    line 43
  4. Distinctive:

    Add Associated Domains capability in Xcode

    line 47
  5. Very specific:

    Add domain to Runner.entitlements

    line 48
  6. Very specific:

    Add intent filters to AndroidManifest.xml

    line 53
  7. Distinctive:

    Add route parameter extraction

    line 60
  8. Very specific:

    Test with adb and xcrun commands

    line 62

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Deep Linking - Universal Links & App Links

Deep linking setup for iOS (Universal Links) and Android (App Links) with GoRouter integration.

When to Use This Skill

  • Adding deep link support to a Flutter app
  • Configuring Universal Links for iOS
  • Configuring App Links for Android
  • Handling custom URL schemes
  • Integrating deep links with GoRouter
  • User asks "add deep linking", "universal links", "app links", or "URL handling"

Questions to Ask

  1. Domain: What domain will host the deep links? (e.g., example.com)
  2. Paths: Which paths should open the app? (e.g., /products/*, /users/*)
  3. Custom scheme: Need a custom URL scheme fallback? (e.g., myapp://)
  4. Environments: Multiple domains? (e.g., staging.example.com, example.com)
  5. Backend access: Can you host .well-known files on the server?

Reference Files

  • reference/router/deep_link_handler.dart - GoRouter deep link config
  • templates/ios/Runner.entitlements - Associated Domains
  • templates/android/android_manifest_deeplinks.xml - Intent filters

See: implementation-guide.md for complete setup.

Workflow

Phase 1: Domain Verification

  1. Create apple-app-site-association file (see ios-guide.md)
  2. Create assetlinks.json file (see android-guide.md)
  3. Host files at https://domain.com/.well-known/
  4. Verify HTTPS and correct MIME types

Phase 2: iOS Configuration

  1. Add Associated Domains capability in Xcode
  2. Add domain to Runner.entitlements
  3. Handle links in AppDelegate (if needed)

Phase 3: Android Configuration

  1. Add intent filters to AndroidManifest.xml
  2. Set autoVerify="true" for App Links
  3. Generate and add SHA-256 fingerprint to assetlinks.json

Phase 4: GoRouter Integration

  1. Configure GoRouter with deep link paths
  2. Add route parameter extraction
  3. Handle unknown deep links gracefully
  4. Test with adb and xcrun commands

Core API

// GoRouter handles deep links automatically
GoRouter(routes: [
  GoRoute(path: '/products/:id', builder: (context, state) =>
    ProductScreen(productId: state.pathParameters['id']!)),
]);
// Manual: GoRouter.of(context).go(Uri.parse(deepLink).path);

URL Types

TypeiOSAndroidFormat
Universal/App LinksYesYeshttps://domain.com/path
Custom SchemeYesYesmyapp://path
Firebase Dynamic LinksDeprecatedDeprecatedUse Universal/App Links

Domain Verification Files

iOS: apple-app-site-association

Host at: https://domain.com/.well-known/apple-app-site-association

{
  "applinks": {
    "apps": [],
    "details": [{
      "appID": "TEAM_ID.com.example.app",
      "paths": ["/products/*", "/users/*"]
    }]
  }
}

Android: assetlinks.json

Host at: https://domain.com/.well-known/assetlinks.json

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.app",
    "sha256_cert_fingerprints": ["SHA256_FINGERPRINT"]
  }
}]

Platform Requirements

iOS

  • Associated Domains capability enabled
  • HTTPS domain with valid certificate
  • apple-app-site-association file accessible (no redirects)
  • MIME type: application/json

Android

  • Intent filters with autoVerify="true"
  • SHA-256 fingerprints (debug, release, Play Store)
  • assetlinks.json file accessible
  • MIME type: application/json

Testing Commands

xcrun simctl openurl booted "https://example.com/products/123"  # iOS
adb shell am start -a android.intent.action.VIEW -d "https://example.com/products/123" com.example.app
adb shell pm get-app-links com.example.app                      # Verify Android
curl -I https://example.com/.well-known/apple-app-site-association

Guides

FileContent
ios-guide.mdUniversal Links, Associated Domains, AASA file
android-guide.mdApp Links, Intent Filters, Digital Asset Links
implementation-guide.mdGoRouter integration, path handling
checklist.mdVerification checklist

Common Issues

IssueCauseSolution
iOS link opens SafariAASA not foundCheck .well-known path and MIME type
Android shows app chooserautoVerify failedVerify assetlinks.json and SHA-256
Path not matchedWrong patternCheck path patterns in AASA/router
Works in dev, not prodWrong fingerprintAdd release/Play Store SHA-256

Checklist

  • Domain supports HTTPS with valid certificate
  • apple-app-site-association hosted at .well-known/
  • assetlinks.json hosted at .well-known/
  • iOS: Associated Domains capability added in Xcode
  • iOS: Domain added to Runner.entitlements
  • Android: Intent filters added to AndroidManifest.xml
  • Android: All SHA-256 fingerprints in assetlinks.json
  • GoRouter configured with deep link paths
  • Deep links tested on both platforms
  • Unknown paths handled gracefully

Related Skills

  • /core - GoRouter setup (run first)
  • /push-notifications - Deep links from notifications
  • /release - iOS capabilities, Android signing
  • /testing - Deep link integration tests

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.