App Links and Website Associations for Streaming Apps: A Practical Guide
appsdeep-linkinghow-to

App Links and Website Associations for Streaming Apps: A Practical Guide

UUnknown
2026-03-02
9 min read
Advertisement

Post‑casting, secure deep links with assetlinks.json and AASA to restore second‑screen playback and control.

After casting changes, can your streaming app still control playback?

Hook: With major platforms shifting casting behavior in 2025–2026, second‑screen control now depends less on vendor‑specific cast stacks and more on reliable, verified deep links between your website and mobile apps. If assetlinks.json, apple‑app‑site‑association (AASA) and proper manifests are not correct, users will lose seamless playback handoff, resume, and remote control — and your brand risks impersonation and poor UX.

Why app‑website association matters in 2026

Streaming services and device makers have retooled how remote playback works. After high‑profile changes to casting workflows in late 2025 and early 2026, many platforms deprecate wide casting in favor of explicit, verified, app‑centric handoff and control flows. That means your website and apps must have cryptographically verified associations so links originating on the web can open the right app, pass playback context (title, timecode, DRM tokens), and allow the app to confidently accept remote control commands.

Key benefits of verified associations:

  • Secure deep linking: Only your verified app can claim links from your domain.
  • Better UX: Tap a “Continue in app” or device pairing link and go straight to the right playback state.
  • Brand protection: Prevent third parties from impersonating your domain or app.
  • Indexing & SEO: Verified sites/apps can improve search indexing for app content and metadata signals.

Core components — what you must implement

There are three pillars to get right:

  1. Android assetlinks.json — located at https://yourdomain.com/.well-known/assetlinks.json, or at the site root. Declares package names and signing key fingerprints.
  2. iOS apple‑app‑site‑association (AASA) — a JSON file served over HTTPS at /.well-known/apple-app-site-association or the site root that maps domains to your app’s team and app IDs.
  3. App manifests & entitlements — AndroidManifest intent filters (with android:autoVerify="true") and iOS Associated Domains entitlements (e.g., applinks:yourdomain.com).

Step‑by‑step: Implement verified app‑website linking

Follow this pragmatic checklist to add or repair associations. I include commands and code you can copy into your CI/CD pipeline.

1) Prepare app identifiers and signing fingerprints

  • Android: note the package name (com.example.player) and the SHA‑256 fingerprint of the signing certificate. If you use Google Play App Signing, get the SHA‑256 from Play Console under Release > Setup > App signing.
  • iOS: note the App ID (com.example.player) and the Team ID (your 10‑character Apple Developer Team ID). You’ll use both in the AASA file.

Minimal example for Android:

[
  {
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
      "namespace": "android_app",
      "package_name": "com.example.player",
      "sha256_cert_fingerprints": [
        "AB:CD:12:34:...:EF"  
      ]
    }
  }
]

Best practices:

  • Host at https://yourdomain.com/.well-known/assetlinks.json. Android checks this path first.
  • Serve with header Content-Type: application/json; charset=utf-8.
  • Avoid redirects (Android tolerates some, but they cause verification to fail in many cases).
  • If you use multiple signing keys (debug vs release), only include the production (Play signing) fingerprint.

3) Create and host apple-app-site-association (AASA) (iOS)

Minimal AASA example (no file extension):

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TEAMID.com.example.player",
        "paths": ["/play/*", "/share/*", "NOT /internal/*"]
      }
    ]
  }
}

Best practices:

  • Host at https://yourdomain.com/.well-known/apple-app-site-association or the site root as a JSON file without extension.
  • Serve over HTTPS with a valid TLS certificate (no self‑signed). Apple expects a 200 OK and no chained redirects.
  • Include apps": [] top level to keep compatibility with older iOS versions.
  • Use paths to limit which URLs map to your app. Use NOT to exclude internal admin routes.

4) Add app side code

Android: Intent filter + autoVerify

<activity android:name=".PlayerActivity">
  <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="/play/" />
  </intent-filter>
</activity>

iOS: Associated Domains entitlement

applinks:yourdomain.com

Add the entitlement in Xcode under Signing & Capabilities > Associated Domains.

5) Test and validate

Two sets of checks: server side and device side.

Server-side checks

  • Check the file is reachable and valid JSON:
curl -I https://yourdomain.com/.well-known/assetlinks.json
curl -s https://yourdomain.com/.well-known/apple-app-site-association | jq .
  • Expected status: 200 OK.
  • Expected Content-Type: application/json (for assetlinks) and ideally application/json for AASA as well.
  • Ensure there are no redirects in the chain or strip them out of your CDN configuration.

Android device checks

  • Force re‑verification and inspect status using adb:
adb shell pm verify-app-links --re-verify com.example.player
adb shell pm get-app-links com.example.player

Look for verified = true for your host.

iOS device checks

  • Install the app, then tap a test URL from Safari or Notes (ensure the app is installed). If configured, iOS will open the app directly for matching paths.
  • If links open in Safari instead, check Xcode device logs for AASA download errors and verify TLS/certificate chain.

Troubleshooting common failures

Here are real issues we see during audits and how to fix them quickly.

  • Fix: Ensure file is deployed to the public webroot. Check CDN rules and origin path mapping. Some CDNs strip “.well‑known” by default — whitelist it.

2) Wrong SHA‑256 fingerprint

  • Fix: If you use Google Play App Signing, use the Play Console’s app signing certificate fingerprint, not your local debug key. For local builds use debug fingerprints only for internal testing and remove them from production file.

3) Redirects break verification

  • Fix: Serve files from the origin without redirects. If your site forces www vs naked domain, host the JSON on both or use canonical domain matching in your app intent filters and entitlements.

4) TLS / certificate chain errors

  • Fix: Use a valid certificate (Let’s Encrypt, commercial CA), and ensure intermediate certificates are served. Run SSL checks (SSL Labs). Apple and Android verification fail on incomplete chains.

5) Content‑Type mismatches

  • Fix: Set Content‑Type to application/json; charset=utf-8 for assetlinks. For AASA, application/json is safest. Avoid text/html or forcing downloads.

6) Caching/CDN serves stale file after update

  • Fix: Purge CDN caches after updates and set appropriate Cache‑Control headers (short TTL for verification files during rollout).

Practical patterns for streaming apps and second‑screen flows

Here are tested patterns streaming teams use to replace or augment casting.

  1. On the TV or device, show a short QR code or numeric code tied to a playback session.
  2. User scans QR or opens URL on mobile; site verifies domain and immediately issues an app link with timecode: https://yourdomain.com/play/episode-123?t=1234&token=shortlived.
  3. Because the app is verified for yourdomain.com, iOS/Android open the app and pass the parameters securely.
  4. The app validates the short‑lived token with your backend and resumes playback at the requested time.

Remote control using WebSocket with verified origin

After association, your app can accept remote control requests from your website if the web client proves it’s on the verified domain. Use short‑lived tokens created server‑side and verify origin headers plus token signatures in the app backend before executing playback commands.

Fallback flows

Always provide graceful fallback: if auto launch into app fails, provide a website player with a prominent CTA to install the app or resume in browser. Track fallbacks in analytics to spot verification regressions.

Advanced strategies and security recommendations (2026)

As deep linking becomes central to UX, apply these advanced controls:

  • Scope paths tightly: Limit AASA and assetlinks paths to playback and sharing endpoints only. Avoid global handlers for /.
  • Rotate keys & monitor: Log verification failures and rotate signing keys on a planned cadence. For Play App Signing, follow Google’s key rotation guidance.
  • Use short‑lived pairing tokens: Never pass long‑lived credentials through URLs. Implement server validation for every pairing event.
  • Monitor TLS posture: Enforce TLS 1.2+ and modern ciphers. Use HSTS to avoid downgrade attacks.
  • Audit third‑party content: Avoid embedding untrusted scripts on paths used for app associations; a compromised page can lead to mischief.

Real world example: Recovering playback after casting removal

Scenario: After Netflix’s 2026 shift reducing open casting to legacy devices, a mid‑sized streaming service needed a quick path to retain second‑screen UX. They implemented verified app links across Android and iOS, added a short QR + code pairing flow, and tightened AASA paths to only /play/*. Within two weeks they recovered 85% of the lost second‑screen interactions and reduced support tickets about “remote control not working” by 70%.

Key takeaways from the case:

  • Verified app links reduced friction versus custom deep linking schemes.
  • Short TTL tokens prevented token replay and improved security.
  • Server side validation of pairing tokens allowed playback control without trusting the client alone.

Checklist: Deploy in a day (practical rollout plan)

  1. Get production app signing SHA‑256 and package name + iOS Team ID.
  2. Create assetlinks.json and AASA files; place them on the origin at /.well‑known/.
  3. Configure CDN to forward /.well‑known/* and serve correct Content‑Type and TLS chain.
  4. Add Android intent filters with autoVerify and iOS Associated Domains. Build and upload releases to internal testing tracks.
  5. Test on devices using adb verification and by opening sample URLs on iOS. Iterate until verified = true (Android) and links open (iOS).
  6. Roll out to production; monitor verification logs and user fallbacks.

Resources & commands (quick reference)

  • Check assetlinks.json: curl -I https://yourdomain.com/.well-known/assetlinks.json
  • Inspect AASA: curl -s https://yourdomain.com/.well-known/apple-app-site-association | jq .
  • Android verify: adb shell pm verify-app-links --re-verify com.example.player
  • Android status: adb shell pm get-app-links com.example.player
  • Get Play App Signing SHA‑256: Google Play Console > Setup > App Signing
  • SSL check: Qualys SSL Labs or OpenSSL: openssl s_client -connect yourdomain.com:443 -showcerts
Industry note: Since late 2025, platform vendors have encouraged verified app‑site associations over universal casting APIs. Treat your assetlinks and AASA implementation as core infra — not an optional feature.

Final checklist before you call it done

  • Files reachable on both https://yourdomain.com and https://www.yourdomain.com (if you use both).
  • Production signing fingerprints only in assetlinks.json.
  • Paths scoped and tested on devices.
  • TLS chain validated; no redirects for verification endpoints.
  • Telemetry in place: record verification events and track fallbacks for 30 days post rollout.

Conclusion — future‑proof your second‑screen UX

As casting architectures evolve, verified app‑website associations are now the reliable glue between web playback and native apps. In 2026, streaming UX depends on cryptographic proof of ownership more than ever. Implement assetlinks.json and AASA correctly, secure your TLS, and restrict paths so your mobile apps can confidently open, resume, and control playback. The result is fewer support tickets, higher retention, and a better brand experience.

Call to action

Ready to secure your streaming UX now? Run our 10‑minute checklist: verify your assetlinks and AASA, test on devices, and patch any TLS or redirect issues. If you want a tailored verification audit and automated monitors for assetlinks/AASA, contact the claimed.site team — we’ll help you reclaim second‑screen control and protect your brand.

Advertisement

Related Topics

#apps#deep-linking#how-to
U

Unknown

Contributor

Senior editor and content strategist. Writing about technology, design, and the future of digital media. Follow along for deep dives into the industry's moving parts.

Advertisement
2026-03-02T01:12:40.434Z